QOJ.ac

QOJ

时间限制: 1 s 内存限制: 1024 MB 总分: 100 可 Hack ✓

#18518. The Real Folk Blues

统计

あなたは Red Dragon Syndicate のデータ端末に侵入しています。端末のアーカイブ $S$ には、初期状態で $n$ 個の暗号化された信号周波数が含まれており、それぞれは長さ $k$ のバイナリ文字列として表現されています。これらの初期周波数は、端末のメモリから抽出された正確な順序で $1$ から $n$ までインデックスが付けられています。コアに侵入するには、新しい周波数を合成し、アーカイブに注入する必要があります。各合成操作は、$S$ にちょうど1つの新しいバイナリ文字列を追加し、次に利用可能な整数インデックスを自動的に割り当てます。

あなたは次の2つの操作を装備しています:

  • 位相反転 (Phase Inversion): 既存の周波数 $s$ を選択し、その正確なビットごとの補数を追加します ($s$ を長さ $k$ のバイナリ文字列とし、$s = s_1 s_2 \dots s_k$、各ビット $s_i \in \{0, 1\}$ とします。$s$ のビットごとの補数は、数学的には $\neg s$ と表記されることが多く、$i$ 番目のビットの値が正確に $1 - s_i$ となる長さ $k$ の新しいバイナリ文字列として定義されます)。
  • 信号三角測量 (Signal Triangulation): 3つの既存の周波数 $u$, $v$, $w$ (必ずしも異なる必要はありません) を選択し、それらのビットごとの多数決を追加します。これは $\operatorname{maj}(u,v,w)$ と表記されます。各ビット位置 $i$ について、操作は次のように評価されます: $$\operatorname{maj}(u,v,w)_i = \operatorname{maj}(u_i,v_i,w_i).$$ 個々のビット $a$, $b$, $c$ について、$\operatorname{maj}(a,b,c)$ は、少なくとも2つが $1$ ならば $1$、そうでなければ $0$ となります。

あなたの目的は、特定の目標となる賞金コード $t$ (長さ $k$) を偽造できるかどうかを判断することです。可能であれば、それを正常に構築するための操作列 (最大 $10^5$ 回) を提供する必要があります。

入力

端末フィードの最初の行には、2つの整数 $n$ と $k$ ($1 \le n, k \le 200$) が含まれ、初期コードの数と各コードの長さを表します。

次の $n$ 行のそれぞれには、長さ $k$ のバイナリ文字列 (01) が含まれ、現在アーカイブにあるコードを示します。

最後の行には、偽造する必要がある目標の賞金コードを表す、長さ $k$ の単一のバイナリ文字列 $t$ が含まれます。

出力

目標コード $t$ を偽造することが不可能な場合は、NO とだけ書かれた1行を出力してください。

それ以外の場合は、YES を出力してください。次の行に、使用する操作の総数を表す整数 $m$ ($0 \le m \le 10^5$) を出力してください。その後、操作を順に記述した $m$ 行を出力してください:

  • 1 x: インデックス $x$ の既存のコードを選び、位相反転を適用します ($x$ のビットごとの補数を追加します)。
  • 2 x y z: インデックス $x$, $y$, $z$ の既存のコードを選び、信号三角測量を適用します (既存の文字列 $x$, $y$, $z$ の $\operatorname{maj}$ を追加します)。

使用するすべてのインデックスは、使用する時点でアーカイブに存在していなければなりません。$m$ 回の操作の後、アーカイブ内の少なくとも1つのコードが目標 $t$ と完全に一致していなければなりません。目標コード $t$ がすでに最初のアーカイブに存在する場合は、単に $m = 0$ と出力することができます。

コードを偽造する正しい方法が複数ある場合は、有効な操作シーケンスのいずれかを出力してください。

入出力例

入力例 1

3 4
1000
0100
0010
1111

出力例 1

YES
4
1 1
1 2
1 3
2 4 5 6

注記

  • 最初の3操作は、初期文字列の補数を追加し、011110111101 を生成します。
  • 最後の操作は、これら3つの文字列のビットごとの多数決を取ります。
  • すべての位置で少なくとも2つの文字列がビット $1$ を持つため、追加される文字列は 1111 となり、これが目標です。

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.