正题
题目大意
若干个位操作,求一个值xxx使得进行了以后的最大值。
解题思路
每位分开运算计算出每一位为0和为1时的结果,然后贪心选择。
codecodecode
// luogu-judger-enable-o2
#include<cstdio>
using namespace std;
int n,m,ans,t;
char c[3];
int main()
{scanf("%d%d",&n,&m);int a=0x7fffffff,b=0;for (int i=1;i<=n;i++){scanf("%s %d",c,&t);if (c[0]=='A')a&=t,b&=t;if (c[0]=='O')a|=t,b|=t;if (c[0]=='X')a^=t,b^=t;}for (int i=30;i>=0;i--){if (b&(1<<i)){ans+=1<<i;}else if (m>=(1<<i)&&(a&(1<<i))){m-=1<<i;ans+=1<<i;}}printf("%d",ans);
}