Official

C - Swiss-System Tournament Editorial by kyopro_friends


問題文に書かれている通りにシミュレーションしましょう。

人ごとに、これまでの勝数がわかっていれば試合の組み合わせがシミュレーションできるので、「\(i\) 位の人の勝数と番号」を保持するような配列を持てばよいです。

じゃんけんの結果を求める部分は関数として他に分けておくのが良いでしょう。

実装例(Python)

N,M = map(int,input().split())
S = [input() for i in range(2*N)]
rank = [[0,i] for i in range(2*N)]
# rank[i] = [x,y]  -> i位なのは -x勝で人y

def judge(a,b):
  # 引き分けなら-1,前者勝ちなら0,後者勝ちなら1
  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])
    if result !=-1: rank[2*i+result][0] -= 1
  rank.sort()

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

posted:
last update: