結果
問題 | No.594 壊れた宝物発見機 |
ユーザー |
![]() |
提出日時 | 2018-10-30 00:57:55 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 134 ms / 2,000 ms |
コード長 | 1,448 bytes |
コンパイル時間 | 2,180 ms |
コンパイル使用メモリ | 204,240 KB |
最終ジャッジ日時 | 2025-01-06 15:05:24 |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 |
ソースコード
#include <bits/stdc++.h>using namespace std;using i64 = int64_t;using vi = vector<i64>;using vvi = vector<vi>;vi ls(3, -100), rs(3, 100);vi g(3);void ask(int x, int y, int z) {cout << "? " << x << " " << y << " " << z << endl;}void ask(vi v) {ask(v[0], v[1], v[2]);}void ans(int x, int y, int z) {cout << "! " << x << " " << y << " " << z << endl;exit(0);}int get() {int d;cin >> d;if (d == -1) exit(1);return d;}vi make_coord(int x, int i) {vi ret(3);for (int j = 0; j < 3; j++) {if (j == i) {ret[i] = x;} else {ret[j] = ls[j];}}return ret;}void solve(int i) {int l = ls[i], r = rs[i];while (l < r - 3) {int ml = l + (r - l) / 3;int mr = l + (r - l) * 2 / 3;vi vl = make_coord(ml, i);vi vr = make_coord(mr, i);ask(vl);int dl = get();ask(vr);int dr = get();if (dl < dr) {r = mr;} else {l = ml;}}using ii = pair<int, int>; // dist, xvector<ii> res;for (int j = l; j <= r; j++) {vi v = make_coord(j, i);ask(v);int d = get();res.push_back(ii(d, j));}sort(res.begin(), res.end());g[i] = res.front().second;}int main() {for (int i = 0; i < 3; i++) {solve(i);}ans(g[0], g[1], g[2]);}