結果
| 問題 |
No.594 壊れた宝物発見機
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2017-11-10 22:46:33 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,477 bytes |
| コンパイル時間 | 1,598 ms |
| コンパイル使用メモリ | 171,812 KB |
| 実行使用メモリ | 44,192 KB |
| 最終ジャッジ日時 | 2024-07-16 15:28:24 |
| 合計ジャッジ時間 | 8,133 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | TLE * 1 -- * 19 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
// 質問クエリ
int ask(int x, int y, int z) {
int d;
cout << "?" << " " << x << " " << y << " " << z << endl;
cin >> d;
return d;
}
// 回答クエリ
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 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 = 100;
else x = -100;
if (i & 2) y = 100;
else y = -100;
if (i & 4) z = 100;
else z = -100;
v.push_back((Point){x, y, z});
}
int idx = -1;
while (judge(v)) {
vector<int> ans(8);
for (int i = 0; i < 8; i++) {
ans[i] = ask(v[i].x, v[i].y, v[i].z);
}
int ti = 0;
for (int i = 1; i < 8; i++) {
if (ans[i] < ans[ti]) {
ti = i;
}
}
idx = ti;
Point p = v[idx];
for (int i = 0; i < 8; i++) {
if (idx == i) continue;
v[i].x = (v[i].x + v[idx].x + 1) / 2;
v[i].y = (v[i].y + v[idx].y + 1) / 2;
v[i].z = (v[i].z + v[idx].z + 1) / 2;
}
}
answer(v[idx].x, v[idx].y, v[idx].z);
return 0;
}