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 suff(n + 1);
for (int i = n - 1; i >= 0; --i){
suff[i] = suff[i + 1] + a[i].first;
}

vector 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  阅读(34)  评论(0)    收藏  举报