NOI2014起床困难综合症

来源:互联网 发布:碧桂园 森林城市 知乎 编辑:程序博客网 时间:2024/04/27 14:45

拆位,然后贪心

然而看着的我一脸懵逼的我看着我的50= = 然后借鉴了一下POPO姐的代码,然而还是50= =,最后发现是忘记加return这个词= =

#include<iostream>#include<cstdio>#include<cstring>#include<cmath>#include<cstdlib>#include<algorithm>#include<bitset>#define get(p,i) p>>(i-1)&1#define fo(i,a,b) for(int i=a;i<=b;i++)#define down(i,a,b) for(int i=a;i>=b;i--)using namespace std;#define N 100005int c[N],a[N];char ch[10];int n,m;void init(){scanf("%d%d",&n,&m);fo(i,1,n){scanf("%s%d",ch,&a[i]);if(ch[0]=='A')c[i]=1;if(ch[0]=='O')c[i]=2;if(ch[0]=='X')c[i]=3;}}int calc(int x,int op,int y){if(op==1)return x&y;if(op==2)return x|y;if(op==3)return x^y;}int cross(int x){int ret=x;fo(i,1,n)ret=calc(ret,c[i],a[i]);return ret;}void work(){int ans=0,now=1;for(;now<=m;now<<=1);for(now>>=1;now;now>>=1){if(cross(0)&now)continue;if((cross(now)&now)&&ans+now<=m)ans+=now;}cout<<cross(ans)<<endl;}int main(){init();work();return 0;}


0 0
原创粉丝点击