E. Accidental Victory

https://codeforces.com/problemset/problem/1490/E

This is a chanllenging problem on codeforces with a diffcuilty score of 1400.
It can be solved by using sort and greedy algorithms.

void solve(){
    int n;
    cin >> n;

    vector<pair<int, int>> a(n);
    for (int i = 0; i < n; ++i){
        cin >> a[i].first;
        a[i].second = i;
    }

    sort(a.rbegin(), a.rend());
    vector<long long> suff(n + 1);
    for (int i = n - 1; i >= 0; --i){
        suff[i] = suff[i + 1] + a[i].first;
    }

    vector<int> ans{a[0].second + 1};
    for (int i = 0; i < n - 1; ++i){
        if (suff[i + 1] >= a[i].first){
            ans.emplace_back(a[i + 1].second + 1);
        }
        else{
            break;
        }
    }

    sort(ans.begin(), ans.end());
    cout << ans.size() << '\n';
    for (int i = 0; i < int(ans.size()); ++i){
        cout << ans[i] << " \n"[i == ans.size() - 1];
    }
}
posted @ 2024-03-06 21:16  _Yxc  阅读(5)  评论(0编辑  收藏  举报