結果
問題 | No.594 壊れた宝物発見機 |
ユーザー |
|
提出日時 | 2017-11-11 00:10:01 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 121 ms / 2,000 ms |
コード長 | 2,202 bytes |
コンパイル時間 | 840 ms |
コンパイル使用メモリ | 94,084 KB |
実行使用メモリ | 25,616 KB |
平均クエリ数 | 46.30 |
最終ジャッジ日時 | 2024-07-16 14:40:16 |
合計ジャッジ時間 | 4,648 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 |
ソースコード
#include <iostream>#include <iomanip>#include <vector>#include <algorithm>#include <cstring>#include <map>#include <queue>#include <cmath>#include <complex> // complex<double> a(1.2 , 2.3);// real(): 1.2, imag()2.3using namespace std;#define MOD 1000000007#define ll long long#define ld long double#define FOR(i,a,b) for(ll i=(ll)a;i<(ll)b;i++)#define rep(i,n) FOR(i,0,n)#define pb push_back#define mp make_pair#define all(a) a.begin(),a.end()#define rall(a) a.rbegin(),a.rend()#define rmsame(a) sort(all(a)),a.erase(unique(all(a)), a.end())#define rmvector(a,b) rep(i,a.size())rep(j,b.size())if(a[i]==b[j]){a.erase(a.begin()+i);i--;break;}template<typename X> bool exist(vector<X> vec, X item){return find(all(vec), item)!=vec.end();}// 質問クエリint ask(int x, int y, int z) {int d;cout << "?" << " " << x << " " << y << " " << z << endl;cin >> d;return d;}// 回答クエリvoid answer(int x, int y, int z) {cout << "!" << " " << x << " " << y << " " << z << endl;}int main(){cin.tie(0);ios::sync_with_stdio(false);int minx = -150, maxx = 150;int miny = -150, maxy = 150;int minz = -150, maxz = 150;int x=-150,y=-150,z=-150;//xについてwhile(minx<maxx){int left = minx, middle = (minx+maxx)/2, right = maxx;ll ansl, ansr;ansl = ask((left+middle)/2,y,z);ansr = ask((middle+right)/2,y,z);if(ansl<ansr) maxx = middle;else minx = middle;if (ansl==ansr) break;}x = minx;//yについてwhile(miny<maxy){int left = miny, middle = (miny+maxy)/2, right = maxy;ll ansl, ansr;ansl = ask(x,(left+middle)/2,z);ansr = ask(x,(middle+right)/2,z);if(ansl<ansr) maxy = middle;else miny = middle;if (ansl==ansr) break;}y = miny;//zについてwhile(minz<maxz){int left = minz, middle = (minz+maxz)/2, right = maxz;ll ansl, ansr;ansl = ask(x,y,(left+middle)/2);ansr = ask(x,y,(middle+right)/2);if(ansl<ansr) maxz = middle;else minz = middle;if (ansl==ansr) break;}z = minz;answer(x,y,z);//cout << fixed << setprecision(16) << ans << endl;return 0;}