问题陈述是:
得分最高的玩家在排行榜上排名第1
位。
得分相等的玩家获得相同的排名,下一个玩家获得紧随其后的排名。
例如,四名选手的得分分别为100分、90分、90分、80分和80分。这些球员将有等级1,2,2和3,分别。你知道吗
使用这种排名方法,需要根据球员在比赛中的得分计算排名,球员的得分作为输入(“得分”列表)。第二,一个特定的玩家'爱丽丝'的分数是提供的,对于她玩的每一个游戏,需要计算她在排行榜上的位置。你知道吗
假设在排行榜上有6个玩家得分[100,100,50,40,40,20,10]
。爱丽丝打了第一场比赛,得了5分,排名第六。下一场比赛她得了25分,现在排名第四。接下来她得到50分,在接下来的比赛中,这次她的排名是2。你知道吗
#!/bin/python3
import sys
n = int(input().strip())
scores = [int(scores_temp) for scores_temp in input().strip().split(' ')]
m = int(input().strip())
alice = [int(alice_temp) for alice_temp in input().strip().split(' ')]
# your code goes here
for _ in alice:
scores.append(_)
print(list(sorted(set(scores),reverse=True)).index(_)+1)
此代码适用于范围在200~500之间的输入。但是如果它进入非常高的输入,比如10*9,代码就会因为超时而终止。我想知道如何即兴编写这段代码,使它运行得更快
编辑
n = int(input().strip())
scores = sorted(set([int(scores_temp) for scores_temp in input().strip().split(' ')]),reverse=True)
m = int(input().strip())
alice=[int(alice_temp) for alice_temp in input().split(' ')]
for a in alice:
rank=1
for _ in scores:
if(a<_):
rank=rank+1
else:
#print(rank)
break
print(rank)
进行了此更改,但仍在点击“由于超时而终止”,请建议需要修改的内容
没有必要把爱丽丝的分数附加到
scores
。首先确保scores
从高到低排序。你知道吗然后对爱丽丝的每一个分数,计算她的排名如下:
从
rank = 1
开始,遍历scores
列表。每当你看到的分数小于上一个分数时,给rank
加1,当你看到的分数等于或小于Alice的分数时,立即返回rank
的值。你知道吗编辑
这个答案假设只有每个玩家的最高分数是相关的。你知道吗
相关问题 更多 >
编程相关推荐