【NOI2014】起床困难综合症 位运算+贪心
这道题先求出0和-1经过处理后的答案 具体看代码吧
#include<cstdio> #include<cstring> #include<algorithm> using namespace std; int v0=0,v1=-1,ans,av,n,m,x; int main() { char ch[15]; scanf("%d %d",&n,&m); for(int i=1;i<=n;i++){ scanf("%s %d",ch,&x); if(ch[0]=='A') v0&=x,v1&=x; else if(ch[0]=='O') v0|=x,v1|=x; else v0^=x,v1^=x; } for(int i=(1<<30);i;i>>=1){ if((v0&i)<(v1&i)&&ans+i<=m) ans+=i,av+=i; else av+=i&v0; } printf("%d\n",av); return 0; }