Editorial for 20B Rating
Remember to use this editorial only when stuck, and not to copy-paste code from it. Please be respectful to the problem author and editorialist.
Submitting an official solution before solving the problem yourself is a bannable offence.
Submitting an official solution before solving the problem yourself is a bannable offence.
To get the highest possible rating of a person, we get the person who has the highest rating now. Then he/she play \(M\) matches with people. We can simply say that he/she wins all the matches so that his/her score will be maximum.
The only issue that we will encounter is that when matches he/she play are with a competitor who has lower than \(K\) points. To fix this:
- He/she will first play with people who have more than \(K\) points till the person has lower than \(K\) points or no more matches left.
- He/she will play with people in the decreasing order of their score.
#include <bits/stdc++.h>
using namespace std;
#define ll long long
const int siz = 300005;
ll arr[siz];
ll n, m, k, l, res;
int main(){
ios_base::sync_with_stdio(false); cin.tie(NULL);
cin>>n>>k>>m;
for(int i=0;i<n;i++){
cin>>arr[i];
}
sort(arr, arr+n);
n--;
for(int i=n-1;i>=0;i--){
if(m==0) break;
if(arr[i]<k) break;
while(arr[i]>=k){
arr[i]-=k;
arr[n]+=k;
m--;
}
}
sort(arr, arr+n);
for(int i=n-1;i>=0;i--){
if(m==0) break;
m--;
arr[n]+=arr[i];
}
cout<<arr[n];
}