题目内容:
题解:
这道题目开始我是用遍历循环做的,后来发现速度过慢,经过思考,二进制每位只有1,0两种情况,经过输入的一系列运算后的结果是固定的,所以我们只需要将v=~0与u=0进行两次运算,将运算后的结果按位找最大值即可求出最大的伤害。
代码:
#include<iostream>
char cmd[5];int n,m,u,t,v=~0,maxs;
using namespace std;
int main(){
cin>>n>>m;
while(n--){
cin>>cmd>>t;
if(*cmd=='O'){
u|=t,v|=t;
}else if(*cmd=='X'){
u^=t,v^=t;
}else{
u&=t,v&=t;
}
}
for(int i = 1<<29;i;i>>=1){
if(u&i){
maxs|=i;
}else if((v&i)&&(m>=i)){
m-=i,maxs|=i;
}
}
cout<<maxs;
}