osaka pod godzillou príklad prvého kola zimnej časti 26. ročníka ksp

22
Osaka pod Godzillou Osaka pod Godzillou Príklad prvého kola Príklad prvého kola zimnej časti 26. zimnej časti 26. ročníka KSP ročníka KSP Lu Lu káš Miňo káš Miňo 3Ib 3Ib [email protected] [email protected]

Upload: ifeoma-young

Post on 03-Jan-2016

38 views

Category:

Documents


7 download

DESCRIPTION

Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP. Lu káš Miňo 3Ib [email protected]. Osaka pod Godzillou. Príklad prvého kola zimnej časti 26. ročníka KSP 20 bodov, kategória O V Osake postavili nový rad mrakodrapov. - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Osaka pod GodzillouOsaka pod Godzillou

Príklad prvého kola Príklad prvého kola zimnej časti 26. ročníka zimnej časti 26. ročníka KSP KSP LuLukáš Miňokáš Miňo

3Ib3Ib

[email protected]@gmail.com

Page 2: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Osaka pod GodzillouOsaka pod Godzillou

Príklad prvého kola zimnej časti 26. ročníka KSPPríklad prvého kola zimnej časti 26. ročníka KSP 20 bodov, kategória O20 bodov, kategória O V Osake postavili nový rad mrakodrapov. V Osake postavili nový rad mrakodrapov. Keď sa o tom dozvedela Godzilla, tak si povedala, že je ten pravý Keď sa o tom dozvedela Godzilla, tak si povedala, že je ten pravý

čas na ich označkovanie (To znamená zanechanie odtlačku nohy čas na ich označkovanie (To znamená zanechanie odtlačku nohy na streche). na streche).

Tak vyliezla na ten najľavejší a rozhliadla sa. Tak vyliezla na ten najľavejší a rozhliadla sa. Zistila, že nemôže označkovať všetky, lebo vie skákať len na nižšie Zistila, že nemôže označkovať všetky, lebo vie skákať len na nižšie

mrakodrapy. mrakodrapy. Zato sa vie rozbehnúť a preto vie skočiť ľubovoľne ďaleko (Jedine, Zato sa vie rozbehnúť a preto vie skočiť ľubovoľne ďaleko (Jedine,

že by cestou stretla vyšší mrakodrap a narazila do neho). že by cestou stretla vyšší mrakodrap a narazila do neho). Avšak Godzilla po boji s Mechagodzillou je unavená a preto keď sa Avšak Godzilla po boji s Mechagodzillou je unavená a preto keď sa

raz rozbehne, tak už nesmie zastať (presnejšie, ak zastane, tak sa raz rozbehne, tak už nesmie zastať (presnejšie, ak zastane, tak sa nerozbehne znova). nerozbehne znova).

Pomôžte Godzille zistiť, koľko najviac mrakodrapov vie označkovať. Pomôžte Godzille zistiť, koľko najviac mrakodrapov vie označkovať.

Page 3: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

ÚlohaÚloha

V prvom riadku je N, čo je počet mrakodrapov. V prvom riadku je N, čo je počet mrakodrapov. V druhom riadku je N čísielV druhom riadku je N čísiel v[1], v[2], … v[N] v[1], v[2], … v[N], ktoré , ktoré

označujú výšky jednotlivých mrakodrapov. označujú výšky jednotlivých mrakodrapov. Godzilla stojí na mrakodrape 1. Godzilla stojí na mrakodrape 1. Godzila vie skočiť z mrakodrapu i na mrakodrap j práve Godzila vie skočiť z mrakodrapu i na mrakodrap j práve

vtedy, ak platia nasledovné podmienky: vtedy, ak platia nasledovné podmienky: 1.1. i < j i < j --- nemôže skočiť na predchádzajúci mrakodrap. - nemôže skočiť na predchádzajúci mrakodrap. 2.2. VV[j] > v[i][j] > v[i] --- nemôže skočiť na vyšší mrakodrap. - nemôže skočiť na vyšší mrakodrap. 3.3. Pre všetky k také, že i < k < j, platí: Pre všetky k také, že i < k < j, platí: v[k]<=v[i] -v[k]<=v[i] -- počas - počas

skoku nemôže ,,preletieť'' cez nejaký vyšší mrakodrap. skoku nemôže ,,preletieť'' cez nejaký vyšší mrakodrap. Vašou úlohou je napísať program, ktorý zo zadaných Vašou úlohou je napísať program, ktorý zo zadaných

údajov zistí, koľko najviac skokov môže Godzilla údajov zistí, koľko najviac skokov môže Godzilla spraviť. spraviť.

Page 4: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

PríkladPríklad

VstupVstup N = 10N = 10

10 9 8 7 8 9 6 4 2 9 10 9 8 7 8 9 6 4 2 9

VýstupVýstup 5 5

Poznámka:Poznámka: Najskôr skočí na mrakodrap 2 potom na Najskôr skočí na mrakodrap 2 potom na

mrakodrap 6, 7, 8 a 9 a teda bude vo výškach 10 mrakodrap 6, 7, 8 a 9 a teda bude vo výškach 10 9 9 6 4 2 . 9 9 6 4 2 .

Page 5: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

1. 1. MožnosťMožnosť

Vyskúšať všetky možnostiVyskúšať všetky možnosti

Vstup:Vstup: 10 9 8 7 8 9 6 4 2 910 9 8 7 8 9 6 4 2 9

Možnosti:Možnosti: 10 (ok), 10 9 (ok), 10 8 (ok), 10 7 (ok), 10 8 (ok), 10 (ok), 10 9 (ok), 10 8 (ok), 10 7 (ok), 10 8 (ok),

10 9 (ok), 10 6 (ok), 10 4 (ok), 10 2 (ok), 10 9 10 9 (ok), 10 6 (ok), 10 4 (ok), 10 2 (ok), 10 9 (ok), 10 9 8 (ok), …, 10 8 7 (ok), …, 10 9 8 7 8 (ok), 10 9 8 (ok), …, 10 8 7 (ok), …, 10 9 8 7 8 (zle), ..., (zle), ..., 10 9 8 7 8 9 6 4 2 9 (zle)10 9 8 7 8 9 6 4 2 9 (zle)..

Page 6: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

AlternatAlternatívaíva

Previesť úlohu na grafPreviesť úlohu na graf

10

98 7

9 24

8

6

9

Page 7: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Problém?Problém?

Existuje cyklus?Existuje cyklus?

Nie, lebo godzila skáče od najľavejšieho okraja Nie, lebo godzila skáče od najľavejšieho okraja smerom dopravasmerom doprava

Page 8: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

2. možnosť2. možnosť Prehľadávanie do šírkyPrehľadávanie do šírky

10

9

7

8

9

6

4

2

9

88

7

7

9

8

Page 9: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

3. mo3. možnosťžnosť

BacktrackBacktrack Vstup - Vstup - 10 9 8 7 8 9 6 4 2 9 10 9 8 7 8 9 6 4 2 9

10

98

6

98

7

4

24

2

… 2

Page 10: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

4. 4. možnosťmožnosť

Topologicky utriediť a použiť dynamické Topologicky utriediť a použiť dynamické programovanieprogramovanie

Vstup - Vstup - 10 9 8 7 8 9 6 4 2 910 9 8 7 8 9 6 4 2 9

9 8 7 4 5 3 10 6 2 1 (indexy)9 8 7 4 5 3 10 6 2 1 (indexy) 2 4 6 7 8 8 9 9 9 10 (v2 4 6 7 8 8 9 9 9 10 (výšky budov)ýšky budov) 0 1 2 3 3 4 0 4 5 6 0 1 2 3 3 4 0 4 5 6 (počet skokov) (počet skokov)

Page 11: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

4. 4. možnosťmožnosť

Pozor na poradie pri triedenPozor na poradie pri triedení budov rovnakých výšok í budov rovnakých výšok (záleží na poradí indexov)(záleží na poradí indexov)

Správne: Správne: 9 8 7 4 5 3 10 6 2 1 (indexy)9 8 7 4 5 3 10 6 2 1 (indexy) 2 4 6 7 8 8 9 9 9 10 (v2 4 6 7 8 8 9 9 9 10 (výšky budov)ýšky budov) 0 1 2 3 3 4 0 4 5 6 0 1 2 3 3 4 0 4 5 6 (počet skokov) (počet skokov) Nespávne:Nespávne: 9 8 7 4 3 5 2 6 10 1 (indexy)9 8 7 4 3 5 2 6 10 1 (indexy) 2 4 6 7 8 8 9 9 9 10 (v2 4 6 7 8 8 9 9 9 10 (výšky budov)ýšky budov) 0 1 2 3 4 3 5 3 0 6 0 1 2 3 4 3 5 3 0 6 (počet skokov) (počet skokov) DDúfam, že vidno rozdiel úfam, že vidno rozdiel !!!!!!!!

Page 12: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Pre ktorPre ktorú možnosť sa ú možnosť sa rozhodnuť?rozhodnuť?

Faktory:Faktory: Z neznámych príčin nie je obmedzený Z neznámych príčin nie je obmedzený

počet vstupov N (pri väčine úloh je počet vstupov N (pri väčine úloh je rozsah N spomenutý) – prečo? Neviemrozsah N spomenutý) – prečo? Neviem

Musíme aj tak preskúmať všetky cestyMusíme aj tak preskúmať všetky cesty

Najideálnejší algoritmus: BacktrackNajideálnejší algoritmus: Backtrack

Page 13: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Ako implementovať Ako implementovať backtrack?backtrack?

Popis myšlienky:Popis myšlienky: Pokúšame sa prejsť z najľavejšej budovy na Pokúšame sa prejsť z najľavejšej budovy na

najpravejšiunajpravejšiu Cestou zisťujeme, či sa dá na danú budovu skočiťCestou zisťujeme, či sa dá na danú budovu skočiť Ak áno, tak skočíme a pokračujeme predchádzajúcim Ak áno, tak skočíme a pokračujeme predchádzajúcim

krokomkrokom Ak nie, tak sa vrátime o budovu späť a na túto už Ak nie, tak sa vrátime o budovu späť a na túto už

neskáčeme. Skočíme na inúneskáčeme. Skočíme na inú Cestou si zapamätáme počet skokov a maximálny Cestou si zapamätáme počet skokov a maximálny

skokskok Nakoniec vypíšeme maximálny skokNakoniec vypíšeme maximálny skok

Page 14: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Čo si pamätať?Čo si pamätať?

Výšky budovVýšky budov Počet skokov na každú budovu (aby sme Počet skokov na každú budovu (aby sme

sa vedeli vrátiť späť)sa vedeli vrátiť späť) Maximálny skokMaximálny skok Pozíciu i-tej budovyPozíciu i-tej budovy Počet budovPočet budov

Page 15: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Popis algoritmuPopis algoritmu

1.1. Pokial i-ta budova Pokial i-ta budova < po< počet budov rob:čet budov rob:2.2. Ak výška ďalšej budovy Ak výška ďalšej budovy <=<= výška i-tej budovy, výška i-tej budovy,

tak skoč na ďalšiu budovu a zvýš počet tak skoč na ďalšiu budovu a zvýš počet skokov o 1skokov o 1

3.3. Inak zruš danú budovu, zníž počet budov o 1 Inak zruš danú budovu, zníž počet budov o 1 a vráť sa na predchádzajúcu budovua vráť sa na predchádzajúcu budovu

4.4. Ak je počet skokov Ak je počet skokov > > počet maximálnych počet maximálnych skokov, tak maxímalny počet je tento počet skokov, tak maxímalny počet je tento počet skokovskokov

5.5. Vráť sa na krok 1Vráť sa na krok 1

Page 16: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Ukážka algoritmu v C++Ukážka algoritmu v C++

while(i<pocetBudov){while(i<pocetBudov){ if(v[i]>=v[i+1]){if(v[i]>=v[i+1]){ i++;i++; skoky[i]=skoky[i-1]+1;skoky[i]=skoky[i-1]+1; }else{}else{ skoky[i]=0;skoky[i]=0; for(int j=i;j<pocetBudov;j++) v[j]=v[j+1];for(int j=i;j<pocetBudov;j++) v[j]=v[j+1]; i--;i--; pocetBudov--; pocetBudov--; } } if(skoky[i]>maximum) maximum=skoky[i];if(skoky[i]>maximum) maximum=skoky[i]; }}

Page 17: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

TestTest

Page 18: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Odhad časovej zložitostiOdhad časovej zložitosti

while(i<pocetBudov){while(i<pocetBudov){ if(v[i]>=v[i+1]){if(v[i]>=v[i+1]){ i++;i++; skoky[i]=skoky[i-1]+1;skoky[i]=skoky[i-1]+1; }else{}else{ skoky[i]=0;skoky[i]=0; for(int j=i;j<pocetBudov;j++){for(int j=i;j<pocetBudov;j++){ v[j]=v[j+1];v[j]=v[j+1]; }} i--;i--; pocetBudov--; pocetBudov--; } }

}}

O(N*N) = O(N^2)

Page 19: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Odhad pamäťovej Odhad pamäťovej zložitostizložitosti

Pole výšok budov (integer)Pole výšok budov (integer) Pole skokov budov (integer)Pole skokov budov (integer)

Page 20: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

ZdrojZdroj

http://www.ksp.sk/ksp2.0/wiki/Zadania/26http://www.ksp.sk/ksp2.0/wiki/Zadania/26-1z-1z

Page 21: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP

Ďakujem za pozornosťĎakujem za pozornosť

Page 22: Osaka pod Godzillou Príklad prvého kola zimnej časti 26. ročníka KSP