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.