秦王作为秦国的君主,自是非常忙碌。但是不管怎么忙碌,军队是他进行统一大业的根本,所以每半年他都会举行一场盛大的军队比武大赛。其中最后一项比试是马术比赛,一共有N名兵士参与,每一位兵士都在前面的比赛中都已经积累了一定的分数,最后一场比赛将决定谁是最终的冠军,获得无上的荣耀和秦王的赏赐。
每一天的比赛,第一名的兵士都会获得N点得分,第二名N−1点,以此类推,直到最后一名兵士获得1点得分。保证每位兵士的排名都是唯一的。
在之前的比赛中,N位兵士已经分别获得了一些分数。现在,即将开始的是最后一场比赛。秦王想知道有多少位兵士还有机会赢得最终的冠军,也就是他们有可能通过最后一场比赛反超,获得累计总分第一名。
输入描述
第一行输入一个整数 N,表示参赛选手总数,保证 3≤N≤3×105。
之后 N 行,其中第 i 行输入一个整数 Bi 表示第 i 位选手已经获得的累计分数,满足 0≤Bi≤2×106。
输出描述
输出只有一行,只输出一个整数,表示有多少位兵士有可能获得最终的冠军。
用例输入 1
3 8 10 9
用例输出 1
3
提示
数据范围
- 对于 20 的数据,3≤N≤600。
- 对于 50% 的数据,3≤N≤1×104。
- 对于 100% 的数据,3≤N≤3×105 且 0≤Bi≤2×106。
上代码:#include<bits/stdc++.h>
using namespace std;
int maxx,ans,b[300010],n;
int cmp(const int &x,const int &y)
{
return x>y;
}
int main()
{
cin>>n;
for(int i=1;i<=n;i++)
cin>>b[i];
sort(b+1,b+1+n,cmp);
for(int i=1;i<=n;i++)
maxx=max(maxx,b[i]+i);
for(int i=1;i<=n;i++)
if(b[i]+n>=maxx)
ans++;
else
{
break;
}
cout<<ans;
return 0;
}