前提・実現したいこと
選手1から2^Nまでの2^N人の選手がトーナメントに参加し、準優勝者に該当するindexを求めたいです。2^N人にはそれぞれ異なる値のレーティングが与えられており、2人の選手が対戦するとレーティングの高い者が必ず勝ちます。また、トーナメントは完全2分木の形をしています。
python(3.8.2)を用いて、これを求めたいです。
※出典:Atcoder Beginner Contest 188 問題C-ABC Tournament
発生している問題・エラーメッセージ
Traceback (most recent call last): File "./Main.py", line 11, in <module> if a[2*j]>a[2*j+1]: list index out of range
該当のソースコード
python(3.8.2)
1n=int(input()) 2a=list(map(int,input().split())) 3 4b=list(a) 5 6x=int(2**(n-1)) 7i=0 8for i in range(n-1): 9 j=0 10 for j in range(x): 11 if a[2*j]>a[2*j+1]: 12 del a[2*j+1] 13 elif a[2*j]<a[2*j+1]: 14 del a[2*j] 15 x=int(x/2) 16 17if a[0]>a[1]: 18 print(b.index(a[1])) 19elif a[0]<a[1]: 20 print(b.index(a[0]))
試したこと
10行目のrange(x)をrange(x-1) などに変えると、エラーは発生せずに実行されましたが、望んでいる通りの実行ではなく、またなぜそのような実行がされるのか分かりませんでした。(例:3 (改行)8 3 9 1 2 4 5 6と入力すると、4が出力されました)。
また、11行目~14行目(2個目のforループの中身)を削除し、print(j)と書いて実行してみたところ、jの動作は正常であることが確認できました。
補足情報(FW/ツールのバージョンなど)
超初心者ですが、どうぞよろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/03/12 10:22
2021/03/12 10:52
2021/03/12 12:33
2021/03/12 13:24
2021/03/12 16:35
2021/03/12 18:56