福州网站建设嘉艺,wordpress 主题安装 ftp,竞价恶意点击报案,软件项目开发的阶段和任务原题链接 其实上面这一堆就是想说#xff0c;输入 n,m以及 n 个数和该数所对应的运算#xff0c;其中运算包括有 与、或、异或 三种#xff0c;真正的问题就是在所有不大于 m 的数#xff08;非负数#xff09;中#xff0c;对给定的 n 个数都按该数所对应的运算运算一遍…原题链接 其实上面这一堆就是想说输入 n,m以及 n 个数和该数所对应的运算其中运算包括有 与、或、异或 三种真正的问题就是在所有不大于 m 的数非负数中对给定的 n 个数都按该数所对应的运算运算一遍后能得到得最大的值是多少。
AND 表示按位与OR 表示按位或XOR 表示按位异或 Accepted Code
#includeiostream
#includecstring
#includealgorithm
using namespace std;const int N1e65;
int n,m; //门的数量以及攻击力
int t[N]; //运算的参数
char str[4]; //存储输入的字符串
int op[N]; //存储运算操作
int ans; //存储答案 bool calc(bool x,int j) {for(int i0;in;i){if(op[i] 1) xt[i]j1; else if(op[i] 2) x|t[i]j1;else x^t[i]j1;}return x;
}//function执行各种运算/* 因为该题的按位与、按位或、按位异或的每次运算只有关该位上的数字不影响其他位置上的数字又因为C语言的结构特点我们可以从高位到低位来确定数的每一位*/
int main(){scanf(%d %d,n,m);for(int i0;in;i){scanf(\n%s %d,str,ti);/*标记成整数形方便后续对应是什么运算*/if(*strA) op[i]1; //与运算 else if(*strO) op[i]2; //或运算 else op[i]3; //异或运算 }for(int i29;~i;i--){ if(1im){ //伤害不能超出范围 bool xcalc(0,i); //该位填0的结果bool ycalc(1,i); //该位填1的结果//哪个数值更大就填哪个if(xy) ans|xi;else ans|yi,m-1i; //(填1的话要让m减去该结果为了后续只需要继续小等于m)}else ans|calc(0,i)i; //超出范围了只能将该位置置为0}coutansendl;return 0;
}