1 条题解
-
0
#include <bits/stdc++.h>
using namespace std;
pair<string, int> a[100005];
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() {
cin >> n >> m;
for (int i = 1; i <= n; i++)
cin >> a[i].first >> a[i].second;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;}
cout << ans;
return 0;
}
- 1
信息
- ID
- 6212
- 时间
- 1000ms
- 内存
- 125MiB
- 难度
- 6
- 标签
- 递交数
- 69
- 已通过
- 40
- 上传者