AT_abc313_d [ABC313D] Odd or Even
Description
[problemUrl]: https://atcoder.jp/contests/abc313/tasks/abc313_d
この問題は **インタラクティブな問題**(あなたの作成したプログラムとジャッジシステムが入出力を介して対話を行う形式の問題)です。
整数 $ N $ および $ N $ 未満の **奇数** $ K $ が与えられます。
ジャッジシステムは、$ 0 $ および $ 1 $ からなる長さ $ N $ の数列 $ A\ =\ (A_1,\ A_2,\ \dots,\ A_N) $ を隠し持っています。
あなたは数列 $ A $ の要素の値を直接知ることはできません。
その代わりに、ジャッジシステムに対して以下の質問を $ N $ 回まで行うことができます。
- $ 1 $ 以上 $ N $ 以下の相異なる整数 $ x_1,\ x_2,\ \dots,\ x_K $ を選ぶ。そして、$ A_{x_1}\ +\ A_{x_2}\ +\ \dots\ +\ A_{x_K} $ の偶奇を聞く。
$ N $ 回以下の質問で $ (A_1,\ A_2,\ \dots,\ A_N) $ を全て特定して、答えを出力してください。
ただし、**ジャッジは適応的です**。言い換えると、ジャッジシステムは今までの質問の回答に矛盾しない範囲で$ A $ の内容を自由に変更することができます。
そのため、出力が次の条件を満たす場合にあなたの作成したプログラムは正解とみなされます。それ以外の場合は不正解とみなされます。
- ここまでの質問の回答と矛盾しないような数列が一意に定まっており、かつそれがプログラムが出力した数列と一致している。
### Input & Output Format
この問題はインタラクティブな問題(あなたの作成したプログラムとジャッジシステムが入出力を介して対話を行う形式の問題)です。
最初に、$ N $ および $ K $ を標準入力から受け取ってください。
> $ N $ $ K $
次に、$ (A_1,\ A_2,\ \dots,\ A_N) $ を全て特定できるまで質問を繰り返してください。
質問は、以下の形式で標準出力に出力してください。ここで $ x_1,\ x_2,\ \dots,\ x_K $ は $ 1 $ 以上 $ N $ 以下の相異なる $ K $ 個の整数です。
> $ ? $ $ x_1 $ $ x_2 $ $ \dots $ $ x_K $
これに対する応答は、次の形式で標準入力から与えられます。
> $ T $
ここで、$ T $ は質問に対する答えで、
- $ T $ が `0` である場合は $ A_{x_1}\ +\ A_{x_2}\ +\ \dots\ +\ A_{x_K} $ は偶数であることを、
- $ T $ が `1` である場合は $ A_{x_1}\ +\ A_{x_2}\ +\ \dots\ +\ A_{x_K} $ は奇数であることを意味します。
ただし、$ x_1,\ x_2,\ \dots,\ x_K $ が制約を満たしていないか、質問の回数が $ N $ 回を超えた場合は $ T $ は `-1` となります。
ジャッジが `-1` を返した場合、プログラムはすでに不正解とみなされています。この場合、ただちにプログラムを終了してください。
$ A $ の要素を全て特定できたら、特定した $ A $ の要素を以下の形式で出力してください。その後、ただちにプログラムを終了してください。
> $ ! $ $ A_1 $ $ A_2 $ $ \dots $ $ A_N $
Input Format
N/A
Output Format
N/A
Explanation/Hint
### 制約
- $ 1\ \leq\ K\ \lt\ N\ \leq\ 1000 $
- $ K $ は奇数
- $ A_i $ は $ 0 $ または $ 1 $
### 注意点
- **出力を行うたびに、末尾に改行を入れて標準出力を flush してください。そうしなかった場合、ジャッジ結果が TLE となる可能性があります。**
- **対話の途中で誤った出力形式による出力を行った、あるいはプログラムが途中で終了した場合のジャッジ結果は不定です。**
- 解答を出力したらただちにプログラムを終了してください。そうしない場合、ジャッジ結果は不定です。
- ジャッジは適応的です。言い換えると、ジャッジシステムは今までの質問の回答に矛盾しない範囲で $ A $ の内容を変更することができます。
### 入出力例
以下の入出力例は $ N=5,\ K=3 $ の場合の入出力例です。**この入出力例の通りに出力するとジャッジ結果は WA になることに注意してください。**
入出力例では、プログラムが出力した $ A\ =\ (1,\ 0,\ 1,\ 1,\ 0) $ はここまでの質問の回答に矛盾しない数列ですが、例えば $ (0,\ 0,\ 1,\ 0,\ 0) $ もここまでの質問の回答に矛盾しない数列であるため、数列 $ A $ は一意に定まっていません。そのため、このプログラムは不正解とみなされます。
入力 出力 説明 `5 3` まず整数 $ N $ および $ K $ が与えられます。 `? 2 4 1 ` $ (x_1,\ x_2,\ x_3)\ =\ (2,\ 4,\ 1) $ として質問を行います。 `0` 質問の答えは $ 0 $ なので、ジャッジはその値を返します。 `? 5 3 2` $ (x_1,\ x_2,\ x_3)\ =\ (5,\ 3,\ 2) $ として質問を行います。 `1` 質問の答えは $ 1 $ なので、ジャッジはその値を返します。 `! 1 0 1 1 0` $ A $ の答えとして $ (1,\ 0,\ 1,\ 1,\ 0) $ を出力します。$ A $ を一意に特定できていないのでジャッジ結果は WA になります。