秦王的骑士比赛

秦王作为秦国的君主,自是非常忙碌。但是不管怎么忙碌,军队是他进行统一大业的根本,所以每半年他都会举行一场盛大的军队比武大赛。其中最后一项比试是马术比赛,一共有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;
        
}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值