結果
問題 | No.594 壊れた宝物発見機 |
ユーザー | 👑 obakyan |
提出日時 | 2019-09-23 19:02:05 |
言語 | C++11 (gcc 11.4.0) |
結果 |
AC
|
実行時間 | 119 ms / 2,000 ms |
コード長 | 1,389 bytes |
コンパイル時間 | 616 ms |
コンパイル使用メモリ | 75,488 KB |
実行使用メモリ | 25,460 KB |
平均クエリ数 | 83.50 |
最終ジャッジ日時 | 2024-07-16 18:08:25 |
合計ジャッジ時間 | 4,348 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 119 ms
25,208 KB |
testcase_01 | AC | 114 ms
25,220 KB |
testcase_02 | AC | 116 ms
25,220 KB |
testcase_03 | AC | 116 ms
25,220 KB |
testcase_04 | AC | 113 ms
24,836 KB |
testcase_05 | AC | 115 ms
24,964 KB |
testcase_06 | AC | 114 ms
25,220 KB |
testcase_07 | AC | 113 ms
25,220 KB |
testcase_08 | AC | 114 ms
24,836 KB |
testcase_09 | AC | 114 ms
24,592 KB |
testcase_10 | AC | 115 ms
25,232 KB |
testcase_11 | AC | 111 ms
25,232 KB |
testcase_12 | AC | 114 ms
24,976 KB |
testcase_13 | AC | 114 ms
24,592 KB |
testcase_14 | AC | 114 ms
24,848 KB |
testcase_15 | AC | 115 ms
25,460 KB |
testcase_16 | AC | 114 ms
24,848 KB |
testcase_17 | AC | 111 ms
25,232 KB |
testcase_18 | AC | 114 ms
25,232 KB |
testcase_19 | AC | 113 ms
25,232 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); }