Files

74 lines
1.8 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 获取输入的运动员的实力值
tmp = list(map(int, input("请输入运动员的实力值,以空格隔开").split()))
print(tmp)
class Sport:
def __init__(self, idx, strength):
self.idx = idx
self.strength = strength
# 将输入的运动员实力值转化为运动员集合
sports = []
for i in range(len(tmp)):
sports.append(Sport(i, tmp[i]))
# 晋级赛
def promote(sports, ans):
# 记录胜者组
win = []
# 记录败者组
fail = []
for i in range(1, len(sports), 2):
# 每组比赛序号大的运动员
major = sports[i]
# 每组比赛序号小的运动员
minor = sports[i-1]
if major.strength > minor.strength:
win.append(major)
fail.append(minor)
else:
win.append(minor)
fail.append(major)
# 如果晋级赛中,运动员个数为奇数,则最后一个运动员直接晋级
if len(sports)%2 != 0:
win.append(sports[-1])
# 依次头部压入失败组、胜者组
ans.insert(0, fail)
ans.insert(0, win)
# 当保留组超过3个的时候那么需要将超过部分去掉因为这部分已经无缘季军
while len(ans) > 3:
ans.pop()
# 算法入口
def getresult():
# 保留组ans只保留三个组冠军组、亚军组和季军组
ans = []
# 晋级赛
promote(sports, ans)
# 冠军组如果还不是一个人,那么还需要取出冠军组继续进行晋级赛
if len(ans[0]) != 1:
promote(ans.pop(0), ans)
# 冠军
first = ans[0][0].idx
# 亚军
second = ans[1][0].idx
# 季军
ans[2].sort(key=lambda x: (-x.strength, x.idx))
third = ans[2][0].idx
return f"{first} {second} {third}"
if __name__ == "__main__":
res = getresult()
print(res)