結果
| 問題 |
No.594 壊れた宝物発見機
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-11-10 23:20:12 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,943 bytes |
| コンパイル時間 | 1,722 ms |
| コンパイル使用メモリ | 172,800 KB |
| 実行使用メモリ | 25,604 KB |
| 平均クエリ数 | 146.20 |
| 最終ジャッジ日時 | 2024-07-16 14:32:47 |
| 合計ジャッジ時間 | 5,613 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 19 WA * 1 |
コンパイルメッセージ
main.cpp: In function 'int main()':
main.cpp:83:11: warning: 'ap.Point::z' may be used uninitialized [-Wmaybe-uninitialized]
83 | answer(ap.x, ap.y, ap.z);
| ~~~~~~^~~~~~~~~~~~~~~~~~
main.cpp:54:11: note: 'ap.Point::z' was declared here
54 | Point ap;
| ^~
main.cpp:83:11: warning: 'ap.Point::y' may be used uninitialized [-Wmaybe-uninitialized]
83 | answer(ap.x, ap.y, ap.z);
| ~~~~~~^~~~~~~~~~~~~~~~~~
main.cpp:54:11: note: 'ap.Point::y' was declared here
54 | Point ap;
| ^~
main.cpp:83:11: warning: 'ap.Point::x' may be used uninitialized [-Wmaybe-uninitialized]
83 | answer(ap.x, ap.y, ap.z);
| ~~~~~~^~~~~~~~~~~~~~~~~~
main.cpp:54:11: note: 'ap.Point::x' was declared here
54 | 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;
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 < 193) {
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);
}
}
answer(ap.x, ap.y, ap.z);
return 0;
}