题目描述
解题过程
思路
位运算,每一个二进制位只有两个选择 0 0 0 或 1 1 1 ,那么我们可以设置一个全 1 1 1 串和一个全 0 0 0 串进行模拟,最终尽可能的选多的 1 1 1 ,贪心法
代码
#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <bitset>
using namespace std;
const int MAXN = 1e5 + 1;
bitset <40 > all ,none;
string s;
int n ,m ,x;
int ans = 0;
int main () {
all.set ();
none.reset ();
scanf ("%d%d",&n ,&m);
for (int q = 1;q <= n;++ q) {
cin >> s >> x;
if (s[0] == 'A') all &= x ,none &= x;
else if (s[0] == 'O') all |= x ,none |= x;
else all ^= x ,none ^= x;
}
for (int q = 0;q < 31;++ q) {
if (none[q]) ans += (1 << q);
else if (all[q] && (1 << q) <= m) ans += (1 << q);
}
printf ("%d\n",ans);
return 0;
}
感想
我太弱了
——2020.10.6