LoginSignup
0
0

More than 1 year has passed since last update.

ABC222 C - Swiss-System Tournament から学んだ

Last updated at Posted at 2021-10-10

abc221_1.png
abc221_2.png
abc221_3.png
abc221_4.png

わからん。回答を見た。

これは思いつかない。勉強になった。

SwissSystemTournament.py
N,M = map(int,input().split())
S = [input() for _ in range(2*N)]
rank = [[0,Y] for Y in range(2*N)]
#rank[i] = [X,Y] ->i 位なのは X 勝の 人Y
#[順位,人] を 1 セルとした配列を作るメリット
###順位が入れ替わった後、配列内の順位を sort により整理できるため、
###for 文を使って簡潔に順位順に処理が出来る
#####※辞書で実現できないか検討したが、結局、ソートを使うので記述が複雑化し、訳が分からなくなる(今の自分では)

# 勝ち:0 , 負け:1, 引き分け:-1
def judge(a,b):
    if a==b:return -1
    if a=="G" and b=="P":return 1
    if a=="C" and b=="G":return 1
    if a=="P" and b=="C":return 1
    return 0

for j in range(M):
    for i in range(N):
        player1 = rank[2*i][1]
        player2 = rank[2*i+1][1]
        result  = judge(S[player1][j],S[player2][j])
        #↓↓補足
        #a が勝者(return 0)の場合、a の rank[2*i + 0] 勝数を -1.
        #b が勝者(return 1)の場合、b の rank[2*i + 1] 勝数を -1.
        #2人ずつ勝負して、小数をメモ
        if result != -1: rank[2*i+result][0] -=1
    #sort して 勝数が小さい順に並べることで、勝者をグループ化できる
    rank.sort()

for _,i in rank:print(i+1)

正直、思いつかないし、読んでスグにはピンとこなかった。
中々自分には難しかった。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0