Predstavte si typický deň vo firme Kódíme S Prestávkami. Je 10:50 a všetci hladní programátori sa pýtajú jedinú otázku: “Kedy bude obed?”
V tejto firme však nechodia na obed len tak hala-bala. Na veľkej obrazovke v kuchynke svieti dlhý reťazec núl a jednotiek, ktorý určuje čo sa práve deje:
Blok núl: “Obed sa ešte pripravuje.”
Blok jednotiek: “Obed je hotový, môžete ísť.”
Samozrejme, signál musí byť vždy pekne v poradí – najprv všetky nuly, potom všetky jednotky.
No ako to už býva, systém sa občas pokazí. Namiesto pekného prechodu z núl na jednotky sa na obrazovke objaví niečo takéto:
`0101110010`
Výsledkom je panika na chodbe. Máme ísť na obed? Ešte počkať? Máme si objednať pizzu?
Programátori si však vedia poradiť. Predpokladajú, že sa v signáli stalo čo najmenej chýb, a tak sa snažia zistiť, koľko čisel by stačilo zmeniť, aby sa signál opravil a všetci konečne vedeli, čo majú robiť.
Dostanete reťazec tvorený nulami a jednotkami. Zistite, koľko najmenej čísel treba v zadanom reťazci zmeniť tak, aby sa z neho stal signál tvaru: 000…111 Teda aby ste dostali reťazec tvorený súvislým blokom núl a potom súvislým blokom jednotiek, pričom oba súvislé bloky musia mať dĺžku aspoň 1.
Na prvom riadku vstupu je číslo $n$ ($2 \leq n \leq 10^6$) udávajúce dĺžku reťazca. V druhom riadku sa nachádza reťazec tvorený $n$ znakmi len 0 alebo 1.
V jednotlivých sadách platia nasledujúce obmedzenia:
| Sada | 1 | 2 | 3 | 4 |
|---|---|---|---|---|
| $2 \leq n \leq$ | $15$ | $1000$ | $10^5$ | $10^6$ |
Vypíš jeden riadok a v ňom jedno celé číslo udávajúce najmenší počet zmien, ktoré musíme spraviť, aby sme sa dostali do požadovaného stavu.
Input:
7
0101101
Output:
2
Môžeme zameniť nuly na tretej a šiestej pozícii za jednotky, vznikne nám reťazec 0111111. Alebo môžeme zmeniť jednotku na druhej pozícii a nulu na šiestej pozícii. Vtedy vznikne reťazec 0001111.
Input:
5
00000
Output:
1
Reťazec má obsahovať súvislý blok núl aj jednotiek, preto potrebujeme urobiť jednu zmenu - pridať na koniec reťazca jednotku. Vznikne nám tak reťazec 00001.
Korešpondenčný seminár z programovania zastrešuje občianske združenie Trojsten.
Trojsten, o.z.
FMFI UK, Mlynská dolina
842 48 Bratislava
Programátorská súťaž pre základoškolákov
Materiály a úlohy na výučbu programovania
Intenzívny programátorský zážitok v lete