Opsir

Time limit: 0.5s Memory limit: 128MB Input: opsir.in Output: opsir.out

Se consideră o pereche de șiruri de caractere, SS și TT, de lungime nn, respectiv mm, formate exclusiv din litere mici ale alfabetului englez. Pozițiile literelor sunt numerotate în șir începând de la 11.

Sunt două tipuri de operații ce se pot efectua asupra șirului TT:

  • 1 p1 \ p : se șterge litera de pe poziția pp;
  • 2 st dr2 \ st \ dr (cu stdrst \leq dr) : se sortează crescător (alfabetic) literele din subsecvența ce corespunde intervalului de poziții [st,dr][st, dr];

unde pp, stst și drdr sunt poziții ale unor litere din șirul TT.

Inițial, toate literele șirului TT sunt necolorate. O operație de tip 22 poate fi realizată doar dacă toate literele din subsecvența corespunzătoare intervalului de poziții [st,dr][st, dr] sunt necolorate. După efectuarea sortării, toate literele din această subsecvență devin colorate.

Cerință

Pentru fiecare dintre perechile de șiruri de tipul SS și TT date:

  • Să se afișeze literele distincte care apar în cel puțin unul dintre șiruri și, pentru fiecare dintre acestea, simbolul șirului (literele SS sau TT) în care apare de mai multe ori. În caz de egalitate, se alege șirul TT.
  • Să se determine o succesiune de operații de tipul 11 și/sau 22 ce pot fi aplicate șirului TT, care să îl transforme într-un șir egal cu SS. Să se afișeze DA în cazul în care există o astfel de succesiune de operații, sau NU în caz contrar.

Date de intrare

Fișierul de intrare opsir.in conține pe prima linie numărul natural cc, reprezentând cerința care trebuie rezolvată (11 sau 22) pentru fiecare dintre perechile de șiruri date.

Pe a doua linie a fișierului se găsește numărul natural kk, 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 nn și mm, în această ordine, cu semnificația din enunț, pe a doua linie șirul SS, iar pe a treia linie șirul TT.

Date de ieșire

Pentru c=1c = 1, fișierul de ieșire opsir.out va conține, pentru fiecare test, câte un număr natural nrnr, ce reprezintă numărul de litere distincte ce apar în cel puțin unul dintre șiruri, iar pe următoarele nrnr linii, câte o astfel de litera, precum și litera mare SS sau TT, corespunzătoare șirului în care apare de mai multe ori. Literele mici vor fi afișate în ordine alfabetică.

Pentru c=2c = 2, fișierul de ieșire opsir.out va conține kk 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

  • 1k1001 \leq k \leq 100;
  • 1n,m200 0001 \leq n, m \leq 200 \ 000;
  • Pentru c=2c = 2, nmn \leq m;
  • Suma lungimilor șirurilor de tip SS din cele kk teste nu depășește 200 000200 \ 000;
  • Suma lungimilor șirurilor de tip TT din cele kk teste nu depășește 200 000200 \ 000.
# Punctaj Restricții
1 20 c=1c = 1
2 15 c=2c = 2, șirurile de tip SS din fiecare test au literele sortate crescător/alfabetic.
3 25 c=2c = 2, șirurile de tip TT din fiecare test pot fi transformate în șirul corespunzător de tip SS aplicând doar operații de tip 11.
4 40 c=2c = 2

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 33 litere distincte conform cerinței: litera b apare de mai multe ori în TT, c apare de mai multe ori în SS, iar d apare doar în TT.

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 TT, obținând "abc\texttt{\underline{abc}}" Putem șterge apoi a treia literă, obținând un șir egal cu SS.

Pentru al doilea test, dacă aplicăm o operație de tip 22 pentru subsecvența formată din primele 22 litere, obținem "bcac\texttt{\underline{bc}ac}". Având în vedere că primele 22 litere devin colorate în urma sortării (fapt reprezentat prin subliniere în acest caz), nu mai putem aplica o operație de tip 22 pentru subsecvența "ca\texttt{\underline{c}a}". Prin urmare, nu putem transforma șirul TT într-un șir egal cu SS.

Log in or sign up to be able to send submissions!