4×100米接力跑
Description
运动会径赛场4×100米接力跑的比赛异常激烈,有N个班级参加了比赛。根据规则,接力跑的第一名会得到N分,第二名会得到N-1分,以此类推,最后一名会得到1分。
现在第i个班级已经获得了Ai分。求多少个班级经过这次接力跑后,分数有机会变成所有班级中最高的。
Input
输入共N+1行。
第一行包含一个正整数N,表示班级总数。
接下来N行,每行包含一个整数Ai,表示第i个班级的原有分数。
Output
输出一行。一个整数,表示多少个班级的分数有机会成为所有班级中最高的。
Sample Input 1
样例1
3
9
11
10
Sample Output 1
样例1
3
Sample Input 2
样例1
5
15
14
15
12
14
Sample Output 2
样例2
4
Hint
对于100%的数据,3 <= N <= 3x10^5,1<=A i<=2x10^6
下面是我的两种方法,都不能通过检测,只有一个检测节点对的,其他提示“Time Limit Exceeded”
如何解决该问题????????
我的方法1
n=int(input())
alist=[]
for i in range(n):
alist.append(int(input()))
alist.sort()
#print(alist)
ci=0
for i in range(n):
blist=[x+y for x,y in zip(alist[:i]+alist[i+1:],range(n-1,0,-1))]
print(blist)
print(alist[i]+n,max(blist))
if alist[i]+n>=max(blist):
ci+=1
我的方法2
n=int(input())
alist=[]
for i in range(n):
alist.append(int(input()))
alist.sort()
#print(alist)
ci=0
blist=[]
for i in range(n):
blist=list(map(lambda x,y:x+y,alist[:i]+alist[i+1:],range(n-1,0,-1)))
#print(blist)
if alist[i]+n>=max(blist):
ci+=1
print(ci)
2023.10.30
我的方法3
n=int(input())
alist=[]
for i in range(n):
alist.append(int(input()))
alist.sort()
ci=0
for i in range(n):
if i==n-1:
if alist[i]+n>=alist[-2]+1 and alist[i]+n>=alist[0]:
ci+=1
else:
if alist[i]+n>=alist[-1]+1 and alist[i]+n>=alist[0]:
ci+=1
print(ci)
通过了啦啦啦啦啦啦
文章评论