atcoder#ARC070D. [ARC070F] HonestOrUnkind
[ARC070F] HonestOrUnkind
配点 : 点
問題文
これはインタラクティブな問題です。
シカのAtCoDeerくんは ~ の番号がついた 人の人が集まっているのを見つけました。 この内 人は正直者で、残りの 人は不親切な人です。 人の人は全員、誰が正直者で、誰が不親切な人かを把握しています。 一方、AtCoDeerくんは、正直者が 人いて不親切な人が 人いることしか知りません。 そこで、AtCoDeerくんはこれらの 人に質問をして、正直者を全員特定しようとしています。 一回の質問では、AtCoDeerくんは、 なる , を選んで、 さんに「 さんは正直者ですか?」という質問をします。
正直者は、質問に対し常に Yes か No の正しい答えを返します。 一方、不親切な人は、質問に対し Yes か No のどちらかを恣意的に選んで返します。 つまり、常に嘘をついたり、半分の確率でランダムに答えるといった単純なアルゴリズムではない可能性があります。
AtCoDeerくんは高々 回質問をすることができます。質問は順番に行われ、以前の質問の結果から次の質問を決めることが出来ます。
正直者を全員特定してください。 不可能な場合(正確には、どのような 回の質問をしようと、不親切な人たちがうまく返答することで、正直者の集合としてありうるものが2つ以上存在するようにできる場合)は、その旨を出力してください。
制約
入出力
最初に、標準入力から と が以下の形式で与えられる:
A B
もし特定が不可能な場合は、即座に次のように出力し、プログラムを終了しなければならない。:
Impossible
それ以外の場合は、次に、クエリを質問する。 各クエリは、標準出力に以下の形式で出力されなければならない:
? a b
ここで と は 以上 以下の整数でなければならない。
次に、クエリの答えが標準入力から以下の形式で与えられる:
ans
ここで は Y
または N
である。
Y
のときは質問の答えが Yes であることを、N
のときは No であることを表す。
最後に、答えを以下の形式で出力しなければならない:
! s_0s_1...s_{N-1}
ここで は 番の人が正直者なら 1
、不親切な人なら 0
でなければならない。
ジャッジ
- 出力のあと、標準出力を flush しなければならない。 そうでないときは
TLE
の可能性がある。 - 答えを出力した後、プログラムをすぐに終了しなければならない。そうでないときの挙動は定義されていない。
- 出力の答えが間違っている場合の挙動は定義されていない (
WA
とは限らない)。
サンプル
このサンプルでは , で、答えは 101
である。
Input | Output |
---|---|
次のサンプルでは , で、答えは Impossible
である。
Input | Output |
---|---|