社区讨论

求条样例输出 159 -10

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

讨论操作

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

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

int n;
vector<pair<int, int> > m;

int main() {
	//freopen("lucky.in", "r", stdin);
	//freopen("lucky.out", "w", stdout);
	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({y + 1, w});
		} else if (op == 3) {
			cin >> x >> w;
			m.push_back({-1e9, w});
			m.push_back({x, w});
			m.push_back({x + 2, w});
			m.push_back({1e9, w});
		}
	}
	sort(m.begin(), m.end());
	int maxn = INT_MIN;
	int tmp;
	int sum = 0;
	int l, r;
	for (int i = 1; i <= n; i = tmp) {
		tmp = i;
		while (m[i].first == m[tmp].first) {
			sum ^= m[tmp].second;
			tmp++;
		}
		if (maxn < sum) {
			maxn = sum;
			l = m[i].first;
			r = m[tmp].first - 1;
		} else if (maxn == sum) {
			int lr1 = (abs(m[i].first) > abs(m[tmp].first - 1) ? m[i].first : m[tmp].first);
			int lr2 = (abs(l) > abs(r) ? l : r);
			if (abs(lr1) < abs(lr2)) {
				l = m[i].first;
				r = m[tmp].first - 1;
			} else if (abs(lr1) == abs(lr2) && lr1 != lr2) {
				if (lr2 < 0) {
					l = m[i].first;
					r = m[tmp].first - 1;
				}
			}
		}
	}
	cout << maxn << " " << (abs(l) > abs(r) ? l : r);
	return 0;
}

回复

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

正在加载回复...