結果

問題 No.3120 Lower Nim
ユーザー keigo kuwata
提出日時 2025-04-24 14:53:52
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
WA  
実行時間 -
コード長 1,877 bytes
コンパイル時間 217 ms
コンパイル使用メモリ 12,416 KB
実行使用メモリ 28,928 KB
平均クエリ数 551.16
最終ジャッジ日時 2025-04-24 14:54:00
合計ジャッジ時間 7,649 ms
ジャッジサーバーID
(参考情報)
judge5 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample RE * 1
other AC * 10 WA * 29 RE * 4
権限があれば一括ダウンロードができます

ソースコード

diff #

import sys
def main():
    input = sys.stdin.readline
    N, *rest = list(map(int, input().split()))
    if len(rest) < N:
        rest += list(map(int, input().split()))
    A = rest[:N]

    # 値ごとにインデックスリストを作成
    from collections import defaultdict
    mp = defaultdict(list)
    for i, a in enumerate(A, start=1):
        mp[a].append(i)

    # ペアを張るための配列
    partner = [0] * (N+1)

    # 先攻か後攻か
    first_move = None
    first_idx = first_x = None

    # 奇数個出現する値を探す
    odd_v = None
    for v, idxs in mp.items():
        if len(idxs) % 2 == 1:
            odd_v = v
            break

    if odd_v is None:
        # すべて偶数 → 後攻
        print("Second", flush=True)
    else:
        # 先攻
        print("First", flush=True)
        # odd_v のグループからひとつ山を取り切る
        i0 = mp[odd_v].pop()
        print(i0, odd_v, flush=True)
        ret = int(input())
        if ret != 0:
            # ret==1 で勝利, ret==-1 で敗北
            return
        # この山はもうサイズ0なのでパートナーは不要

    # 残りの山でペアリング
    for idxs in mp.values():
        # idxs は偶数長
        for j in range(0, len(idxs), 2):
            u, v = idxs[j], idxs[j+1]
            partner[u] = v
            partner[v] = u

    # 以降はミラー応答ループ
    while True:
        # 相手の手
        line = input().split()
        if not line:
            return
        i_judge, x = map(int, line)
        ret = int(input())
        if ret == -1 or ret == 1:
            return

        # ミラー:ペア山で同じ x を取る
        i_my = partner[i_judge]
        print(i_my, x, flush=True)
        ret = int(input())
        if ret != 0:
            return

if __name__ == "__main__":
    main()
0