50pts求调
查看原帖
50pts求调
924891
HuChai楼主2024/11/9 17:52
#include <bits/stdc++.h>
using namespace std;
long long n,m,t[100005],ans;
string op[100005];
int main() {
	cin>>n>>m;
	for(int i=1; i<=n; i++) {
		cin>>op[i]>>t[i];
	}
	for(int i=60; i>=0; i--) {
		if(ans+(1<<i)<=m) {
			bool k=1;
			for(int j=1; j<=n; j++) {
				if(op[j]=="AND") k&=(t[j]&(1<<i));
				if(op[j]=="OR") k|=(t[j]&(1<<i));
				if(op[j]=="XOR") k^=(t[j]&(1<<i));
			}
			bool k2=0;
			for(int j=1; j<=n; j++) {
				if(op[j]=="AND") k2&=(t[j]&(1<<i));
				if(op[j]=="OR") k2|=(t[j]&(1<<i));
				if(op[j]=="XOR") k2^=(t[j]&(1<<i));
			}
			if(k>k2) ans+=(1<<i);
		}
	}
	for(int i=1; i<=n; i++) {
		if(op[i]=="AND") ans&=t[i];
		if(op[i]=="OR") ans|=t[i];
		if(op[i]=="XOR") ans^=t[i];
	}
	cout<<ans;
	return 0;
}
2024/11/9 17:52
加载中...