【python练习】4×100米接力跑

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)

通过了啦啦啦啦啦啦

你可能感兴趣的:(Python,python)