結果

問題 No.43 野球の試合
コンテスト
ユーザー koheijkt
提出日時 2026-02-05 18:23:05
言語 PyPy3
(7.3.17)
結果
AC  
実行時間 125 ms / 5,000 ms
コード長 1,153 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 225 ms
コンパイル使用メモリ 82,196 KB
実行使用メモリ 77,836 KB
最終ジャッジ日時 2026-02-05 18:23:08
合計ジャッジ時間 2,114 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 4
other AC * 7
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

from itertools import product
from bisect import bisect_left, bisect_right

N = int(input())
S = [list(input()) for _ in range(N)]

mikakutei = []
for i in range(N):
    for j in range(i + 1, N):
        if S[i][j] == '-':
            mikakutei.append((i, j))

for i in range(N):
    for j in range(N):
        if S[i][j] == 'o':
            S[i][j] = 1
        elif S[i][j] == 'x':
            S[i][j] = 0

M = len(mikakutei)
ans = []
for pat in product([0, 1], repeat=M):

    # S の塗り替え
    for k in range(M):
        # mikakutei[k]
        i, j = mikakutei[k]
        # pat[k] で塗る
        S[i][j] = pat[k]
        # 対応する試合も塗る
        S[j][i] = 1 - pat[k]

    # 集計
    cnt = set()
    memo = 0
    for i in range(N):
        sub = S[i].count(1)
        if i == 0:
            memo = sub
        cnt.add(sub)
    cnt = list(sorted(cnt, reverse=True))
    for i in range(len(cnt)):
        if cnt[i] == memo:
            juni = i + 1
    ans.append(juni)

    # S の戻し
    for k in range(M):
        # mikakutei[k]
        i, j = mikakutei[k]
        # pat[k] で塗る
        S[i][j] = '-'

print(min(ans))
0