結果

問題 No.594 壊れた宝物発見機
ユーザー fine
提出日時 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;
      |           ^~

ソースコード

diff #
プレゼンテーションモードにする

#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;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0