AcWing 998. 起床困难综合症

原题链接

AcWing 998. 起床困难综合症_第1张图片

 AcWing 998. 起床困难综合症_第2张图片

其实上面这一堆就是想说,输入 n,m以及 n 个数和该数所对应的运算,其中运算包括有 与、或、异或 三种,真正的问题就是在所有不大于 m 的数(非负数)中,对给定的 n 个数都按该数所对应的运算运算一遍后,能得到得最大的值是多少。

AND 表示按位与,OR 表示按位或,XOR 表示按位异或
 

 Accepted Code:

#include
#include
#include
using namespace std;
 
const int N=1e6+5;
int n,m;	//门的数量以及攻击力 
int t[N];	//运算的参数 
char str[4];	//存储输入的字符串 
int op[N];	//存储运算操作 
int ans;	//存储答案 
 
bool calc(bool x,int j) {
	for(int i=0;i>j&1; 
		else if(op[i] == 2) x|=t[i]>>j&1;
		else x^=t[i]>>j&1;
	}
	return x;
}//function:执行各种运算(
 
/*  因为该题的按位与、按位或、按位异或的每次运算只有关该位上的数字,不影响其他位置上的数字
    又因为C语言的结构特点我们可以从高位到低位来确定数的每一位*/
int main(){
	scanf("%d %d",&n,&m);
	
	for(int i=0;i=y)	ans|=x<

你可能感兴趣的:(AADS,算法,c++,数据结构)