题目描述
小雪非常关注自行车比赛,尤其是环滨湖自行车赛。一年一度的环滨湖自行车赛,需要选手们连续比赛数日,最终按照累计得分决出冠军。今年一共有 N 位参赛选手。每一天的比赛总会决出当日的排名,第一名的选手会获得 N 点得分,第二名会获得 N-1 点得分,第三名会获得 N-2 点得分,依次类推,最后一名会获得 1 点得分。保证没有选手会排名相同。
在之前的数日较量中, N 位选手已经分别累计了一些分数。现在即将开始的是最后一天的比赛。小雪希望知道有多少位选手还有可能获得最终的冠军,也就是说还有多少选手有可能通过最后一天的比赛获得累计总分第一名
输入输出格式
输入格式:
第一行输入一个整数 N,表示参赛选手总数,保证 3<=N<=300000。
之后 N 行,其中第 i 行输入一个整数 B[i]表示第 i 位选手已经获得的累计分数,满足0<=B[i]<=2000000。
输出格式:
输出只有一行,只输出一个整数,表示有多少位选手有可能获得最终的冠军。
输入输出样例
输入样例#1:
3
8
10
9
输出样例#1:
3
输入样例#2:
5
15
14
15
12
14
输出样例#2:
4
说明
对于 20%的数据, 3<=N<=600。
对于 50%的数据, 3<=N<=10000。
对于 100%的数据, 3<=N<=300000 且 0<=B[i]<=2000000。
分析:我们找到所有得分中最大的那个,并记录他得分和位置(防止最大的有多个),再扫描一遍,只要当前的a[i]取得最大得分时大于max+1(最小得分),就累加一下。
var
n,i,max,ans,maxi:longint;
a:array[0..300000] of longint;
begin
readln(n);
for i:=1 to n do readln(a[i]);
for i:=1 to n do if a[i]>max then begin
max:=a[i];
maxi:=i;
end;
ans:=1;
for i:=1 to n do if (a[i]+n>=max+1)and(i<>maxi) then inc(ans);
writeln(ans);
end.