#gigacode2019h. [gigacode_2019_h]論理回路の構成

[gigacode_2019_h]論理回路の構成

配点: 100100

問題文

NN 個のスイッチがあり,それぞれスイッチ 1,2,3,...,N1, 2, 3, ..., N と番号付けられています.各スイッチは,0 か 1 のいずれか二通りの状態を持ちます.

さて,あなたは番号 N+1,N+2,...,N+MN+1, N+2, ..., N+M がついた MM 個のメモリを使って,回路を作ることができます.(MM の値は自由に決められます.)

メモリには,以下の 44 種類があります.以下の説明では,該当するメモリの番号を xx としています.

① AND メモリ
2 つのスイッチ/メモリから繋がっており,これらを番号 u,vu, v (u<x,v<x)(u < x, v < x) とします.番号 xx のメモリの値は,番号 uu がついたスイッチ/メモリの値・番号 vv がついたスイッチ/メモリの値が両方 1 であれば 1 となり,そうでなければ 0 となります.

② OR メモリ
2 つのスイッチ/メモリから繋がっており,これらを番号 u,vu, v (u<x,v<x)(u < x, v < x) とします.番号 xx のメモリの値は,番号 uu がついたスイッチ/メモリの値・番号 vv がついたスイッチ/メモリの値のうち片方でも 1 であれば 1 となり,そうでなければ 0 となります.

③ XOR メモリ
2 つのスイッチ/メモリから繋がっており,これらを番号 u,vu, v (u<x,v<x)(u < x, v < x) とします.番号 xx のメモリの値は,番号 uu がついたスイッチ/メモリの値・番号 vv がついたスイッチ/メモリの値のうち一つだけが 1 であれば 1 となり,そうでなければ 0 となります.

④ NOT メモリ
1 つのスイッチ/メモリから繋がっており,これを番号 u(u<x)u (u < x) とします.番号 xx のメモリの値は,番号 uu がついたスイッチ/メモリの値が 0 であれば 1 となり,そうでなければ 0 となります.

例えば,以下の図のような回路を考えます.

この回路の場合,それぞれのスイッチの状態について各メモリの状態は,以下の表のようになります.

スイッチ1

スイッチ2

スイッチ3

メモリ4

メモリ5

メモリ6

0

0

0

0

1

0

0

0

1

0

0

0

0

1

0

1

1

1

0

1

1

1

0

0

1

0

0

1

1

1

1

0

1

1

0

0

1

1

0

0

1

0

1

1

1

0

0

0

そのため,{スイッチ1, スイッチ2, スイッチ3} の状態が {0,1,00, 1, 0}, {1,0,01, 0, 0} の 2 通りに限り,メモリ6 の値が 11 となります.

それについて,以下の 2 つの問題を解いてください.

T=1 のとき
スイッチの状態は 2N2^N 通りありますが,そのうちちょうど KK 通りについて,番号 N+MN+M のメモリ(M=0M=0 の場合はスイッチ)の値が 11 となるような回路を一つ構成してください.

ただし,2N×4N2^{N}×4N 個を超えるメモリを使ってはいけません.

T = 2 のとき
スイッチの状態が S1,S2,S3,...,SKS_1, S_2, S_3, ..., S_K であるときに限り,番号 N+MN+M のメモリ(M=0M=0 の場合はスイッチ)の値が 11 となるような回路を一つ構成してください.

ただし,5000050 \\ 000 個を超えるメモリを使ってはいけません.

制約

  • 1leqTleq21 \\leq T \\leq 2
  • 2leqNleq102 \\leq N \\leq 10
  • 1leqKleq2N11 \\leq K \\leq 2^{N}-1
  • T,N,KT, N, K は整数

小課題・得点

この問題には,22 つの小課題があります.

  1. (30 点) T=1T = 1
  2. (70 点) T=2T = 2

小課題 1 において,各テストケースに対して以下のように得点が定められます.この小課題の全部のテストケースに対する最低得点がこの小課題の得点となります.

  • 2N×4N<M2^{N}×4N < M のとき,00 点.
  • 2N×2<Mleq2N×4N2^{N}×2 < M \\leq 2^{N}×4N のとき,1010 点.
  • N2<Mleq2N×2N^2 < M \\leq 2^{N}×2 のとき,1616 点.
  • N1<MleqN2N-1 < M \\leq N^2 のとき,2323 点.
  • MleqN1M \\leq N-1 のとき,3030 点満点.

次に,小課題 2 において,すべてのテストケースにおける MM の最大値を L2L_2 としたとき,この小課題の得点は以下のようになります.

  • 50001leqL250 \\ 001 \\leq L_2 のとき,00 点.
  • 4201leqL2leq500004 \\ 201 \\leq L_2 \\leq 50 \\ 000 のとき,1515 点.
  • 3101leqL2leq42003 \\ 101 \\leq L_2 \\leq 4 \\ 200 のとき,1818 点.
  • 2101leqL2leq31002 \\ 101 \\leq L_2 \\leq 3 \\ 100 のとき,2121 点.
  • 1601leqL2leq21001 \\ 601 \\leq L_2 \\leq 2 \\ 100 のとき,2525 点.
  • 1201leqL2leq16001 \\ 201 \\leq L_2 \\leq 1 \\ 600 のとき,2929 点.
  • 751leqL2leq1200751 \\leq L_2 \\leq 1 \\ 200 のとき,3535 点.
  • 501leqL2leq750501 \\leq L_2 \\leq 750 のとき,floor(70fracL25008)floor(70 - \\frac{L_2 - 500}{8}) 点.
  • L2leq500L_2 \\leq 500 のとき,7070 点満点.

入力

入力は以下の形式で標準入力から与えられます.

(☆) T=1T = 1 のとき

1 NN KK

ただし,NN はスイッチの個数,KK は番号 N+MN+M のスイッチ(M=0M=0 の場合メモリ)の値が 1 であるべき状態の通り数を意味します.

(★) T=2T = 2 のとき

2 NN KK S1S_1 S2S_2 S3S_3 :: SKS_K

ここでは,SiS_i は番号 N+MN+M のスイッチ (M=0M=0 の場合メモリ) の値が 1 であるべき状態のうち,ii 番目のものです.
SiS_iNN 文字の文字列で表され,ii 文字目が 0 である場合は ii 番目のスイッチの状態が 0 である,ii 文字目が 1 である場合は ii 番目のスイッチの状態が 1 であることを意味します.
例えば,N=4N = 4Si=S_i = 0101 の場合,スイッチ 2,42, 4 が 1 であり,スイッチ 1,31, 3 が 0 であるような状態のことを表します.

出力

以下のように,論理回路の構成方法を出力してください.

MM (番号 N+1N+1 のメモリの情報) (番号 N+2N+2 のメモリの情報) (番号 N+3N+3 のメモリの情報) :: (番号 N+MN+M のメモリの情報)

番号 xx のメモリの情報は,以下のように出力してください.

AND メモリの場合

AND uu vv

これは,番号 uuvv のスイッチ/メモリから,番号 xx のメモリに繋がっていることを表します.u<x,v<xu < x, v < x を満たさなければなりません.(ただし u=vu = v でも構わない)

OR メモリの場合

OR uu vv

これは,番号 uuvv のスイッチ/メモリから,番号 xx のメモリに繋がっていることを表します.u<x,v<xu < x, v < x を満たさなければなりません.(ただし u=vu = v でも構わない)

XOR メモリの場合

XOR uu vv

これは,番号 uuvv のスイッチ/メモリから,番号 xx のメモリに繋がっていることを表します.u<x,v<xu < x, v < x を満たさなければなりません.(ただし u=vu = v でも構わない)

NOT メモリの場合

NOT uu

これは,番号 uu のスイッチ/メモリから,番号 xx のメモリに繋がっていることを表します.u<xu < x を満たさなければなりません.


入力例 1

1
3 2

出力例 1

3
XOR 1 2
NOT 3
AND 4 5

この出力の場合,N=2N = 2 に対して M=3M = 3 であり,NN 以上 N2N^2 以下なので 2323 点となります.


入力例 2

2
3 2
010
100

出力例 2

3
XOR 1 2
NOT 3
AND 4 5

入力例 3

1
5 24

出力例 3

1
OR 1 2

入力例 4

2
3 4
001
101
011
111

出力例 4

0