玄关
查看原帖
玄关
943468
lizicheng3042楼主2024/8/23 16:22
#include<cstdio>
#include<algorithm>
using namespace std;
typedef long long ll;
int n,c,op,val,i1[32],i0[32];
void change(int way,int y)
{
//	printf("(%d,%d)",way,y);
	int wei=0;
	if(way==1)
	{
		for(int a=0;a<=29;a++)
		{
			(y&1)?i1[wei]=i1[wei]:i1[wei]=i0[wei]=0;
			y>>=1;wei++;
		}
	}
	else if(way==2)
	{
		for(int a=0;a<=29;a++)
		{
			(y&1)?i1[wei]=i0[wei]=1:i1[wei]=i1[wei];
			y>>=1;wei++;
		}
	}
	else
	{
		for(int a=0;a<=29;a++)
		{
			(y&1)?i1[wei]^=1,i0[wei]^=1:i1[wei]=i1[wei];
			y>>=1;wei++;
		}
	}
}
int newer(int x,int wei)
{
	if(wei==30)
		return 0;
	if(x&1)
		return i1[wei]+(newer(x>>1,wei+1)<<1);
	else
		return i0[wei]+(newer(x>>1,wei+1)<<1);
		
	
}
int main()
{
	scanf("%d%d",&n,&c);
	for(int a=0;a<=30;a++)
		i1[a]=1;
	for(int a=1;a<=n;a++)
	{
		scanf("%d%d",&op,&val);
		change(op,val);
		c=newer(c,0);
		printf("%d\n",c);
	}
	
	return 0;
}

感觉代码以及思路和题解基本一致,但是不知道哪有问题。

2024/8/23 16:22
加载中...