[NOI2014] 起床困难综合症
生活随笔
收集整理的這篇文章主要介紹了
[NOI2014] 起床困难综合症
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
水題的題解也水......
原題鏈接:洛谷?P2114 [NOI2014]起床困難綜合癥
位運算每一位之間互不干擾。
經(jīng)過所有門之后每一位不外乎四種結(jié)果:一定是0,一定是1,不變或取反。
按位枚舉,貪心即可。
對于不變的,我們在限制之內(nèi)盡可能選更多的1。
其余三種都選0。
代碼略顯繁雜。
1 #include<cstdio> 2 #include<cstring> 3 #include<algorithm> 4 using namespace std; 5 6 int n,m; 7 int op[100005]; 8 int b[100005]; 9 int res[35]; 10 int fin[35]; 11 int ans; 12 13 int main() 14 { 15 scanf("%d%d",&n,&m); 16 char tp[10]; 17 for(int i=1;i<=n;i++) 18 { 19 scanf("%s",tp+1); 20 scanf("%d",&b[i]); 21 if(tp[1]=='A')op[i]=1; 22 if(tp[1]=='O')op[i]=2; 23 if(tp[1]=='X')op[i]=3; 24 } 25 for(int i=0;i<=30;i++) 26 { 27 for(int j=n;j;j--) 28 { 29 int nw=((b[j]>>i)&1); 30 if(op[j]==1) 31 { 32 if(nw==0){res[i]+=2;break;} 33 if(nw==1)continue; 34 } 35 if(op[j]==2) 36 { 37 if(nw==0)continue; 38 if(nw==1){res[i]=res[i]?2:3;break;} 39 } 40 if(op[j]==3) 41 { 42 if(nw==0)continue; 43 if(nw==1)res[i]=(res[i]^1); 44 } 45 } 46 } 47 int fl=0; 48 for(int i=30;i>=0;i--) 49 { 50 int gl=((m>>i)&1); 51 int nw=(res[i]==0); 52 if(fl)fin[i]=nw; 53 if(gl==1&&nw==1)fin[i]=1; 54 if(gl==1&&nw==0)fl=1; 55 } 56 for(int i=0;i<=30;i++) 57 { 58 if(fin[i])ans=ans|(1<<i); 59 if(res[i]%2)ans=ans|(1<<i); 60 } 61 printf("%d",ans); 62 return 0; 63 } complete code轉(zhuǎn)載于:https://www.cnblogs.com/eternhope/p/9475712.html
總結(jié)
以上是生活随笔為你收集整理的[NOI2014] 起床困难综合症的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 同工不同酬,年薪 50 万美金的工程师到
- 下一篇: xml序列号错误