百駿1057トーナメント

5689 ワード


トーナメント


問題は白駿で確認できます.

✔方法

  • N配列を作成し、K、Lに対応するインデックスに0を、残りのインデックスに1を
  • とします.
  • アレイから2つ抽出して比較
    2-1. 目標L、K自然生存
    2-2. 奇数個不戦勝
  • K、合計
  • ✔コード

    import sys
    from collections import deque
    
    def solution(arr, cnt):
        new_arr = deque()
    
        for _ in range(len(arr)//2):
            left = arr.popleft()
            right = arr.popleft()
    
            if left == 0 and right == 0:
                print(cnt)
                exit()
    
            new_arr.append(min([left, right]))
        else:
            if arr:
                new_arr.append(arr.popleft())
    
        if len(new_arr) != 1:
            solution(new_arr, cnt+1)
        else:
            print(cnt)
    
    
    if __name__ == "__main__":
        
        N, K, L = map(int, input().split())
    
        arr = [1] * N
        arr[K-1] = 0
        arr[L-1] = 0
    
        arr = deque(arr)
    
        solution(arr, 1)

    チップ


    数学的に言えば、コードをより簡潔に書くことができます.
    Nが半分に減る.
    KとLのインデックスも半減した.
    KとLが同じインデックスを持つ回数を計算します.
    問題を解決することができます.