BZOJ 3668 [NOI2014]起床困难综合症
Posted pigba
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ 3668 [NOI2014]起床困难综合症相关的知识,希望对你有一定的参考价值。
题意:有一些位运算操作,找出一个小于m的整数使其经过这些操作后得到的数最大.
对于这个整数的每一位之间运算互不影响,所以我们从高位到地位贪心填二进制数,使其这一位能得到1
#include<cstdio> using namespace std; const int N=1e5+5; int n,m; int op[N],w[N]; char s[233]; int calc(int x) { for(int i=1;i<=n;i++) { if(op[i]==1) x&=w[i]; if(op[i]==2) x|=w[i]; if(op[i]==3) x^=w[i]; } return x; } int main() { scanf("%d%d",&n,&m); for(int i=1;i<=n;i++) { scanf("%s",s); if(s[0]==‘A‘) op[i]=1; else if(s[0]==‘O‘) op[i]=2; else op[i]=3; scanf("%d",&w[i]); } int u=1,qaq=calc(0); for(;u<=m;u<<=1); u>>=1; int ans=0; for(;u;u>>=1) { if(qaq&u) continue; if(ans+u>m) continue; if(u&calc(u))ans+=u; } printf("%d\n",calc(ans)); return 0; }
以上是关于BZOJ 3668 [NOI2014]起床困难综合症的主要内容,如果未能解决你的问题,请参考以下文章