#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans,a=0,b=-1;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
string s;
cin>>s>>x;
if(s[0]=='A') a&=x,b&=x;
if(s[0]=='X') a^=x,b^=x;
if(s[0]=='O') a|=x,b|=x;
}
for(int i=29;i>=0;i--){
if((a>>i)&1) ans+=1<<i;
else if(((b>>i)&1) and ans+(1<<i)<=m) ans+=1<<i;
}
cout<<ans;
return 0;
}
这种写法WA了三个点
#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,ans,a=0,b=-1;
signed main(){
cin>>n>>m;
for(int i=1;i<=n;i++){
int x;
string s;
cin>>s>>x;
if(s[0]=='A') a&=x,b&=x;
if(s[0]=='X') a^=x,b^=x;
if(s[0]=='O') a|=x,b|=x;
}
for(int i=29;i>=0;i--){
if((a>>i)&1) ans+=1<<i;
else if(((b>>i)&1) and (1<<i)<=m) ans+=1<<i,m-=1<<i;
}
cout<<ans;
return 0;
}
换成兔队题解的写法就A了,不理解为什么第一种写法寄了。