結果
問題 |
No.3161 Find Presents
|
ユーザー |
|
提出日時 | 2025-05-23 21:31:32 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 246 ms / 4,000 ms |
コード長 | 1,155 bytes |
コンパイル時間 | 1,850 ms |
コンパイル使用メモリ | 206,672 KB |
実行使用メモリ | 26,216 KB |
平均クエリ数 | 3351.21 |
最終ジャッジ日時 | 2025-05-23 21:31:49 |
合計ジャッジ時間 | 16,337 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 80 |
ソースコード
#include <bits/stdc++.h> using namespace std; int main(){ ios_base::sync_with_stdio(false); cin.tie(nullptr); int N = 1'000'000; auto query = [&](int lx,int rx,int ly,int ry) -> bool { if(lx == rx || ly == ry) return false; rx--; ry--; cout << "? " << lx << " " << rx << " " << ly << " " << ry << endl; int ret; cin >> ret; assert(ret != -1); return ret; }; auto output = [&](vector<pair<int,int>> P) -> void { cout << "!" << P.size() << endl; for(auto [x,y] : P) cout << x << " " << y << endl; }; queue<tuple<int,int,int,int>> Q; Q.push({0,N+1,0,N+1}); vector<pair<int,int>> answer; while(Q.size()){ auto [lx,rx,ly,ry] = Q.front(); Q.pop(); if(lx+1 == rx && ly+1 == ry){ answer.push_back({lx,ly}); continue; } int mx = (lx+rx)/2,my = (ly+ry)/2; if(query(lx,mx,ly,my)) Q.push({lx,mx,ly,my}); if(query(lx,mx,my,ry)) Q.push({lx,mx,my,ry}); if(query(mx,rx,ly,my)) Q.push({mx,rx,ly,my}); if(query(mx,rx,my,ry)) Q.push({mx,rx,my,ry}); } output(answer); }