#include <iostream>
#include <cstdio>
#include <string>
#include <algorithm>
#include <vector>
#include <queue>
#include <stack>
#include <cstring>
#include <set>
#include <cmath>
#include <map>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int MN = 65005;
const int MAXN = 1000005;
const int INF = 0x3f3f3f3f;
#define IOS ios::sync_with_stdio(false)
pair<string, int> a[MAXN];
int n, m;
int calc(int bit, int now) {
for (int i = 1; i <= n; i++) {
int x = a[i].second >> bit & 1;
if (a[i].first == "AND") {
now &= x;
} else if (a[i].first == "OR") {
now |= x;
} else {
now ^= x;
}
}
return now;
}
int main() {
scanf("%d %d", &n, &m);
for (int i = 1; i <= n; i++) {
char str[5];
int x;
scanf("%s%d", str, &x);
a[i] = make_pair(str, x);
}
int val = 0, ans = 0;
for (int bit = 29; bit >= 0; bit--) {
int res0 = calc(bit, 0);
int res1 = calc(bit, 1);
if (val + (1 << bit) <= m && res0 < res1) {
val += 1 << bit;
ans += res1 << bit;
} else {
ans += res0 << bit;
}
}
printf("%d", ans);
return 0;
}
P2114 [NOI2014] 起床困难综合症(二进制+贪心)
于 2022-03-27 21:15:33 首次发布