わからん。回答を見た。
これは思いつかない。勉強になった。
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)
正直、思いつかないし、読んでスグにはピンとこなかった。
中々自分には難しかった。