armonioase

Time limit: 3s Memory limit: 128MB Input: armonioase.in Output: armonioase.out

Gigel este un împătimit al jocurilor și petrece ore întregi tastând pentru a-și învinge adversarii virtuali. Într-o zi, el a descoperit că tastatura lui a început să se comporte ciudat pentru două din tastele utilizate intens pentru jocurile sale: tasta w și tasta m. Mai exact, Gigel a observat că atunci când dorește să scrie un mesaj și apasă tasta w uneori în mesaj este inclusă litera w, dar alteori, pentru o singură apăsare a tastei w, este inclusă secvența vv. În mod similar, când încearcă să utilizeze tasta m: la o apăsare a tastei m uneori îi apare m în mesaj, dar alteori apare secvența nn. Orice altă tastă funcționează corect. Spre exemplu, atunci când tastează cuvântul warm el poate obține unul din următoarele cuvinte: warm – dacă totul funcționează corect; vvarm – dacă pentru tasta w apare vv; warnn – dacă pentru tasta m apare nn; vvarnn – dacă pentru tasta w apare vv și pentru tasta m apare nn.

Gigel a descoperit un joc pentru care trebuie să tasteze șiruri armonioase. Un șir este considerat armonios dacă conține cel puțin o literă m și numărul de litere w din șir divide numărul de litere m care apar în acel șir. Spre exemplu, șirul mawnmvwbdmem este considerat armonios, deoarece conține 22 apariții pentru w și 44 apariții pentru m, dar șirurile awnmvwbdmem, mawnmvwbdme sau wawnmvwbdmwe nu sunt armonioase.

Definim următoarele două operații care se pot aplica unui șir de caractere:

  1. dacă în șir identificăm două litere consecutive vv le înlocuim cu litera w;
  2. dacă în șir identificăm două litere consecutive nn le înlocuim cu litera m.

De exemplu, aplicând operațiile de mai sus șirul vvarnnn poate fi transformat în: warnnn, warmn, warnm, vvarmn, vvarnm.

Cerințe

Dat fiind un șir format din litere mici ale alfabetului englez, scrieți un program care să rezolve următoarele cerințe:

  1. pentru o succesiune de NN valori date K1,K2,,KNK_1, K_2, \ldots, K_N, să se determine pentru fiecare valoare KiK_i (1iN)(1 \leq i \leq N) dacă, prin aplicarea a 00, 11 sau mai multe operații descrise în enunț, se poate transforma șirul dat într-un șir armonios care să conțină exact KiK_i apariții pentru m;
  2. să se determine numărul de perechi distincte de forma (val1,val2)(val_1, val_2) cu proprietatea că, prin aplicarea a 00, 11 sau mai multe operații din enunț, putem transforma șirul dat într-un șir armonios care să conțină exact val1val_1 apariții pentru w și val2val_2 apariții pentru m;
  3. să se determine lungimea maximă a unei secvențe armonioase din șirul dat, fără aplicarea niciunei operații; o secvență este formată din litere situate pe poziții consecutive în șir.

Date de intrare

Fișierul de intrare armonioase.in conține pe prima linie numărul natural CC reprezentând cerința care trebuie rezolvată (11, 22 sau 33). Pe a doua linie se află un șir format din litere mici ale alfabetului englez. Dacă C=1C = 1, pe a treia linie se află numărul natural NN, iar pe următoarele NN linii sunt scrise valorile K1,K2,,KNK_1, K_2, \ldots, K_N, câte o valoare pe o linie.

Date de ieșire

Fișierul de ieșire armonioase.out conține:

  • dacă C=1C = 1: NN linii; pe linia ii (1iN)(1 \leq i \leq N) este scris mesajul DA dacă, prin aplicarea a 00, 11 sau mai multe operații din enunț, se poate transforma șirul dat într-un șir armonios care să conțină exact KiK_i apariții pentru m, respectiv mesajul NU în caz contrar.
  • dacă C=2C = 2 sau 33: o singură linie pe care este scris un număr natural reprezentând răspunsul la cerința CC.

Restricții și precizări

  • lungimea șirului dat 2lg200 0002 \leq lg \leq 200 \ 000;
  • 2N10 0002 \leq N \leq 10 \ 000;
  • 1Ki<lg1 \leq K_i < lg, pentru orice 1iN1 \leq i \leq N;
  • Se garantează că în șirul dat există cel puțin o literă w și o literă m.
# Punctaj Restricții
1 20 C=1C = 1
2 15 C=2C = 2
3 12 C=3C = 3, 2lg2002 \leq lg \leq 200
4 10 C=3C = 3, 200<lg200 000200 < lg \leq 200 \ 000, numărul total de litere w și m este 300\leq 300
5 43 C=3C = 3, fără restricții suplimentare

Exemplul 1

armonioase.in

1
annnvvwmmbnnwmavmwv
2
5
6

armonioase.out

NU
DA

Explicație

C=1C = 1. Șirul conține 44 litere m și 33 litere w.

Nu putem obține un șir armonios cu K1=5K_1 = 5 apariții ale literei m, deoarece 55 are exact 22 divizori (11 și 55), deci ar trebui să avem fie 11, fie 55 litere w. Fiindcă există deja 33 litere w și doar o pereche vv care ar putea fi transformată într-un w, nu putem obține 55 litere w.

Pentru K2=6K_2 = 6 răspunsul este DA, deoarece 33 (numărul de litere w) divide pe 66.

Exemplul 2

armonioase.in

2
vvamnnnvvw

armonioase.out

3

Explicație

C=2C = 2.

Perechile pentru care putem obține un șir armonios sunt: (1,1)(1, 1) (exemplu: vvamnnnvvw), (1,2)(1, 2) (exemplu: vvammnvvw) și (2,2)(2, 2) (exemplu: wammnvvw).

Exemplul 3

armonioase.in

3
avwmmbwmamw

armonioase.out

10

Explicație

C=3C = 3.

Cea mai lungă secvență armonioasă este avwmmbwmam, care conține două apariții ale literei w și 44 apariții ale literei m. Cum 242 \mid 4, secvența este armonioasă. Aceasta are lungimea 1010 și nu există nicio secvență mai lungă care să respecte condiția.

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