P2114 [NOI2014]起床困难综合症
1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 const int maxn=1e5+10; 5 char op[10]; 6 long long n,m; 7 long long t; 8 long long ans=0,ans0=0,ans1=0x7fffffff; 9 int main() 10 { 11 //freopen("testdata.in","r",stdin); 12 scanf("%lld%lld",&n,&m); 13 for(int i=1;i<=n;i++) 14 { 15 scanf("%s %lld",op,&t); 16 if(op[0]=='A') 17 { 18 ans1&=t; 19 ans0&=t; 20 } 21 else 22 if(op[0]=='O') 23 { 24 ans1|=t; 25 ans0|=t; 26 } 27 else 28 if(op[0]=='X') 29 { 30 ans1^=t; 31 ans0^=t; 32 } 33 } 34 for(int i=30;i>=0;i--) 35 { 36 if(ans0&(1<<i)) 37 { 38 ans+=(1<<i); 39 } 40 else 41 if((m>=(1<<i))&&(ans1&(1<<i))) 42 { 43 m-=(1<<i); 44 ans+=(1<<i); 45 } 46 } 47 cout<<ans<<endl; 48 return 0; 49 }