这是结合tj后的AC代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m, a, b, ans;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> m;
int a = 0, b = 0;
b = -1;
for (int i = 1; i <= n; i++) {
string op;
int t;
cin >> op >> t;
if (op[0] == 'O') a |= t, b |= t;
else if (op[0] == 'A') a &= t, b &= t;
else a ^= t, b ^= t;
}
for (int j = 30; j >= 0; j--) {
int tmp= 1 << j;
if (a >> j & 1) ans += tmp;
else if (b >> j & 1 && tmp <= m) ans += tmp, m -= tmp;
}
cout << ans;
return 0;
}
这是我原先调半天只有70的代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
int n, m, a, b, ans;
signed main() {
ios::sync_with_stdio(false);
cin.tie(0), cout.tie(0);
cin >> n >> m;
int a = 0, b = 0;
b = -1;
for (int i = 1; i <= n; i++) {
string op;
int t;
cin >> op >> t;
if (op[0] == 'O') a |= t, b |= t;
else if (op[0] == 'A') a &= t, b &= t;
else a ^= t, b ^= t;
}
for (int j = 30; j >= 0; j--) {
int tmp= 1 << j;
if (a >> j & 1) ans += tmp;
else if (b >> j & 1 && ans + tmp <= m) ans += tmp;
}
cout << ans;
return 0;
}
问:为什么第二个代码只有70。两个代码不同处如下
100 pts
else if (b >> j & 1 && tmp <= m) ans += tmp, m -= tmp;(第22行)
70 pts
else if (b >> j & 1 && ans + tmp <= m) ans += tmp;(第22行)