Zadanie
Táto úloha je programátorská. Ako svoje riešenie odovzdaj program vo svojom obľúbenom jazyku a automaticky sa dozvieš koľko si dostal/a bodov. Ak si takýto typ úloh ešte nikdy neriešil/a skús sa pozrieť ako by mal vyzerať ideálny program. Ak zaťiaľ programovať nevieš, ale chcel/a by si vedieť možeš skúsiť náš python tutoriál.
Ak máte akékoľvek otázky ohľadom tejto úlohy, napíšte Kodikovi na [email protected]
Jednej noci o polnoci mladí vedúci idú spať,
v tú chvíľu Adam zo svojej skrýše vylieza a šepká: “Budeme sa
hrať.”
Odbyla polnoc,
dúfam, že nie ste unavení,
vyskočím na chodbu,
tak berte nohy na ramená.
Nato Dávid chytá nervy,
stojí na chodbe, sleduje Adama.
Adam v strachu nahlas skríkne : “Čo horšieho sa mi môže stať?”
Kubo z druhej strany vraví :“Dohral si sa kamarát.”
Adam sa klepe a kričí :“No tak musím ujsť!”
Dávid aj Kubo sa rozbehnú a idú ho chytiť.
Úloha
Máme \(n\) metrov chodby. Na každom
metre chodby je buď Adam, Dávid alebo Kubo (z každého môže byť viac).
Každý Dávid má práve jedného Kuba s ktorým chytá. Navyše platí, že keď
si tieto dvojice predstavíme ako dvojice zátvoriek kde Dávid je
(
a Kubo je )
, tvoria správne uzátvorkovanú
postupnosť na chodbe1. Keď sa Dávid stretne s Kubom tak to
obja vzdajú a idú spať, lebo im Adam ušiel. Dávid by chcel zistiť, koľko
Adamov nedokážu chytiť, teda koľko je takých Adamov, ktorí sa
nenachádzajú medzi žiadnou dvojicou Dávida a Kuba ktorí spolu
chytajú.
Formát vstupu
Na prvom riadku je celé číslo \(n\)
(\(1 \leq n \leq 1\,000\,000\))
udávajúce dĺžku chodby v metroch.
Na ďalšom riadku sa nachádza reťazec písmen “A”, “D”, a “K” dlhý \(n\) znakov – zápis chodby, kto kde
stojí.
Formát výstupu
Na výstup vypíšte jedno celé číslo - počet Adamov, ktorých nechytia.
Hodnotenie a obmedzenia
Existujú 2 sady vstupov. Platia v nich nasledovné obmedzenia:
Sada | 1. | 2. |
---|---|---|
\(1 \leq n \leq\) | \(100\) | \(1\,000\,000\) |
Body | 30 | 70 |
Príklady
Input:
9
DKDDDAKKK
Output:
0
Input:
10
DAAKADKAAA
Output:
4
Prví dvaja Adamovia sú obklúčení, ostatní nie su obklúčení.
Adam je chytený len ak sa nachádza medzi Dávidom a Kubom, to si vieme v tiež pomerne ľahko odsimulovať. Ak si chceme pamätať či existuje nejaký Davíd ktorý sa zatiaľ s Kubom nezrazil a teda on by mohol Adama chytiť, tak si ho vieme ukladať do zásobníku. Pokiaľ narazíme na Adama a náš zásobník má veľkosť(nie je prázdny) tak vieme že by ho niektorý Dávid by ho vedel chytiť, ak narazíme na Adama tak sa s Dávidom zrazí a môžme ho odstrániť(Dávida) zo zásobníku. Teda iba by sme vždy keď narazíme na Adama pripočítali +1 do výsledku. Niektoré bystré hlavy si mohli všimúť, že nám vlastne nezáleží čo je v zásobníku ale iba koľko a teda vieme ho nahradiť premennou kam iba pripočítavame a odpočítavame. Naše riešenie má časovú zložitosť O(n), pamäťovú zložitosť O(n). Pokiaľ by sme načítavali vstup po charakteroch tak dostaneme pamäťovú zložitosť O(1).
Diskusia
Tu môžte voľne diskutovať o riešení, deliť sa o svoje kusy kódu a podobne.
Pre pridávanie komentárov sa musíš prihlásiť.