Autorské riešenie
Pri riešení tejto úlohy nám pomôže rozbor konkrétneho prípadu a jeho grafické zobrazenie. Uvažujme konkrétny prípad 4 návštevníkov, ktorých príchody a odchody sú zaznamenané v zozname [1, 9, 3, 6, 4, 8, 7, 9]. Túto situáciu vieme reprezentovať graficky pomocou úsečiek a číselnej osi. Pri riešení úlohy nám stačí preskúmať príchody a odchody všetkých návštevníkov. Pri príchode každého účastníka zvýšime počet návštevníkov o 1 a pri jeho odchode znížime počet návštevníkov o 1. V priebehu výpočtu zisťujeme či aktuálny počet návštevníkov prekročil maximálnu hodnotu. Tento konkrétny prípad využijeme pri nasledovnom všeobecnom riešení. Do jedného pomocného zoznamu si uložíme príchody a do druhého odchody návštevníkov. Po usporadaní týchto zoznamov prechádzame oboma zoznamami, a to tak, že ak hodnota daného príchodu je menšia ako hodnota odchodu, tak zvýšime o 1 počet návštevníkov a posunieme sa v zozname príchodoch o 1 miesto ďalej. V opačnom prípade znížime o 1 počet návštevníkov a posunieme sa v zozname odchodov o 1 miesto. Výsledné riešenie úlohy zapísané v programovacom jazyku Python môže vyzerať nasledovne def max_navstevnost(zaznamy):
''' Vráti maximálnu dennú návštevnosť kempu ''' prichody = zaznamy[::2] odchody = zaznamy[1::2] prichody.sort() odchody.sort() pocet = 0 maxpocet = 0 idx_prichod = 0 idx_odchod = 0 while idx_prichod < len(prichody) and idx_odchod < len(odchody): if prichody[idx_prichod] < odchody[idx_odchod]: idx_prichod = idx_prichod + 1 pocet = pocet + 1 else: idx_odchod = idx_odchod + 1 pocet = pocet - 1 if pocet > maxpocet: maxpocet = pocet return maxpocet Táto úloha je zameraná na:
Vaše zaujímavé riešenia a najčastejšie chyby Do riešenia tejto úlohy sa zapojilo 11 tímov z kategórie EXPERT a 17 tímov kategórie GURU. Plný počet bodov dosiahol len tím seesharp guru, ktorému gratulujeme. Súťažiaci pri riešení použili rôzne typy vstupov:
Zopár súťažiacich okrem vypočítania maximálnej dennej návštevnosti bonusovo uviedla aj zoznam dní, v ktorých bola táto návštevnosť dosiahnutá. Štyria súťažiaci použili pri výpočte dátový typ slovník (angl. dictionary). V riešeniach sme zaregistrovali nasledovné nedostatky, vychádzajúce najčastejšie z nedôslednej analýzy problému, tvorby menej efektívneho riešenia či z pretrvávajúcich programátorských zlozvykov:
|
|||||||||
© Univerzita Pavla Jozefa Šafárika v Košiciach, Prírodovedecká fakulta, Ústav informatiky palmaj (zavinac) upjs.sk |