Zerojudge h082. 贏家預測

Python 解答

n, m  =map(int, input().split())
s     =[0]+list(map(int, input().split()))
t     =[0]+list(map(int, input().split()))
alive = list(map(int, input().split())) #目前存活人
mlose = [0]*(n+1) #紀錄每個人輸了幾次

while len(alive)>1:
    winner, loser = [], []
    for i in range(0, len(alive)-1, 2): #兩兩作戰,每次抓2個人
        p1, p2 = alive[i], alive[i+1]
        a, b, c, d = s[p1], t[p1], s[p2], t[p2]
        if a*b >= c*d: #winner:p1
            win, lose = p1, p2
            s[win] += (c*d)//(2*b)
            t[win] += (c*d)//(2*a)
            s[lose] += c//2
            t[lose] += d//2
        else:
            win, lose = p2, p1
            s[win] += (a*b)//(2*d)
            t[win] += (a*b)//(2*c)
            s[lose] += a//2
            t[lose] += b//2
            
        winner.append(win)
        mlose[lose] += 1
        if mlose[lose] < m:
            loser.append(lose)
            
    if len(alive)%2 == 1:
        winner.append(alive[-1])
        
    alive = winner + loser

else:
    print(alive[0])