QOJ.ac

QOJ

시간 제한: 1 s 메모리 제한: 1024 MB 총점: 100 해킹 가능 ✓

#18518. The Real Folk Blues

통계

Jesteś w trakcie włamywania się do terminalu danych Czerwonego Syndykatu Smoka. Archiwum terminalu, oznaczone jako $S$, początkowo zawiera $n$ zaszyfrowanych częstotliwości sygnału, każdą reprezentowaną jako binarny ciąg długości $k$. Te początkowe częstotliwości są indeksowane od $1$ do $n$ w dokładnej kolejności, w jakiej zostały wyodrębnione z pamięci terminalu. Aby włamać się do rdzenia, musisz syntezować nowe częstotliwości i wprowadzić je do archiwum. Każda operacja syntezy dodaje dokładnie jeden nowy binarny ciąg do $S$, automatycznie przypisując mu następny dostępny indeks całkowity.

Masz do dyspozycji dwie operacje:

  • Inwersja fazy: Wybierz istniejącą częstotliwość $s$ i dodaj jej dokładną negację bitową (Niech $s$ będzie binarnym ciągiem długości $k$, takim że $s = s_1 s_2 \dots s_k$, gdzie każdy bit $s_i \in \{0, 1\}$. Negacja bitowa $s$, często oznaczana matematycznie jako $\neg s$, jest zdefiniowana jako nowy binarny ciąg długości $k$, w którym wartość $i$-tego bitu wynosi dokładnie $1 - s_i$.);
  • Triangulacja sygnału: Wybierz trzy istniejące częstotliwości $u$, $v$ i $w$ (niekoniecznie różne) i dodaj ich bitową większość, oznaczoną jako $\operatorname{maj}(u,v,w)$. Dla każdej pozycji bitu $i$ operacja oblicza: $$\operatorname{maj}(u,v,w)_i = \operatorname{maj}(u_i,v_i,w_i).$$ Dla pojedynczych bitów $a$, $b$, $c$, $\operatorname{maj}(a,b,c)$ wynosi $1$, jeśli co najmniej dwa z nich są $1$, a $0$ w przeciwnym razie.

Twoim celem jest ustalenie, czy możliwe jest sfałszowanie konkretnego docelowego kodu nagrody $t$ o długości $k$. Jeśli jest to możliwe, musisz podać sekwencję operacji (co najwyżej $10^5$), która pomyślnie go utworzy.

Wejście

Pierwszy wiersz kanału terminalu zawiera dwie liczby całkowite $n$ i $k$ ($1 \le n, k \le 200$), reprezentujące liczbę początkowych kodów oraz długość każdego kodu.

Każdy z kolejnych $n$ wierszy zawiera binarny ciąg (złożony z 0 i 1) długości $k$, przedstawiający kod znajdujący się obecnie w archiwum.

Ostatni wiersz zawiera pojedynczy binarny ciąg $t$ długości $k$, reprezentujący docelowy kod nagrody, który musisz sfałszować.

Wyjście

Jeśli nie jest możliwe sfałszowanie docelowego kodu $t$, wypisz pojedynczy wiersz zawierający NO.

W przeciwnym razie wypisz YES. W następnym wierszu wypisz liczbę całkowitą $m$ ($0 \le m \le 10^5$), reprezentującą całkowitą liczbę operacji, których użyjesz. Następnie wypisz $m$ wierszy opisujących twoje operacje w kolejności:

  • 1 x: Wybierz istniejący kod o indeksie $x$ i zastosuj Inwersję fazy (dodaj negację bitową $x$);
  • 2 x y z: Wybierz istniejące kody o indeksach $x$, $y$ i $z$ i zastosuj Triangulację sygnału (dodaj $\operatorname{maj}$ istniejących ciągów o indeksach $x$, $y$ i $z$).

Każdy używany indeks musi już istnieć w archiwum w momencie jego użycia. Po wykonaniu wszystkich $m$ operacji co najmniej jeden kod w archiwum musi dokładnie odpowiadać twojemu docelowemu kodowi $t$. Jeśli docelowy kod $t$ znajduje się już w początkowym archiwum, możesz po prostu wypisać $m = 0$.

Jeżeli istnieje wiele poprawnych sposobów na sfałszowanie kodu, możesz wypisać dowolny prawidłowy ciąg operacji.

Przykład

Wejście 1

3 4
1000
0100
0010
1111

Wyjście 1

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

Uwagi

  • Pierwsze trzy operacje dodają negacje początkowych ciągów, tworząc 0111, 1011 i 1101.
  • Ostatnia operacja bierze bitową większość tych trzech ciągów.
  • Na każdej pozycji co najmniej dwa z nich mają bit $1$, więc dodany ciąg to 1111, czyli cel.

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.