参看题解:
https://www.luogu.org/blog/user17941/solution-p2114
https://www.luogu.org/blog/user25845/solution-p2114
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 | #define _CRT_SECURE_NO_WARNINGS #include<iostream> #include<cstring> #include<string> using namespace std; int n, m, t[100005]; string s[100005]; int zero = 0, one = 0x7fffffff; int ans = 0; void process(int & x) { for (int i = 1; i <= n; i++) { switch (s[i][0]) { case 'A': x &= t[i]; break; case 'O': x |= t[i]; break; case 'X': x ^= t[i]; break; } } } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); cin >> n >> m; for (int i = 1; i <= n; i++)cin >> s[i] >> t[i]; process(zero); process(one); for (int i = 31; i >= 0; i--) { if (ans + (1 << i) > m)continue; if (!(zero&(1<<i))&&(one&(1 << i)))ans |= (1 << i); } process(ans); cout << ans; } |