No.594 壊れた宝物発見機
タグ : / 解いたユーザー数 123
作問者 : 小指が強い人 / テスター : りあん
問題文
小指くんは、宝物の座標$P(X_t ,Y_t ,Z_t)$と小指くんと宝物との距離$D_t$が分かる優れた宝物発見機を持っています。
しかし、何回も使っているうちに座標が表示されなくなり、正確な距離$D_t$ではなく、正確に計算できていない距離$D$と表示されてしまいます。
けれども、近くになれば$D$は小さくなりますし遠くになれば大きくなるので、近くなっているのか遠くなっているのか分かります。
このことを利用して宝物の座標$P(X_t ,Y_t ,Z_t)$を見つけ、小指くんの宝物を探す作業の手伝いをしてあげてください。
$X_t,Y_t,Z_t$の範囲は以下のとおりです。
$-100\ \le\ X_t\ \le\ 100$ (整数)
$-100\ \le\ Y_t\ \le\ 100$ (整数)
$-100\ \le\ Z_t\ \le\ 100$ (整数)
距離 はユークリッド距離のことです。
クエリ
クエリは200回まで行うことが出来ます。(質問クエリと回答クエリの合計)
質問クエリ
? $X$ $Y$ $Z$$-150\ \le\ X\ \le\ 150$ (整数)
$-150\ \le\ Y\ \le\ 150$ (整数)
$-150\ \le\ Z\ \le\ 150$ (整数)
座標$Q(X,Y,Z)$と宝物の座標$P(X_t ,Y_t ,Z_t)$の間の正しくない距離$D$を得たい場合は、このような形式で出力してください。
出力
$D$
$0 \leq D\ <\ 2^{31}$ (整数)
$D$は正しくない距離です。
$i$回目のクエリの座標と宝物の座標との正しい距離を$D_{i,t}$,正しくない距離を$D_i$とすると
$a$回目のクエリと$b$回目のクエリを比較した時、
$D_{a,t} \leq D_{b,t}$である時は$D_a \leq D_b$であることと
$D_{a,t} > D_{b,t}$である時は$D_a > D_b$であることが保証されています。
質問クエリの形式が間違っていれば$D$は$-1$になります。
回答クエリ
! $X$ $Y$ $Z$正しい宝物の座標$P(X_t ,Y_t ,Z_t)$が分かれば、以上のように出力し、プログラムを終了してください。
回答クエリは一回しか使うことができませんので注意してください。
サンプルプログラム
#include "bits/stdc++.h" using namespace std; // 質問クエリ 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; } int main(void) { int a[3] = {10, 10, 10}; ask(a[0], a[1], a[2]); answer(a[0], a[1], a[2]); return 0; }
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。