結果
問題 | No.594 壊れた宝物発見機 |
ユーザー |
|
提出日時 | 2017-11-10 23:26:32 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 117 ms / 2,000 ms |
コード長 | 3,151 bytes |
コンパイル時間 | 1,885 ms |
コンパイル使用メモリ | 173,056 KB |
実行使用メモリ | 25,232 KB |
平均クエリ数 | 176.25 |
最終ジャッジ日時 | 2024-07-16 14:34:06 |
合計ジャッジ時間 | 4,990 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 20 |
コンパイルメッセージ
main.cpp: In function 'int main()': main.cpp:132:11: warning: 'ap.Point::z' may be used uninitialized [-Wmaybe-uninitialized] 132 | answer(ap.x, ap.y, ap.z); | ~~~~~~^~~~~~~~~~~~~~~~~~ main.cpp:63:11: note: 'ap.Point::z' was declared here 63 | Point ap; | ^~ main.cpp:132:11: warning: 'ap.Point::y' may be used uninitialized [-Wmaybe-uninitialized] 132 | answer(ap.x, ap.y, ap.z); | ~~~~~~^~~~~~~~~~~~~~~~~~ main.cpp:63:11: note: 'ap.Point::y' was declared here 63 | Point ap; | ^~ main.cpp:132:11: warning: 'ap.Point::x' may be used uninitialized [-Wmaybe-uninitialized] 132 | answer(ap.x, ap.y, ap.z); | ~~~~~~^~~~~~~~~~~~~~~~~~ main.cpp:63:11: note: 'ap.Point::x' was declared here 63 | Point ap; | ^~
ソースコード
#include <bits/stdc++.h>using namespace std;using ll = long long;int ax = -25, ay = 25, az = 35;// 質問クエリint ask(int x, int y, int z) {int d;cout << "?" << " " << x << " " << y << " " << z << endl;cin >> d;return d;//(ax - x) * (ax - x) + (ay - y) * (ay - y) + (az - z) * (az - z);}// 回答クエリvoid answer(int x, int y, int z) {cout << "!" << " " << x << " " << y << " " << z << endl;}struct Point {int x;int y;int z;};bool judge(vector<Point>& v) {return v[1].x - v[0].x > 1 || v[2].y - v[0].y > 1 || v[4].z - v[0].z > 0;}int mid(int x, int y) {int sum = x + y;return sum / 2;/*if (sum < 0) return (sum - 1) / 2;else return (sum + 1) / 2;*/}int mid2(int x, int y) {int sum = x + y;if (sum < 0) return (sum - 1) / 2;else return (sum + 1) / 2;}int main() {cin.tie(0);ios::sync_with_stdio(false);vector<Point> v;for (int i = 0; i < 8; i++) {int x, y, z;if (i & 1) x = 150;else x = -150;if (i & 2) y = 150;else y = -150;if (i & 4) z = 150;else z = -150;v.push_back((Point){x, y, z});}int idx = -1, vmax = 1145141919;int cnt = 0;Point ap;vector<int> ans(8);while (judge(v) && cnt < 93) {for (int i = 0; i < 8; i++) {if (idx == i) continue;ans[i] = ask(v[i].x, v[i].y, v[i].z);cnt++;}int ti = 0;for (int i = 1; i < 8; i++) {if (ans[i] < ans[ti]) {ti = i;}}idx = ti;if (ans[idx] < vmax) {vmax = ans[idx];ap.x = v[idx].x;ap.y = v[idx].y;ap.z = v[idx].z;}Point p = v[idx];for (int i = 0; i < 8; i++) {if (idx == i) continue;v[i].x = mid(v[i].x, v[idx].x);v[i].y = mid(v[i].y, v[idx].y);v[i].z = mid(v[i].z, v[idx].z);}}v.clear();for (int i = 0; i < 8; i++) {int x, y, z;if (i & 1) x = 150;else x = -150;if (i & 2) y = 150;else y = -150;if (i & 4) z = 150;else z = -150;v.push_back((Point){x, y, z});}cnt = 0;idx = -1;while (judge(v) && cnt < 93) {for (int i = 0; i < 8; i++) {if (idx == i) continue;ans[i] = ask(v[i].x, v[i].y, v[i].z);cnt++;}int ti = 0;for (int i = 1; i < 8; i++) {if (ans[i] < ans[ti]) {ti = i;}}idx = ti;if (ans[idx] < vmax) {vmax = ans[idx];ap.x = v[idx].x;ap.y = v[idx].y;ap.z = v[idx].z;}Point p = v[idx];for (int i = 0; i < 8; i++) {if (idx == i) continue;v[i].x = mid2(v[i].x, v[idx].x);v[i].y = mid2(v[i].y, v[idx].y);v[i].z = mid2(v[i].z, v[idx].z);}}answer(ap.x, ap.y, ap.z);return 0;}