QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 1024 MB 總分: 100 可 Hack ✓

#18518. The Real Folk Blues

统计

입력

터미널 피드의 첫 번째 줄에는 두 정수 $n$과 $k$ ($1 \le n, k \le 200$)가 주어지며, 이는 초기 코드의 개수와 각 코드의 길이를 나타냅니다.

다음 $n$개의 줄 각각에는 길이 $k$의 이진 문자열 (01로 구성)이 주어지며, 현재 아카이브에 있는 코드를 나타냅니다.

마지막 줄에는 길이 $k$의 단일 이진 문자열 $t$가 주어지며, 이는 당신이 위조해야 할 표적 현상금 코드입니다.

출력

표적 코드 $t$를 위조하는 것이 불가능하다면, 한 줄에 NO를 출력합니다.

그렇지 않으면 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$개의 연산을 마친 후, 아카이브 내 적어도 하나의 코드가 표적 $t$와 정확히 일치해야 합니다. 표적 코드 $t$가 시작 아카이브에 이미 있다면, $m = 0$을 출력하면 됩니다.

코드를 위조하는 올바른 방법이 여러 개라면, 그중 유효한 연산 수열 아무거나 출력해도 됩니다.

예제

입력 1

3 4
1000
0100
0010
1111

출력 1

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

참고

  • 처음 세 연산은 초기 문자열들의 보수를 추가하여 0111, 1011, 1101을 만듭니다.
  • 마지막 연산은 이 세 문자열의 비트별 다수결을 취합니다.
  • 모든 위치에서 적어도 두 개의 비트가 $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.