问题陈述是:
得分最高的玩家在排行榜上排名1
。
具有相同分数的玩家获得相同的排名编号,并且下一个玩家接收紧随其后的排名编号。
例如,四名球员的得分分别为100,90,90,80和100。这些球员将分别获得1,2,3和3等级。
使用这种排名方法,需要根据玩家在进行时所做的分数来计算玩家的等级,将玩家分数作为输入提供('分数列表)。其次,一个特定的玩家' alice'提供分数,对于她玩的每个游戏,需要计算她在排行榜上的位置。
假设排行榜上有6位玩家,得分为[100,100,50,40,40,20,10]
。爱丽丝玩她的第一个游戏,获得5分,她被排在列表的底部,排名为6.下一个游戏她得到25,现在她被排在第4级。接下来她得到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)
进行了此更改,但由于超时仍未达到终止&#39;,请建议需要修改的内容
答案 0 :(得分:0)
没有必要将Alice的分数追加到[core]
repositoryformatversion = 0
filemode = false
logallrefupdates = true
editor = /bin/vim.exe
autocrlf = true
whitespace = --get
bare = false
[remote "origin"]
url = git@bitbucket.org:xxx/xxx.git
fetch = +refs/heads/*:refs/remotes/origin/*
[merge]
edit = no
[pull]
edit = no
[merge]
edit = no
[branch "branch_name"]
remote = origin
merge = refs/heads/branch_name
。首先确保scores
从高到低排序。
然后,对于Alice的每个分数,按如下方式计算她的等级:
从scores
开始,遍历rank = 1
列表。每次您查看的分数小于前一分数时,为scores
添加1,并在您查看的分数等于或等时返回rank
的值小于爱丽丝的得分。
这个答案假设每个玩家的最高得分只是相关的。