题目:
见https://www.luogu.com.cn/problem/P2114
思路:
emmm…见算法竞赛进阶指南P8
代码:
#include<iostream>
#include<cstring>
using namespace std;
const int N=100010;
typedef pair<string,int> PSI;
PSI opr[N];
int n,m;
int cal(int i,int x)
{
for(int k=1;k<=n;k++)
{
int t=opr[k].second>>i&1;
string s=opr[k].first;
if(s=="AND")
x&=t;
else if(s=="OR")
x|=t;
else
x^=t;
}
return x<<i;
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
int t;
string s;
cin>>s>>t;
opr[i]={s,t};
}
int val=0,res=0;
for(int i=31;i>=0;i--)
{
int res0=cal(i,0);
int res1=cal(i,1);
if(val+(1<<i)<=m&&res0<res1)
{
val+=1<<i;
res+=res1;
}
else
res+=res0;
}
cout<<res<<endl;
return 0;
}