求dalao帮忙看下为啥WA了四个点Orz!!!
查看原帖
求dalao帮忙看下为啥WA了四个点Orz!!!
749301
AmiyaCast楼主2022/9/8 09:36
#include<cstring>
#include<iostream>
using namespace std;
long long n, m, ans, tmp;
long long a[1 << 11 + 7][2];
char c[5];
long long calc(int bit, int now)
{
	for(int i = 1; i <= n; ++i)
	{
		int x = (a[i][1] >> bit) & 1;
		//cout<<"x="<<x<<' ';
		if(a[i][0] == 1) now &= x;
		else if(a[i][0] == 2) now |= x;
		else if(a[i][0] == 3) now ^= x;
		//cout<<"now="<<now<<' ';
	}
	return now;
}
int main(){
	scanf("%d%d", &n, &m);
	for(int i = 1; i <= n; ++i)
	{
		scanf("%s%d", c, &a[i][1]);
		if(c[0] == 'A') a[i][0] = 1;
		else if(c[0] == 'O') a[i][0] = 2;
		else a[i][0] = 3;
	}
	/*for(int i = 1; i <= n; ++i){
		cout<<a[i][0]<<' '<<endl<<endl;
	}*/
	for(int op = 18; op >= 0; --op){
		//cout<<op<<":"<<endl;
		int ans1 = calc(op, 1);
		int ans0 = calc(op, 0);
		if(ans1 > ans0 && ((ans1 << op) + tmp) <= m)
		{
			//cout<<endl<<endl<<m<<' '<<(ans1 << op + tmp)<<endl<<endl;
			tmp += 1 << op;
			ans += ans1 << op;
		}
		else
		ans += (ans0 << op); 
		//cout<<":"<<ans0<<' '<<ans1<<' '<<tmp<<endl;
	}
	printf("%d", ans);
	return 0;
}

//WA 60 

万分感谢Orz!!

2022/9/8 09:36
加载中...