結果
問題 | No.594 壊れた宝物発見機 |
ユーザー | 👑 obakyan |
提出日時 | 2019-09-23 19:02:05 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 110 ms / 2,000 ms |
コード長 | 1,389 bytes |
コンパイル時間 | 845 ms |
コンパイル使用メモリ | 73,868 KB |
実行使用メモリ | 24,360 KB |
平均クエリ数 | 83.50 |
最終ジャッジ日時 | 2023-09-23 18:14:12 |
合計ジャッジ時間 | 4,145 ms |
ジャッジサーバーID (参考情報) |
judge14 / judge11 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 110 ms
24,264 KB |
testcase_01 | AC | 96 ms
23,628 KB |
testcase_02 | AC | 98 ms
24,348 KB |
testcase_03 | AC | 100 ms
23,424 KB |
testcase_04 | AC | 98 ms
23,640 KB |
testcase_05 | AC | 100 ms
24,036 KB |
testcase_06 | AC | 102 ms
24,336 KB |
testcase_07 | AC | 99 ms
23,556 KB |
testcase_08 | AC | 97 ms
23,832 KB |
testcase_09 | AC | 100 ms
24,024 KB |
testcase_10 | AC | 102 ms
23,556 KB |
testcase_11 | AC | 100 ms
24,324 KB |
testcase_12 | AC | 102 ms
24,012 KB |
testcase_13 | AC | 102 ms
23,376 KB |
testcase_14 | AC | 100 ms
24,360 KB |
testcase_15 | AC | 100 ms
24,336 KB |
testcase_16 | AC | 96 ms
24,348 KB |
testcase_17 | AC | 102 ms
24,264 KB |
testcase_18 | AC | 97 ms
23,424 KB |
testcase_19 | AC | 99 ms
23,652 KB |
ソースコード
#include <cstdio> #include <cstdlib> #include <cstddef> #include <vector> #include <algorithm> #include <cmath> #include <cstring> #include <string> #include <iostream> #include <iomanip> #include <numeric> #include <set> #define L64 long long #define UL64 unsigned long long #define MOD (1000000007LL) using namespace std; int ask(int pos, int val) { int d; int x = pos == 0 ? val : 0; int y = pos == 1 ? val : 0; int z = pos == 2 ? val : 0; cout << "?" << " " << x << " " << y << " " << z << endl; cin >> d; return d; } void answer(int x, int y, int z) { cout << "!" << " " << x << " " << y << " " << z << endl; } int solve(int pos) { int left = -150; int right = 150; int vl = ask(pos, left); int vr = ask(pos, right); while(true){ int mid1 = (left * 2 + right) / 3; int mid2 = (left + right * 2) / 3; int vm1 = ask(pos, mid1); int vm2 = ask(pos, mid2); bool det = (right - left) <= 3; if(vl < vm1){ if(det) return left; right = mid1; vr = vm1; } else if(vm1 < vm2){ if(det) return mid1; right = mid2; vr = vm2; } else if(vm2 < vr){ if(det) return mid2; left = mid1; vl = vm1; } else { if(det) return right; left = mid2; vl = vm2; } } return 0; } int main(void) { int x = solve(0); int y = solve(1); int z = solve(2); answer(x, y, z); }