题解 | #起床困难综合症#
起床困难综合症
https://ac.nowcoder.com/acm/problem/17857
emm借用了雨神的思路,然后就考验本苟若的代码水平了
#include <unordered_map>
using namespace std;
int n,m;
int result;
unordered_map<int,pair<string,int>>l;
int main(void)
{
cin>>n>>m;
int p1=0,p2=(1<<31)-1;
for(int i=1;i<=n;i++)
{
string a;
int t;
cin>>a>>t;
if(a==string("AND"))
{
l[i]=make_pair("AND",t);
p1&=t;
p2&=t;
}
else if(a==string("OR"))
{
l[i]=make_pair("OR",t);
p1|=t;
p2|=t;
}
else if(a==string("XOR"))
{
l[i]=make_pair("XOR",t);
p1^=t;
p2^=t;
}
}
for(int i=30;i>=0;i--)
{
if(((p1>>i)&1)==((p2>>i)&1))
{
continue;
}
else
{
if((p1>>i)&1)
{
continue;
}
else
{
int temp=result;
temp=(temp|(1<<i));
if(temp>m)
{
continue;
}
else
{
result=temp;
}
}
}
}
for(int i=1;i<=n;i++)
{
if(l[i].first=="AND")
{
result&=l[i].second;
}
else if(l[i].first==string("OR"))
{
result|=l[i].second;
}
else if(l[i].first==string("XOR"))
{
result^=l[i].second;
}
}
cout<<result;
return 0;
}