#gigacode2019h. [gigacode_2019_h]論理回路の構成
[gigacode_2019_h]論理回路の構成
配点: 点
問題文
個のスイッチがあり,それぞれスイッチ と番号付けられています.各スイッチは,0 か 1 のいずれか二通りの状態を持ちます.
さて,あなたは番号 がついた 個のメモリを使って,回路を作ることができます.( の値は自由に決められます.)
メモリには,以下の 種類があります.以下の説明では,該当するメモリの番号を としています.
① AND メモリ
2 つのスイッチ/メモリから繋がっており,これらを番号 とします.番号 のメモリの値は,番号 がついたスイッチ/メモリの値・番号 がついたスイッチ/メモリの値が両方 1 であれば 1 となり,そうでなければ 0 となります.
② OR メモリ
2 つのスイッチ/メモリから繋がっており,これらを番号 とします.番号 のメモリの値は,番号 がついたスイッチ/メモリの値・番号 がついたスイッチ/メモリの値のうち片方でも 1 であれば 1 となり,そうでなければ 0 となります.
③ XOR メモリ
2 つのスイッチ/メモリから繋がっており,これらを番号 とします.番号 のメモリの値は,番号 がついたスイッチ/メモリの値・番号 がついたスイッチ/メモリの値のうち一つだけが 1 であれば 1 となり,そうでなければ 0 となります.
④ NOT メモリ
1 つのスイッチ/メモリから繋がっており,これを番号 とします.番号 のメモリの値は,番号 がついたスイッチ/メモリの値が 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} の状態が {}, {} の 2 通りに限り,メモリ6 の値が となります.
それについて,以下の 2 つの問題を解いてください.
T=1 のとき
スイッチの状態は 通りありますが,そのうちちょうど 通りについて,番号 のメモリ( の場合はスイッチ)の値が となるような回路を一つ構成してください.
ただし, 個を超えるメモリを使ってはいけません.
T = 2 のとき
スイッチの状態が であるときに限り,番号 のメモリ( の場合はスイッチ)の値が となるような回路を一つ構成してください.
ただし, 個を超えるメモリを使ってはいけません.
制約
- は整数
小課題・得点
この問題には, つの小課題があります.
- (30 点) .
- (70 点) .
小課題 1 において,各テストケースに対して以下のように得点が定められます.この小課題の全部のテストケースに対する最低得点がこの小課題の得点となります.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点満点.
次に,小課題 2 において,すべてのテストケースにおける の最大値を としたとき,この小課題の得点は以下のようになります.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点.
- のとき, 点満点.
入力
入力は以下の形式で標準入力から与えられます.
(☆) のとき
1
ただし, はスイッチの個数, は番号 のスイッチ( の場合メモリ)の値が 1 であるべき状態の通り数を意味します.
(★) のとき
2
ここでは, は番号 のスイッチ ( の場合メモリ) の値が 1 であるべき状態のうち, 番目のものです.
は 文字の文字列で表され, 文字目が 0
である場合は 番目のスイッチの状態が 0 である, 文字目が 1
である場合は 番目のスイッチの状態が 1 であることを意味します.
例えば, で 0101
の場合,スイッチ が 1 であり,スイッチ が 0 であるような状態のことを表します.
出力
以下のように,論理回路の構成方法を出力してください.
(番号 のメモリの情報) (番号 のメモリの情報) (番号 のメモリの情報) (番号 のメモリの情報)
番号 のメモリの情報は,以下のように出力してください.
AND メモリの場合
AND
これは,番号 と のスイッチ/メモリから,番号 のメモリに繋がっていることを表します. を満たさなければなりません.(ただし でも構わない)
OR メモリの場合
OR
これは,番号 と のスイッチ/メモリから,番号 のメモリに繋がっていることを表します. を満たさなければなりません.(ただし でも構わない)
XOR メモリの場合
XOR
これは,番号 と のスイッチ/メモリから,番号 のメモリに繋がっていることを表します. を満たさなければなりません.(ただし でも構わない)
NOT メモリの場合
NOT
これは,番号 のスイッチ/メモリから,番号 のメモリに繋がっていることを表します. を満たさなければなりません.
入力例 1
1
3 2
出力例 1
3
XOR 1 2
NOT 3
AND 4 5
この出力の場合, に対して であり, 以上 以下なので 点となります.
入力例 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