题目内容:
小雪非常关注自行车比赛,尤其是环滨湖自行车赛。一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军。今年一共有 N 位参赛选手。每一天的比赛总会决出当日的排名,第一名的选手会获得 N 点得分,第二名会获得 N-1 点得分,第三名会获得 N-2 点得分,依次类推,最后一名会获得 1 点得分。保证没有选手会排名相同。
在之前的数日较量中, N 位选手已经分别累计了一些分数。现在即将开始的是最后一天的比赛。小雪希望知道有多少位选手还有可能获得最终的冠军,也就是说还有多少选手有可能通过最后一天的比赛获得累计总分第一名
样例1
3 3 8 10 9
思路:贪心,排序后假设分低的在前面,同时维护最大值,处理结束后就可以愉快的统计了
:假设每个人都是第一名,比较其得分和上面的最大值,不小于最大值的情况就ans+1。
#include<bits/stdc++.h>
using namespace std;
const int N=1e6;
int n,num[N],maxx,ans;
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
{
cin>>num[i];
}
sort(num+1,num+1+n);
int maxx=num[n];
for(int i=1;i<=n;i++)
{
maxx=max(maxx,num[i]+n-i+1);
}
for(int i=1;i<=n;i++)
if(num[i]+n>=maxx)ans++;
cout<<ans;
return 0;
}