B - 数当てゲーム Editorial /

Time Limit: 2 sec / Memory Limit: 256 MB

ゲーム好きな結衣さんはかねてからの希望が通り、ゲーム好きな教授の研究室に配属されることになった。

そこの研究室では、1以上1000以下の整数で毎日変わる 暗証番号 で部屋がロックされている。そして、部屋に入るには、AI に質問して暗証番号を当てるゲームをする必要があった。

AI には1種類の質問ができる。AI に1以上1000以下の整数 x を与えると AI は暗証番号が x で割り切れるかどうかを返答する。暗証番号の入力はセキュリティ上1回しかできない。暗証番号の入力と AI への質問は合計で QLE 回まで行える。

最初は楽しめていた結衣さんも、いいかげん毎日ゲームをするのにうんざりしてきたので、暗証番号を当てるプログラムを書くことにした。

入出力形式

プログラムはある数字が暗証番号を割り切れるかどうかをAIに聞くことができる。 例えば C/C++で10が暗証番号を割り切れるか聞く場合は

 printf(“? 10\n”); fflush(stdout);

とする.次に、

 char judge[2]; scanf(“%s”, judge);

とすると変数 judge に AI の返答が入る。

またC/C++で15を暗証番号として入力する場合は

printf(“! 15\n”); fflush(stdout);

とする.

制約

  • 暗証番号は1以上1000以下の整数である。
  • AIに与える整数 x は1以上1000以下でなければならない。
  • QLE = 200
  • judge \in \{Y, N\}
  • この問題の判定には、10点分のテストケースのグループが設定されている。このグループに含まれるテストケースは上記の制約に加えて下記の制約も満たす。

  • QLE = 1000

入出力例

ゲームの説明プログラムの出力プログラムへの入力
100 で暗証番号が割り切れるかを聞いている? 100
AIの返答で、100 では暗証番号は割り切れないことを表すN
67 で暗証番号を割り切れるかを聞いている? 67
AIの返答で、67 では暗証番号は割り切れないことを表すN
555 で暗証番号を割り切れるかを聞いている? 555
AIの返答で、555 で暗証番号は割り切れることを表すY
555 と暗証番号を入力している ! 555

Source Name

京都大学プログラミングコンテスト2014