結果
| 問題 | No.3246 80% Accuracy Calculator |
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2026-06-13 01:34:35 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 177 ms / 2,000 ms |
| コード長 | 1,311 bytes |
| 記録 | |
| コンパイル時間 | 362 ms |
| コンパイル使用メモリ | 85,120 KB |
| 実行使用メモリ | 101,656 KB |
| 平均クエリ数 | 1125.74 |
| 最終ジャッジ日時 | 2026-06-13 01:34:45 |
| 合計ジャッジ時間 | 8,023 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
| 純コード判定待ち |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 43 |
ソースコード
def gen_ops(x: int, y: int):
v = [0, 1, 2]
# keep [0] = x
ops = [(v[0], v[2], v[1])]
for i in range(y.bit_length() - 1)[::-1]:
ops.append((v[1], v[1], v[2]))
if y >> i & 1:
ops.append((v[0], v[2], v[1]))
else:
v[1], v[2] = v[2], v[1]
return ops, v[1]
def check_ops(x, y):
ops, c = gen_ops(x, y)
v = [x, y, 0]
for i, j, k in ops:
if i == k or j == k:
return False
v[k] = v[i] + v[j]
return v[c] == x * y
def f_print(*args):
print(*args, flush=True)
def ask1(p: int):
v = "ABC"[p]
f_print("?", v)
z = int(input())
if z == -1:
exit()
return z
def ask2(p1: int, p2: int, p3: int):
v1 = "ABC"[p1]
v2 = "ABC"[p2]
v3 = "ABC"[p3]
f_print("+", v1, v2, v3)
z = int(input())
if z == -1:
exit()
return z
from collections import Counter
def get0(p: int):
"""[p] の値を調べる"""
g0 = 50
c = Counter()
while True:
z = ask1(p)
c[z] += 1
if c[z] >= g0:
return z
x = get0(0)
y = get0(1)
ops, ch = gen_ops(x, y)
v = [x, y, 0]
for i, j, k in ops:
v[k] = v[i] + v[j]
while True:
ask2(i, j, k)
if get0(k) == v[k]:
break
f_print("!", "ABC"[ch])