結果
| 問題 |
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);
}