求助 atcoder
  • 板块学术版
  • 楼主JustForYourself
  • 当前回复3
  • 已保存回复3
  • 发布时间2022/10/19 19:25
  • 上次更新2023/10/27 06:52:44
查看原帖
求助 atcoder
809531
JustForYourself楼主2022/10/19 19:25

https://atcoder.jp/contests/abc271/tasks/abc271_c

致远星

赛时交了 4 发都没有过去。是我的贪心做法假了还是我写错了?

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	cin >> n;
	set<int> exi;
	vector<int> all;
	int cnt = 0;
	for (int i = 1; i <= n; i++) {
		int tmp;
		cin >> tmp;
		if (exi.count(tmp)) {
			cnt++;
		} else {
			exi.insert(tmp);
			all.push_back(tmp);
		}
	}
	int idx = 0, i = 1;
	while (true) {
		while (idx < all.size() - 1 && all[idx] < i) {
			idx++;
		}
		if (all[idx] != i) {
			if (cnt >= 2) {
				cnt -= 2;
			} else {
				if (cnt == 1) {
					if (idx + 1 < all.size() && all[all.size() - 1] > i) {
						all.pop_back();
						cnt = 0;
					} else {
						break;
					}
				} else {
					if (idx + 2 < all.size() && all[all.size() - 1] > i && all[all.size() - 2] > i) {
						all.pop_back();
						all.pop_back();
					} else {
						break;
					}
				}
			}
		}
		i++;
	}
	cout << i - 1 << endl;
	return 0;
}
2022/10/19 19:25
加载中...