結果
| 問題 | No.3496 協力カード当て |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-04-15 01:24:46 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 2,768 bytes |
| 記録 | |
| コンパイル時間 | 139 ms |
| コンパイル使用メモリ | 85,704 KB |
| 実行使用メモリ | 87,972 KB |
| スコア | 8 |
| 平均クエリ数 | 36.62 |
| 最終ジャッジ日時 | 2026-04-15 01:24:50 |
| 合計ジャッジ時間 | 3,620 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 1 WA * 8 RE * 7 |
ソースコード
import sys
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_list = []
for i in range(m + 1):
if AC[i] != 0:
Q_list.append((AC[i], i))
Q_list.sort()
QQ = []
pre = 1
for I in Q_list:
while I[0] != pre:
pre += 1
QQ.append((0, 1))
QQ.append(I)
Ans = {}
q_idx = 0
fin = 0
while True:
try:
# TURN, WAIT, END のいずれかを受け取る
line = input().strip()
except EOFError:
break
# 終了シグナルを受け取ったらループを抜ける
if line.startswith("END"):
break
if line == "TURN":
if q_idx < len(QQ):
# 質問フォーマットを "ASK X" に修正し、flush
print(f"ASK {QQ[q_idx][1]}", flush=True)
q_idx += 1
# 自分の質問の結果を受け取る
res_line = input().split()
if res_line[0] == "COUNT":
Ans[int(res_line[1])] = int(res_line[2])
else:
BC = []
c = 0
for i in B:
if i == 1:
c += 1
else:
for j in range(c):
BC.append(i)
G = []
for i in range(m + 1):
# 辞書にキーがない場合のエラーを防ぐため .get() を使用
count_diff = Ans.get(i, 0) - AA.count(i) - BC.count(i)
for j in range(max(0, count_diff)):
G.append(i)
if len(G)+int(Ans[1]==1 and not 1 in AA)<m:
print("ASK",1)
res_line = input().split()
# GUESS は昇順ソートが必須のためソートする
G.sort()
# 念のため、要素数がN個になるようにスライス(バグによる超過防止)
G = G[:n]
# 回答フォーマットを "GUESS ..." に修正し、flush
print("GUESS", *G, flush=True)
# 自分の回答の結果を受け取る
res_line = input().split()
if res_line[0] == "GUESSED":
if int(res_line[2]) == 1:
fin += 1
elif line == "WAIT":
# 相手のターンの結果を受け取る
res_line = input().split()
if res_line[0] == "COUNT":
Ans[int(res_line[1])] = int(res_line[2])
B.append(int(res_line[1]))
elif res_line[0] == "GUESSED":
if int(res_line[2]) == 1:
fin += 1