結果
問題 | No.3018 目隠し宝探し |
ユーザー |
|
提出日時 | 2025-01-31 20:12:33 |
言語 | D (dmd 2.109.1) |
結果 |
RE
|
実行時間 | - |
コード長 | 1,334 bytes |
コンパイル時間 | 2,609 ms |
コンパイル使用メモリ | 198,584 KB |
実行使用メモリ | 26,080 KB |
平均クエリ数 | 2.55 |
最終ジャッジ日時 | 2025-01-31 20:12:40 |
合計ジャッジ時間 | 5,985 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | RE * 1 |
other | AC * 2 RE * 19 |
ソースコード
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));}}