結果
| 問題 |
No.3018 目隠し宝探し
|
| コンテスト | |
| ユーザー |
detteiuu
|
| 提出日時 | 2025-01-25 14:43:15 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 536 ms / 2,000 ms |
| コード長 | 1,089 bytes |
| コンパイル時間 | 231 ms |
| コンパイル使用メモリ | 82,444 KB |
| 実行使用メモリ | 171,228 KB |
| 平均クエリ数 | 2.59 |
| 最終ジャッジ日時 | 2025-01-25 23:28:00 |
| 合計ジャッジ時間 | 6,764 ms |
|
ジャッジサーバーID (参考情報) |
judge11 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 21 |
ソースコード
from math import isqrt
from collections import defaultdict
H, W = map(int, input().split())
def question(h, w):
if (h, w) in memo:
return memo[(h, w)]
print("?", h, w)
ans = int(input())
if (h, w) not in memo:
memo[(h, w)] = ans
return ans
def answer(h, w):
print("!", h, w)
memo = dict()
if H == 1 or W == 1:
if H == 1 and W == 1:
answer(1, 1)
elif H == 1:
ans = question(1, 1)
answer(1, 1+isqrt(ans))
else:
ans = question(1, 1)
answer(1+isqrt(ans), 1)
exit()
dist = [[i**2+j**2 for j in range(W)] for i in range(H)]
D = defaultdict(list)
for i in range(H):
for j in range(W):
D[dist[i][j]].append((i, j))
d = question(1, 1)
if len(D[d]) == 1:
h, w = D[d][0]
answer(1+h, 1+w)
else:
d2 = question(2, 1)
diff = abs(d2-d)
if diff != 1:
ansH = 1+diff//2+1
else:
if d < d2:
ansH = 1
else:
ansH = 2
for h, w in D[d]:
if h+1 == ansH:
ansW = 1+w
break
answer(ansH, ansW)
detteiuu