社区讨论

85求条WA in #7#11#12

P6627[省选联考 2020 B 卷] 幸运数字参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@mkhtnkmi
此快照首次捕获于
2026/01/17 12:43
2 个月前
此快照最后确认于
2026/01/19 21:30
2 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
#define int long long

int n;
vector<pair<int, int> > m;
int glob = 0;

signed main() {
	cin >> n;
	for (int i = 1; i <= n; i++) {
		int op, x, y, w;
		cin >> op;
		if (op == 1) {
			cin >> x >> y >> w;
			m.push_back({x, w});
			m.push_back({y + 1, w});
		} else if (op == 2) {
			cin >> x >> w;
			m.push_back({x, w});
			m.push_back({x + 1, w});
		} else if (op == 3) {
			cin >> x >> w;
			glob ^= w;
			m.push_back({x, w});
			m.push_back({x + 1, w});
		}
	}
	if (m.empty()) {
		cout << glob << " " << 0 << endl;
		return 0;
	}
	sort(m.begin(), m.end());
	int cur = glob;
	int maxn = cur;
	int ans = LLONG_MAX;
	if (cur > maxn) {
		maxn = cur;
		ans = m[0].first - 1;
	} else if (cur == maxn) {
		if (abs(m[0].first - 1) < abs(ans)) {
			ans = m[0].first - 1;
		} else if (abs(m[0].first - 1) == abs(ans)) {
			if (m[0].first - 1 > ans) {
				ans = m[0].first - 1;
			}
		}
	}
	if (cur > maxn) {
		maxn = cur;
		ans = 0;
	} else if (cur == maxn) {
		if (abs(0) < abs(ans)) {
			ans = 0;
		} else if (abs(0) == abs(ans)) {
			if (0 > ans) {
				ans = 0;
			}
		}
	}
	for (int i = 0; i < m.size(); ) {
		int pos = m[i].first;
		if (cur > maxn) {
			maxn = cur;
			ans = pos - 1;
		} else if (cur == maxn) {
			if (abs(pos - 1) < abs(ans)) {
				ans = pos - 1;
			} else if (abs(pos - 1) == abs(ans)) {
				if (pos - 1 > ans) {
					ans = pos - 1;
				}
			}
		}
		while (i < m.size() && m[i].first == pos) {
			cur ^= m[i].second;
			i++;
		}
		if (cur > maxn) {
			maxn = cur;
			ans = pos;
		} else if (cur == maxn) {
			if (abs(pos) < abs(ans)) {
				ans = pos;
			} else if (abs(pos) == abs(ans)) {
				if (pos > ans) {
					ans = pos;
				}
			}
		}
	}
	if (cur > maxn) {
		maxn = cur;
		ans = m.back().first;
	} else if (cur == maxn) {
		if (abs(m.back().first) < abs(ans)) {
			ans = m.back().first;
		} else if (abs(m.back().first) == abs(ans)) {
			if (m.back().first > ans) {
				ans = m.back().first;
			}
		}
	}
	cout << maxn << " " << ans;
	return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...