QOJ.ac

QOJ

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

#21437. Kahden askeleen päässä

Statistics

On olemassa merkkijonomuunnin, joka käsittelee nimenomaan $\texttt{01}$-merkkijonoja ja jonka sisään on ennalta asetettu äärellinen sääntöjoukko $\mathcal{R}$. Jokainen sääntö on muotoa $(u, v)$, missä $u, v$ ovat yhtä pitkiä epätyhjiä $\texttt{01}$-merkkijonoja; tämä tarkoittaa, että yhdellä operaatioaskeleella voidaan valita nykyisen merkkijonon osamerkkijono $u$ ja korvata se merkkijonolla $v$. Aina kun koneeseen syötetään pari yhtä pitkiä epätyhjiä $\texttt{01}$-merkkijonoja $(s, t)$, kone tulostaa pienimmän mahdollisen operaatioaskelten määrän, jolla $s$ voidaan muuntaa merkkijonoksi $t$, tai ilmoittaa, ettei ratkaisua ole.

Muistat syöttäneesi tähän koneeseen aikoinaan $n$ paria yhtä pitkiä epätyhjiä $\texttt{01}$-merkkijonoja $(s_1, t_1), (s_2, t_2), \dots, (s_n, t_n)$. Sattumalta muistisi mukaan jokaisella kyselyllä ei ainoastaan ollut ratkaisua, vaan lisäksi pienin operaatioaskelten määrä toteutti ehdon $d_i \leqslant 2$.

Varmistaaksesi, pettääkö muistisi, selvitä: onko olemassa sellaista sääntöjoukkoa $\mathcal{R}$, jolla koneen todelliset tulosteet näille $n$ syötteelle vastaavat täysin muistikuvaasi?

Syöte

Ensimmäinen rivi sisältää positiivisen kokonaisluvun $T$, joka ilmoittaa testitapausten lukumäärän.

Kunkin testitapauksen ensimmäinen rivi sisältää positiivisen kokonaisluvun $n$, joka ilmoittaa kyselytietueiden lukumäärän. Seuraavilla $n$ rivillä $i$:s rivi sisältää kaksi yhtä pitkää epätyhjää $\texttt{01}$-merkkijonoa $s_i, t_i$ sekä kokonaisluvun $d_i$ ($0 \leqslant d_i \leqslant 2$), jotka ilmoittavat $i$:nnen syötteen alkumerkkijonon, kohdemerkkijonon sekä koneen antaman pienimmän operaatioaskelten määrän.

Tuloste

Tulosta jokaiselle testitapaukselle omalle rivilleen yksi merkkijono. Jos ehdot täyttävä sääntöjoukko $\mathcal{R}$ on olemassa, tulosta YES; muussa tapauksessa tulosta NO.

Voit tulostaa merkkijonot YES ja NO käyttäen mitä tahansa kirjainkokoa; esimerkiksi yes, Yes ja YES tulkitaan kaikki samaksi vastaukseksi.

Esimerkit

Syöte 1

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

Tuloste 1

YES
NO
NO

Huomautus

  • Testitapaus $1$: Voidaan muodostaa vain yhden säännön sisältävä joukko $\mathcal{R} = \{(\texttt{01}, \texttt{10})\}$:
    • Kyselyssä $1$ pätee $s_1 = t_1 = \texttt{010}$, joten muunnos on valmis ilman yhtäkään operaatiota ja pienin operaatioaskelten määrä on $0$.
    • Kyselyssä $2$ korvaamalla merkkijonon $\texttt{001}$ loppuosa $\texttt{01}$ merkkijonolla $\texttt{10}$ saadaan $\texttt{010}$ $1$ askeleella.
    • Kyselyssä $3$, koska $\texttt{001}$ ja $\texttt{100}$ eroavat toisistaan sekä $1$. että $3$. kohdasta, pelkällä pituuden $2$ säännöllä muunnosta ei voida suorittaa $1$ askeleella; voidaan kuitenkin ensin korvata alkumerkkijonon $\texttt{001}$ loppuosa $\texttt{01}$ merkkijonolla $\texttt{10}$, jolloin saadaan välimerkkijono $\texttt{010}$, ja sen jälkeen korvata välimerkkijonon $\texttt{010}$ alkuosa $\texttt{01}$ merkkijonolla $\texttt{10}$, jolloin saadaan kohdemerkkijono $\texttt{100}$, joten pienin operaatioaskelten määrä on $2$.
  • Testitapaus $2$: Jotta $\texttt{10}$ voitaisiin muuntaa merkkijonoksi $\texttt{01}$ $1$ askeleella, sääntöjoukon $\mathcal{R}$ on sisällettävä sääntö $(\texttt{10}, \texttt{01})$. Kun tämä sääntö on mukana, kyselyssä $2$ riittää kuitenkin korvata merkkijonon $\texttt{100}$ alkuosa $\texttt{10}$ merkkijonolla $\texttt{01}$, jolloin $\texttt{010}$ saadaan $1$ askeleella, mikä on ristiriidassa muistissasi olevan arvon $d_2 = 2$ kanssa.
  • Testitapaus $3$: Kaikkien muunnosprosessin aikaisten merkkijonojen on oltava yhtä pitkiä $\texttt{01}$-merkkijonoja. Pituuden $1$ $\texttt{01}$-merkkijonoja on vain kaksi: $\texttt{0}$ ja $\texttt{1}$. Jos $\texttt{0}$ voidaan muuntaa merkkijonoksi $\texttt{1}$, on välttämättä oltava olemassa sääntö $(\texttt{0}, \texttt{1})$ ja muunnos onnistuu vain $1$ askeleella, joten on mahdotonta, että tarvittaisiin vähintään $2$ askelta.

Rajoitukset

Kaikissa testiaineistoissa taataan, että $T \geqslant 1$, $n \geqslant 1$, $0 \leqslant d_i \leqslant 2$, $1 \leqslant |s_i| = |t_i|$ ja että $s_i, t_i$ ovat merkkijonoja, jotka koostuvat vain merkeistä $\texttt{0}$ ja $\texttt{1}$.

Olkoon $L = \sum_{i=1}^{n} |s_i|$ yhden testitapauksen kaikkien alkumerkkijonojen pituuksien summa ja $\sum L$ yhden testitiedoston kaikkien testitapausten suureiden $L$ summa; taataan, että $\sum L \leqslant 3\times 10^6$.

Tässä tehtävässä on käytössä järkevät osatehtäväriippuvuudet.

Osatehtävä Pisteet $\sum L \leqslant$ Erikoisominaisuus
$1$ $16$ $4 \times 10^3$ A
$2$ $20$ $3\times 10^6$ A
$3$ $20$ $2\times 10^4$ Ei
$4$ $28$ $10^5$ Ei
$5$ $16$ $3 \times 10^6$ Ei
  • Erikoisominaisuus A: Taataan, että kaikilla $1 \leqslant i \leqslant n$ pätee $|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.