RT,我Code里面的 limit ,如果是 30,29 就可以过。
但是 31,32 就会 WA #6
28 就会 WA #2,10
不是很理解为什么,求看看 /kel
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define rep(x,l,r) for(register int (x)=(l);(x)<=(r);++(x))
#define per(x,r,l) for(register int (x)=(r);(x)>=(l);--(x))
const int si=1e5+10;
struct node{
int op,val;
}a[si];
int n,m,limit;
int ret=0,ans=0;
inline int calc(int pos,int msk){
rep(i,1,n){
if(a[i].op==0) msk=msk&(a[i].val>>pos&1);
if(a[i].op==1) msk=msk|(a[i].val>>pos&1);
if(a[i].op==2) msk=msk^(a[i].val>>pos&1);
} return msk;
}
signed main(){
scanf("%lld%lld",&n,&m),limit=30;
// 30 or 29 -> AC
// 31 or 32 ->WA #6
// 28 -> WA #2,10
rep(i,1,n){ string s;
cin>>s,scanf("%lld",&a[i].val);
if(s[0]=='A') a[i].op=0;
if(s[0]=='O') a[i].op=1;
if(s[0]=='X') a[i].op=2;
}
per(i,limit,0){
int a=calc(i,0),b=calc(i,1);
if(ret+(1<<i)<=m && a<b) ret+=(1<<i),ans+=(b<<i);
else ans+=(a<<i);
} return printf("%lld\n",ans),0;
}