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}$ נותנת את $\texttt{010}$ תוך צעד $1$.
    • עבור השאילתה ה-$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$: כדי להפוך את $\texttt{10}$ ל-$\texttt{01}$ בצעד $1$, קבוצת הכללים $\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.