問題一覧 > 通常問題

No.594 壊れた宝物発見機

レベル : / 実行時間制限 : 1ケース 2.000秒 / メモリ制限 : 512 MB / リアクティブ問題 (詳しくはこちら
タグ : / 解いたユーザー数 123
作問者 : 小指が強い人 / テスター : りあん
2 ProblemId : 1181 / 出題時の順位表 / 自分の提出
問題文最終更新日: 2017-11-10 23:31:59

問題文

小指くんは、宝物の座標P(Xt,Yt,Zt)と小指くんと宝物との距離Dtが分かる優れた宝物発見機を持っています。
しかし、何回も使っているうちに座標が表示されなくなり、正確な距離Dtではなく、正確に計算できていない距離Dと表示されてしまいます。
けれども、近くになればDは小さくなりますし遠くになれば大きくなるので、近くなっているのか遠くなっているのか分かります。
このことを利用して宝物の座標P(Xt,Yt,Zt)を見つけ、小指くんの宝物を探す作業の手伝いをしてあげてください。

Xt,Yt,Ztの範囲は以下のとおりです。
100  Xt  100 (整数)
100  Yt  100 (整数)
100  Zt  100 (整数)

距離 はユークリッド距離のことです。

注意事項

この問題はリアクティブ形式で行います。
注意事項については「 リアクティブ形式の問題とは 」を参照してください。

クエリ

クエリは200回まで行うことが出来ます。

(質問クエリと回答クエリの合計)
質問クエリ
入力
? X Y Z
150  X  150 (整数)
150  Y  150 (整数)
150  Z  150 (整数)

座標Q(X,Y,Z)と宝物の座標P(Xt,Yt,Zt)の間の正しくない距離Dを得たい場合は、このような形式で出力してください。

出力
D

0D < 231 (整数)

Dは正しくない距離です。
i回目のクエリの座標と宝物の座標との正しい距離をDi,t,正しくない距離をDiとすると
a回目のクエリとb回目のクエリを比較した時、
Da,tDb,tである時はDaDbであることと
Da,t>Db,tである時はDa>Dbであることが保証されています。
質問クエリの形式が間違っていればD1になります。

回答クエリ
入力
! X Y Z
正しい宝物の座標P(Xt,Yt,Zt)が分かれば、以上のように出力し、プログラムを終了してください。
回答クエリは一回しか使うことができませんので注意してください。

サンプルプログラム

#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もしくは右上の雲マークをクリックしてアカウントを作成してください。