難易度評価

難易度を1〜10段階で評価できます。投票はあとから変更・取り消しできます。

難易度(投票) Lv.5.5 (2票)

投票の分布
  1. Lv.10票
  2. Lv.20票
  3. Lv.30票
  4. Lv.40票
  5. Lv.51票
  6. Lv.61票
  7. Lv.70票
  8. Lv.80票
  9. Lv.90票
  10. Lv.100票

難易度の目安を見る ↗

ログインして難易度を投票

外部サイトへ移動します

リンク先の URL を確認してから開いてください。

別タブで開く

Two Prisoners and 01 Array

作成者 loop0919

難易度(作成者設定) Lv.5

難易度(投票) Lv.5.5 (2票)

解法のヒントになることがあります。
実行時間制限
2 秒
メモリ制限
512 MiB

問題文

この問題は 22 ステップ問題(あなたの作成したプログラムが独立して 22 回実行される形式の問題)です。

Alice と Bob として振る舞い、以下の手続きを成功させてください。

  1. Alice と Bob に、正整数 NN が与えられる。
  2. Alice のみに、長さ 2N2^N の 0101 列 BB と 00 以上 2N−12^N - 1 以下の整数 XX が与えられる。
  3. Alice は、 BB とのハミング距離が高々 11 である長さ 2N2^N の 0101 列 B′B' を Bob に伝える。
  4. Bob は、 Alice が教えられた整数 XX を復元する。

11 回の実行につき、 TT 個のテストケースが与えられます。

ハミング距離とは

長さがともに kk である 22 つの 0101 列に対するハミング距離とは、 1≤i≤k1 \le i \le k を満たす整数 ii のうち、一方の列の ii 番目が 00 であり、他方の列の ii 番目が 11 であるようなものの個数です。
例えば、 (1,0,0,1)(1, 0, 0, 1) と (0,1,0,1)(0, 1, 0, 1) のハミング距離は 22 、 (1,1)(1, 1) と (1,1)(1, 1) のハミング距離は 00 です。

制約

  • 1≤T≤1001 \le T \le 100
  • 1≤N≤101 \le N \le 10
  • 0≤X≤2N−10 \le X \le 2^N - 1
  • Bi (1≤i≤2N)B_i ~ (1 \le i \le 2^N) は 00 または 11
  • T,N,X,BiT, N, X, B_i は整数

1回目の実行

11 回目の実行において、あなたのプログラムは Alice として振る舞う必要がある。

11 回目の実行の入力は以下の形式で標準入力から与えられる。

Alice\mathtt{Alice} TT case1,1\mathrm{case}_{1, 1} case1,2\mathrm{case}_{1, 2} ⋮\vdots case1,T\mathrm{case}_{1, T}

11 回目の実行における各テストケース case1,t (1≤t≤T)\mathrm{case}_{1, t} ~ (1 \le t \le T) は以下の形式で与えられる。

NN XX B1B_1 B2B_2 …\ldots B2NB_{2^N}

その後、各テストケースに対する出力を以下の形式で出力せよ。

output1,1\mathrm{output}_{1, 1} output1,2\mathrm{output}_{1, 2} ⋮\vdots output1,T\mathrm{output}_{1, T}

各テストケースに対する出力 output1,t\mathrm{output}_{1, t} として、 Bob に伝える長さ 2N2^N の 0101 列 B′B' を以下の形式で出力せよ。

B1′B'_1 B2′B'_2 …\ldots B2N′B'_{2^N}

2回目の実行

22 回目の実行において、あなたのプログラムは Bob として振る舞う必要がある。

22 回目の実行の入力は以下の形式で標準入力から与えられる。

Bob\mathtt{Bob} TT case2,1\mathrm{case}_{2, 1} case2,2\mathrm{case}_{2, 2} ⋮\vdots case2,T\mathrm{case}_{2, T}

22 回目の実行における各テストケース case2,t (1≤t≤T)\mathrm{case}_{2, t} ~ (1 \le t \le T) は以下の形式で与えられる。

NN B1′B'_1 B2′B'_2 …\ldots B2N′B'_{2^N}

ここで、 B′=(B1′,B2′,⋯ ,B2N′)B' = (B'_1, B'_2, \cdots, B'_{2^N}) は 11 回目の実行で Alice が Bob に伝えた B′B' である。

その後、各テストケースに対する出力を以下の形式で出力せよ。

output2,1\mathrm{output}_{2, 1} output2,2\mathrm{output}_{2, 2} ⋮\vdots output2,T\mathrm{output}_{2, T}

各テストケースに対する出力 output2,t\mathrm{output}_{2, t} として、復元した後の XX を以下の形式で出力せよ。

XX

サンプル 1

1 回目の入力

Alice
3
1 0
0 1
2 1
0 1 0 1
4 15
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1

1 回目の出力

0 0
0 1 0 0
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

どのテストケースでも、 B′B' と BB のハミング距離は 11 です。条件を満たす B′B' であれば、これ以外を出力しても構いません。

2 回目の入力

Bob
3
1
0 0
2
0 1 0 0
4
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 0

11 回目に上の出力をした場合の入力です。

2 回目の出力

0
1
15

2ステップ形式(Run-twice):プログラムは1ケースにつき2回実行されます。応答を待つ前に出力をflushしてください。