結果

問題 No.3018 目隠し宝探し
ユーザー ripity
提出日時 2025-02-03 19:23:55
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 104 ms / 2,000 ms
コード長 941 bytes
コンパイル時間 4,524 ms
コンパイル使用メモリ 192,172 KB
実行使用メモリ 25,972 KB
平均クエリ数 2.68
最終ジャッジ日時 2025-02-03 19:24:05
合計ジャッジ時間 7,285 ms
ジャッジサーバーID
(参考情報)
judge4 / judge2
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 21
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <bits/stdc++.h>
using namespace std;

int query(int i, int j) {
  cout << "? " << i << " " << j << endl;
  int d;
  cin >> d;
  return d;
}

void answer(int i, int j) {
  cout << "! " << i << " " << j << endl;
}

int main() {
  int H, W;
  cin >> H >> W;
  if(H == 1 && W == 1) {
    answer(1, 1);
  }else if(W == 1) {
    int d = query(1, 1);
    for(int i = 1; i <= H; i++) {
      if((i - 1) * (i - 1) == d) {
        answer(i, 1);
      }
    }
  }else if(H == 1) {
    int d = query(1, 1);
    for(int j = 1; j <= W; j++) {
      if((j - 1) * (j - 1) == d) {
        answer(1, j);
      }
    }
  }else {
    int d1 = query(1, 1);
    int d2 = query(1, W);
    for(int i = 1; i <= H; i++) {
      for(int j = 1; j <= W; j++) {
        int e1 = (i - 1) * (i - 1) + (j - 1) * (j - 1);
        int e2 = (i - 1) * (i - 1) + (j - W) * (j - W);
        if(d1 == e1 && d2 == e2) {
          answer(i, j);
        }
      }
    }
  }
}
0