C. 【六月份 -- 基础语法组】-- T3 -- 阿衰

· · 个人记录

https://cspjs.online/contest/699/problem/3

#include <bits/stdc++.h>
using namespace std;
int n, a[1000010], t = 0, k;
vector<int> vv;
int main() {
    freopen("unlucky.in", "r", stdin);
    freopen("unlucky.out", "w", stdout);
    cin >> n;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }
    sort(a + 1, a + n + 1);
    for (int i = 1; i <= n; i++) {
        if (a[i] != a[i - 1])
            vv.push_back(a[i]);
    }
    k = n - vv.size();
    for (int i = 0; i < vv.size(); i++) {
        if (vv[i] == t + 1)
            k++, t++;
        else if (vv[i] > t + 1) {
            if (k >= 2)
                k--, t++;
            else if (k == 1)
                vv.pop_back(), t++;
            else if (k == 0 && i <= vv.size() - 2) {
                vv.pop_back();
                vv.pop_back();
                k++;
            }
            i--;
        }
    }
    while (k >= 2) {
        t++;
        k -= 1;
    }
    cout << t;
    return 0;
}