QOJ.ac

QOJ

Time Limit: 2 s Memory Limit: 2048 MB Total points: 100 Hackable ✓

#21437. В двух шагах

Statistics

Имеется машина преобразования строк, специально предназначенная для обработки $\texttt{01}$-строк, внутри которой заранее задано конечное множество правил $\mathcal{R}$. Каждое правило имеет вид $(u, v)$, где $u, v$ — непустые $\texttt{01}$-строки одинаковой длины; это означает, что за один шаг операции можно выбрать некоторую подстроку $u$ текущей строки и заменить её на $v$. Каждый раз, когда на вход машине подаётся пара непустых $\texttt{01}$-строк одинаковой длины $(s, t)$, машина выводит минимальное количество шагов операций, необходимое для преобразования $s$ в $t$, либо сообщает, что решения нет.

Вы вспоминаете, что однажды подавали на вход этой машине $n$ пар непустых $\texttt{01}$-строк одинаковой длины $(s_1, t_1), (s_2, t_2), \dots, (s_n, t_n)$. По совпадению, согласно вашей памяти, каждый запрос не только имел решение, но и удовлетворял условию, что минимальное количество шагов операций составляло $d_i \leqslant 2$.

Чтобы проверить, не подводит ли вас память, определите: существует ли такое множество правил $\mathcal{R}$, при котором фактические ответы машины на эти $n$ входных запросов полностью совпадают с вашими воспоминаниями?

Входные данные

Первая строка содержит одно положительное целое число $T$ — количество наборов входных данных.

Для каждого набора входных данных первая строка содержит одно положительное целое число $n$ — количество записей о запросах. В следующих $n$ строках $i$-я строка содержит две непустые $\texttt{01}$-строки одинаковой длины $s_i, t_i$ и целое число $d_i$ ($0 \leqslant d_i \leqslant 2$), обозначающие начальную строку, целевую строку и выданное машиной минимальное количество шагов операций для $i$-го запроса соответственно.

Выходные данные

Для каждого набора входных данных выведите в отдельной строке одну строку. Если существует множество правил $\mathcal{R}$, удовлетворяющее условиям, выведите YES; в противном случае выведите NO.

Вы можете выводить YES и NO в любом регистре; например, yes, Yes и YES будут считаться одинаковым ответом.

Примеры

Входные данные 1

3
3
010 010 0
001 010 1
001 100 2
2
10 01 1
100 010 2
1
0 1 2

Выходные данные 1

YES
NO
NO

Примечание

  • $1$-й набор входных данных: можно построить множество, содержащее только одно правило $\mathcal{R} = \{(\texttt{01}, \texttt{10})\}$:
    • Для $1$-го запроса $s_1 = t_1 = \texttt{010}$, поэтому преобразование выполняется без каких-либо операций, и минимальное количество шагов равно $0$.
    • Для $2$-го запроса, заменив суффикс $\texttt{01}$ строки $\texttt{001}$ на $\texttt{10}$, можно за $1$ шаг получить $\texttt{010}$.
    • Для $3$-го запроса, поскольку $\texttt{001}$ и $\texttt{100}$ различаются и на $1$-й, и на $3$-й позициях, с помощью одного лишь правила длины $2$ невозможно выполнить преобразование за $1$ шаг; однако можно сначала заменить суффикс $\texttt{01}$ начальной строки $\texttt{001}$ на $\texttt{10}$, получив промежуточную строку $\texttt{010}$, а затем заменить префикс $\texttt{01}$ промежуточной строки $\texttt{010}$ на $\texttt{10}$, получив целевую строку $\texttt{100}$, поэтому минимальное количество шагов операций равно $2$.
  • $2$-й набор входных данных: чтобы за $1$ шаг преобразовать $\texttt{10}$ в $\texttt{01}$, множество правил $\mathcal{R}$ обязательно должно содержать правило $(\texttt{10}, \texttt{01})$. Однако при наличии этого правила во $2$-м запросе достаточно заменить префикс $\texttt{10}$ строки $\texttt{100}$ на $\texttt{01}$, чтобы получить $\texttt{010}$ за $1$ шаг, что противоречит значению $d_2 = 2$ в вашей памяти.
  • $3$-й набор входных данных: все строки в процессе преобразования должны быть $\texttt{01}$-строками одинаковой длины. Существует всего две $\texttt{01}$-строки длины $1$: $\texttt{0}$ и $\texttt{1}$. Если из $\texttt{0}$ можно получить $\texttt{1}$, то обязательно существует правило $(\texttt{0}, \texttt{1})$, и преобразование выполняется всего за $1$ шаг, поэтому минимальное количество шагов не может быть равно $2$.

Ограничения

Для всех тестовых данных гарантируется, что $T \geqslant 1$, $n \geqslant 1$, $0 \leqslant d_i \leqslant 2$, $1 \leqslant |s_i| = |t_i|$, а также что $s_i, t_i$ являются строками, состоящими только из символов $\texttt{0}$ и $\texttt{1}$.

Обозначим через $L = \sum_{i=1}^{n} |s_i|$ сумму длин всех начальных строк в одном наборе входных данных, а через $\sum L$ — сумму значений $L$ по всем наборам входных данных в одном тесте; гарантируется, что $\sum L \leqslant 3\times 10^6$.

В этой задаче включены разумные зависимости между подзадачами.

Подзадача Баллы $\sum L \leqslant$ Особое свойство
$1$ $16$ $4 \times 10^3$ A
$2$ $20$ $3\times 10^6$ A
$3$ $20$ $2\times 10^4$ Нет
$4$ $28$ $10^5$ Нет
$5$ $16$ $3 \times 10^6$ Нет
  • Особое свойство A: гарантируется, что для всех $1 \leqslant i \leqslant n$ выполняется $|s_i| \geqslant 50$.

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.