Se consideră o pereche de șiruri de caractere, și , de lungime , respectiv , formate exclusiv din litere mici ale alfabetului englez. Pozițiile literelor sunt numerotate în șir începând de la .
Sunt două tipuri de operații ce se pot efectua asupra șirului :
- : se șterge litera de pe poziția ;
- (cu ) : se sortează crescător (alfabetic) literele din subsecvența ce corespunde intervalului de poziții ;
unde , și sunt poziții ale unor litere din șirul .
Inițial, toate literele șirului sunt necolorate. O operație de tip poate fi realizată doar dacă toate literele din subsecvența corespunzătoare intervalului de poziții sunt necolorate. După efectuarea sortării, toate literele din această subsecvență devin colorate.
Cerință
Pentru fiecare dintre perechile de șiruri de tipul și date:
- Să se afișeze literele distincte care apar în cel puțin unul dintre șiruri și, pentru fiecare dintre acestea, simbolul șirului (literele sau ) în care apare de mai multe ori. În caz de egalitate, se alege șirul .
- Să se determine o succesiune de operații de tipul și/sau ce pot fi aplicate șirului , care să îl transforme într-un șir egal cu . Să se afișeze
DA
în cazul în care există o astfel de succesiune de operații, sauNU
în caz contrar.
Date de intrare
Fișierul de intrare opsir.in
conține pe prima linie numărul natural , reprezentând cerința care trebuie rezolvată ( sau ) pentru fiecare dintre perechile de șiruri date.
Pe a doua linie a fișierului se găsește numărul natural , ce reprezintă numărul de teste. Fiecare test cuprinde datele specifice pentru o pereche de șiruri de tipul celei precizate în enunț, date care se găsesc pe câte trei linii în fișier, astfel: pe prima linie și , în această ordine, cu semnificația din enunț, pe a doua linie șirul , iar pe a treia linie șirul .
Date de ieșire
Pentru , fișierul de ieșire opsir.out
va conține, pentru fiecare test, câte un număr natural , ce reprezintă numărul de litere distincte ce apar în cel puțin unul dintre șiruri, iar pe următoarele linii, câte o astfel de litera, precum și litera mare sau , corespunzătoare șirului în care apare de mai multe ori. Literele mici vor fi afișate în ordine alfabetică.
Pentru , fișierul de ieșire opsir.out
va conține linii, pe fiecare linie aflându-se răspunsul (DA
sau NU
) corespunzător câte unui test, în ordinea în care acestea se găsesc în fișierul de intrare.
Restricții și precizări
- ;
- ;
- Pentru , ;
- Suma lungimilor șirurilor de tip din cele teste nu depășește ;
- Suma lungimilor șirurilor de tip din cele teste nu depășește .
# | Punctaj | Restricții |
---|---|---|
1 | 20 | |
2 | 15 | , șirurile de tip din fiecare test au literele sortate crescător/alfabetic. |
3 | 25 | , șirurile de tip din fiecare test pot fi transformate în șirul corespunzător de tip aplicând doar operații de tip . |
4 | 40 |
Exemplul 1
opsir.in
1
3
2 4
cc
cbbd
3 2
aab
aa
2 2
ac
da
opsir.out
3
b T
c S
d T
2
a T
b S
3
a T
c S
d T
Explicație
Sunt litere distincte conform cerinței: litera b
apare de mai multe ori în , c
apare de mai multe ori în , iar d
apare doar în .
Exemplul 2
opsir.in
2
1
2 2
zx
zx
opsir.out
DA
Explicație
Șirurile sunt egale fără a fi necesară aplicarea vreunei operații.
Exemplul 3
opsir.in
2
2
2 3
ab
bca
4 4
bacc
cbac
opsir.out
DA
NU
Explicație
Pentru primul test putem sorta întregul șir , obținând "" Putem șterge apoi a treia literă, obținând un șir egal cu .
Pentru al doilea test, dacă aplicăm o operație de tip pentru subsecvența formată din primele litere, obținem "". Având în vedere că primele litere devin colorate în urma sortării (fapt reprezentat prin subliniere în acest caz), nu mai putem aplica o operație de tip pentru subsecvența "". Prin urmare, nu putem transforma șirul într-un șir egal cu .