求问
查看原帖
求问
1258210
pipilong2024楼主2025/1/2 13:14

这是结合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\color{green}{100{}} ptspts
else if (b >> j & 1 && tmp <= m) ans += tmp, m -= tmp;(第22行)

70\color{#DDEF0D}{70{}} ptspts
else if (b >> j & 1 && ans + tmp <= m) ans += tmp;(第22行)

2025/1/2 13:14
加载中...