No.253 ロウソクの長さ
問題文
ユキコちゃんとあなたはロウソクを使ったゲームをします。
ロウソクは最初
ゲーム中ユキコちゃんはロウソクを見ることができますが、あなたは見ることはできずロウソクの最初の長さも知りません。
ゲームは次の様に進行します。
- ユキコちゃんがロウソクに火をつけます。
- あなたはユキコちゃんにある非負整数
について「現在のロウソクの長さは cmですか?」と質問できます。 - ユキコちゃんは現在のロウソクの長さが
cmより「短い」か「長い」か「等しい」かをあなたに答えます。 - ロウソクが1cm短くなります。ただしすでに燃え尽きている場合、つまり0cmの場合は0cmのままです。
- あなたがまだ質問したい場合は2.に戻る。そうでないなら終了。
100回までの質問でロウソクの最初の長さ
入出力
あなたが提出したプログラム(以下、回答プログラムとする)は2種類のクエリを標準出力に出力しなければならない。
クエリは現在のロウソクの長さがある非負整数
質問クエリのフォーマットは
"
回答クエリのフォーマットは
"
質問クエリ及び回答クエリにおいて
各クエリは、行末に改行してください。
出力後に、出力をflushせよ。flushしなかった場合、応答プログラムが入力を処理できず制限時間を超えてしまい、その結果不正解となることがある。
質問クエリを行うと、応答プログラムから回答プログラムの標準入力に結果が返される。
現在のロウソクの長さが
また、質問クエリの実行後必ずその結果を受け取ること。応答プログラムが入力を処理できず不正解の原因となることがある。
回答クエリの実行後、プログラムをただちに終了すること。ジャッジの制限時間を超えた結果として不正解となることがある。
ジャッジの制限時間以内に終了し、質問回数が100回以内であり、回答クエリが出力した値
注意点
- ジャッジの制限時間は2秒としているが、応答プログラムの反応時間をも含めている。
- 2種類のクエリ以外の出力を行った場合は不正解となる。
- 標準エラー出力への出力は質問クエリとも回答クエリとも不正な出力ともみなされない。
プログラムの例
int ask(int Y){ cout << "? " << Y << endl; int res; cin >> res; return res; } int main(){ int res = 123; for(int i=0;i<100;i++){ int Y = rand() % 10000; if(ask(Y) == 0){ res = 456; break; } } cout << "! " << res << endl; return 0; }
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。