显示代码纯文本
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=100010;
bool judge(unsigned,unsigned);
char c[15];
unsigned n,m,op[maxn]={0u},a[maxn],ans=0u;
int main(){
freopen("sleep.in","r",stdin);
freopen("sleep.out","w",stdout);
scanf("%u%u",&n,&m);
for(unsigned i=0u;i<n;i++){
scanf("%s%u",c,&a[i]);
if(!strcmp(c,"OR"))op[i]=1u;
else if(!strcmp(c,"XOR"))op[i]=2u;
}
for(unsigned i=31u;~i;i--)if((ans|(1u<<i))<=m&&!judge(0,i)&&judge(1,i))ans|=1u<<i;
for(unsigned i=0;i<n;i++){
if(!op[i])ans&=a[i];
else if(op[i]==1u)ans|=a[i];
else ans^=a[i];
}
printf("%u",ans);
return 0;
}
bool judge(unsigned x,unsigned k){
for(unsigned i=0u;i<n;i++){
if(!op[i])x&=(a[i]>>k)&1u;
else if(op[i]==1u)x|=(a[i]>>k)&1u;
else x^=(a[i]>>k)&1u;
}
return x;
}
/*
3 10
AND 5
OR 6
XOR 7
Answer:
7
*/