結果

問題 No.3496 協力カード当て
コンテスト
ユーザー hiryuN
提出日時 2026-04-15 01:15:22
言語 PyPy3
(7.3.17)
コンパイル:
pypy3 -mpy_compile _filename_
実行:
pypy3 _filename_
結果
RE  
実行時間 -
コード長 2,714 bytes
記録
記録タグの例:
初AC ショートコード 純ショートコード 純主流ショートコード 最速実行時間
コンパイル時間 319 ms
コンパイル使用メモリ 85,888 KB
実行使用メモリ 87,884 KB
スコア 0
平均クエリ数 3.00
最終ジャッジ日時 2026-04-15 01:15:34
合計ジャッジ時間 11,165 ms
ジャッジサーバーID
(参考情報)
judge3_1 / judge2_1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other RE * 16
権限があれば一括ダウンロードができます

ソースコード

diff #
raw source code

p, n, m = map(int, input().split())
C = [0] + [0] * n
A = list(map(int, input().split()))
AA = A[:]
B = []
A.sort()
if 1 in A:
    A = A[1:]
AC = [0] + [0] * m
for i in A:
    AC[i] += 1
Q = []
for i in range(m + 1):
    if AC[i] != 0:
        Q.append((AC[i], i))
Q.sort()
QQ = []
pre = 1
for I in Q:
    while I[0] != pre:
        pre += 1
        QQ.append((0, 1))
    QQ.append(I)

# 【修正1】Ansを辞書として初期化
Ans = {} 
# 【修正4】TURN内の計算用変数と被らないように、インデックス用変数を q_idx に変更
q_idx = 0 
fin = 0

while True:
    try:
        turn = input()
    except EOFError:
        break

    if turn == "TURN":
        if q_idx < len(QQ):
            # 【修正5】インタラクティブ問題なので flush=True を追加
            print(QQ[q_idx][1], flush=True) 
            q_idx += 1
            res, a, b = input().split()
            # 【修正3】受け取った文字列を整数に変換して保存
            Ans[int(a)] = int(b) 
        else:
            BC = []
            c = 0
            for i in B:
                # 【修正3】i は数値として比較・計算
                if i == 1: 
                    c += 1
                else:
                    for j in range(c):
                        BC.append(i)
            while len(BC) < n:
                BC.append(1)
            
            G = []
            for i in range(m + 1):
                # 【修正4】計算用変数を count_diff に変更
                # 【修正3】Ansにキー i が無い場合のエラーを防ぐため .get(i, 0) を使用
                count_diff = Ans.get(i, 0) - AA.count(i) - BC.count(i)
                # count_diffがマイナスにならないよう max() で保護
                for j in range(max(0, count_diff)): 
                    G.append(i)
            
            while len(G) < n:
                G.append(m)
            
            # 【修正5】flush=True を追加
            print("GUESSED", *G, flush=True) 
            res, a, b = input().split()
            # 【修正3】b を整数に変換して比較
            if int(b) == 1: 
                fin += 1
            if fin == 2:
                exit()
                
    else:
        # 【修正2】input() を再度呼ぶのではなく、受け取り済みの turn を分割する
        res, a, b = turn.split() 
        if res == "COUNT":
            # 【修正3】整数に変換
            Ans[int(a)] = int(b) 
            B.append(int(a))
        if res == "GUESSED":
            # 【修正3】整数に変換
            if int(b) == 1: 
                fin += 1
            if fin == 2:
                exit()
0