No.3562 Communicate Sorted Vector
タグ : / 解いたユーザー数 16
作問者 :
jastaway
/ テスター :
yaaya
問題文
Alice が Bob に長さ $N$ の数列 $A_{1}, \dots, A_{N}$ を伝えることを考えます。 ただし、 $1 \leq A_{1} < \dots < A_{N} \leq 10^{9}$ が成り立ちます。
Aliceは $1$ 以上 $N$ 以下の整数 $K$ を選び、Bobに $K$ 個の非空な 01 文字列 $S_{1}, \dots, S_{K}$ のみ伝えることができます。 ただし与えられる整数 $Q (= 377)$ を用いて、 文字列長の総和 $\sum_{i=1}^{K} |S_i|$ が $Q$ 以下である必要があります。
Bobは $N, Q$ とAliceから伝えられた $S_{1}, \dots, S_{K}$ のみから Aliceに与えられた $A$ を復元したいです。
AliceとBobのプログラムを作成してください。
ただし、 $Q=420, 410$ の場合に部分点が付けられています。
入出力
あなたのプログラムは、まず以下のような形式で入力を受け取ってください。
$ \mathrm{Player} $
$ N\ Q $
ここで、
$\mathrm{Player}$ は文字列 Alice または文字列 Bob であり、
$N$ は数列 $A$ の長さ、 $Q$ はAliceが出力できる文字列長の総和の上限です。 ( $1 \leq N \leq 14$、$Q \in \{377, 410, 420\}$)
- $\mathrm{Player} = $
Aliceのとき、あなたのプログラムはこれ以降 Alice として振る舞わなければなりません。 - $\mathrm{Player} = $
Bobのとき、あなたのプログラムはこれ以降 Bob として振る舞わなければなりません。
Aliceの場合
以下の形式で数列 $A$ ( $1 \leq A_{1} < \dots < A_{N} \leq 10^{9}$ ) を受け取ってください。
$A_{1}\ A_{2}\ \dots\ A_{N}$
その後、以下の形式でBobに伝える $K$ 個の文字列 $S_{1}, \dots, S_{K}$ を1行ずつ出力してください。
ただし、$1 \leq K \leq N$ で各文字列は 0 または 1 のみからなり、文字列長の総和 $\sum_{i=1}^{K} |S_{i}|$ は $Q$ 以下である必要があります。
$K$ $S_1$ $S_2$ $\vdots$ $S_K$
Bobの場合
以下の形式でAliceの出力 $S_{1}, \dots, S_{K}$ を受け取ってください。
$K$ $S_1$ $S_2$ $\vdots$ $S_K$
その後、Aliceに入力された長さ $N$ の数列 $A$ を復元し、以下の形式で空白区切りで出力してください。
$A_{1}\ A_{2}\ \dots\ A_{N}$
注意点
- 出力を行うたびに、末尾に改行を入れて標準出力を flush してください。
- 不正な出力をしたときのジャッジの結果は不定です。 WAではなくTLEやREが出る可能性もあるので注意してください。
部分点
この問題にはサブタスクによる部分点が設定されています。
| サブタスク名 | 配点 | 制約 |
|---|---|---|
| 部分点1 | 10 点 | $Q=420$ |
| 部分点2 | 25 点 | $Q=410$ |
| 部分点3 | 65 点 | $Q=377$ |
サンプル
サンプル1
$A=(2, 3, 5)$ のとき
Aliceの入力
Alice
3 380
2 3 5
Aliceの出力
3
00
111
00000
Bobの入力
Bob
3 380
3
00
111
00000
Bobの出力
2 3 5
提出するには、Twitter 、GitHub、 Googleもしくは右上の雲マークをクリックしてアカウントを作成してください。