結果
問題 |
No.3018 目隠し宝探し
|
ユーザー |
|
提出日時 | 2025-01-31 20:14:14 |
言語 | D (dmd 2.109.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,335 bytes |
コンパイル時間 | 3,209 ms |
コンパイル使用メモリ | 198,892 KB |
実行使用メモリ | 26,228 KB |
平均クエリ数 | 2.68 |
最終ジャッジ日時 | 2025-01-31 20:14:21 |
合計ジャッジ時間 | 6,934 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 1 |
other | AC * 3 RE * 18 |
ソースコード
import std; void main () { int H, W; readln.read(H, W); // 2乗のコストというのが大事で、実は広くてもクエリ3回でできる。 int ask (int i, int j) { writefln("? %s %s", i, j); stdout.flush; int res = readln.chomp.to!int; enforce(0 <= res); return res; } void ans (int i, int j) { writefln("! %s %s", i, j); } if (H == 1 && W == 1) { ans(H, W); return; } if (H == 1) { int u = ask(1, 1); if (W == 2) { ans(1, u == 0 ? 1 : 2); return; } int v = ask(1, 2); int w = -(v - u - 1 - 2 * 1) / 2; ans(1, w); return; } if (W == 1) { int u = ask(1, 1); if (H == 2) { ans(u == 0 ? 1 : 2, 1); return; } int v = ask(2, 1); int h = -(v - u - 1 - 2 * 1) / 2; ans(h, 1); return; } int p = ask(1, 1); int q = ask(2, 1); int r = ask(1, 2); int h = -(q - p - 1 - 2 * 1) / 2; int w = -(r - p - 1 - 2 * 1) / 2; ans(h, w); } void read (T...) (string S, ref T args) { import std.conv : to; import std.array : split; auto buf = S.split; foreach (i, ref arg; args) { arg = buf[i].to!(typeof(arg)); } }