Otázky

a odpovědi

Otázky a odpovědi

Na této stránce jsme sepsali odpovědi na nejčastější otázky ohledně soutěže. Měly by ti napovědět, jakým způsobem úlohy řešit, aby to bylo pohodlné a neznamenalo to pro tebe zbytečně hodně práce.

Umím programovat jen trochu a nemám žádné zkušenosti s programátorskými soutěžemi. Vadí to?

Nevadí! Pro každou úlohu stačí napsat jen jeden krátký program do jednoho souboru. Ten přečte vstup, provede nějaký výpočet a vypíše výstup. Podrobnější popis najdeš na stránce Jak se řeší úloha?.

Co všechno bych ve svém programovacím jazyce měl umět?

Jen naprosté základy. Pokud umíš používat alespoň podmínky, cykly a pole, tak máš určitě dostatek znalostí pro vyřešení alespoň poloviny úloh. Co můžeš čekat ve které úloze se dozvíš na stránce Co čekat od úloh?.

Jako zadání dostanu soubor a odevzdat musím taky soubor. Musím ve svém jazyce umět pracovat se soubory?

Překvapivě ani to není nutné. Ve většině programovacích jazyků je možné číst jeden soubor, jako kdyby byl na vstup zadaný z klávesnice, a také se do jiného souboru dají vypisovat všechny výstupy. Chceš vědět, jak se to dělá? Přečti si náš krátký návod o Vstupu a výstupu.

Které úlohy mám řešit jako první?

Úlohy jsme seřadili podle toho, jak se nám zdají náročné. Na stránce Co čekat od úloh? najdeš přehled, co od které úlohy můžeš čekat. Určitě začni těmi nejjednoduššími a pokračuj ke složitějším. Každá úloha má navíc dvě sady vstupů: lehčí (malou) a těžší (velkou). Pro lehčí obvykle stačí vymyslet jakýkoliv postup, který spočítá správný výsledek, a pro tu těžší už je často třeba si dávat pozor, aby výpočet nebyl příliš pomalý.

V jednom vstupním souboru mám řešit více vstupů. Jak?

Obvykle je nejlepší mít napsané dvě funkce. První umí načíst a vyřešit jeden vstup. Druhá z prvního řádku načte kolikrát má zavolat první funkci, a pak ji tolikrát zavolá.

Mám dva nápady na řešení. Který mám zkusit naprogramovat?

Určitě ten, o kterém víš jistěji, že bude fungovat. Pokud jím úspěšně vyřešíš aspoň lehčí sadu vstupů, tak pak můžeš zkontrolovat, jestli se odpovědi shodují s tvým dalším řešením.

Jak poznám, jestli je můj program dost efektivní?

Čím méně výpočtů provede, tím je efektivnější. Asi nejjednodušší je zamyslet se, jak program běží a kolik řádově řádků programu během toho vykoná (včetně opakování všech cyklů). Pro lepší představu přidáváme krátký návod o Složitosti.

Určitě to mám správně, ale stále se mi to nedaří úspěšně odevzdat. Proč?

Protože je to rozbitý! Určitě pečlivě zkontroluj, zda přesně dodržuješ formát výstupu, že velikosti čísel nepřekračují omezení datových typů, které používáš, že mezi jednotlivými vstupy poctivě nuluješ všechna používaná pole a proměnné, že všechna pole jsou dostatečně velká a že odesíláš řešení správné úlohy. Pokud nic z toho nepomůže, tak nám napiš a my ověříme, zda se nejedná o nějakou drobnost či zda nevznikla chyba na naší straně.

Jsem znuděn stálým refreshováním stránky, nemáte něco lepšího?

My ne, ale Sorashi naprogramoval něco, co by se ti mohlo líbit. Najdeš to tady. Je to .NET scraper, který ti ušetří trochu času.

Rád bych se dozvěděl více o algoritmech, víte o nějakém zdroji?

Kromě našich tipů o Grafech či Dynamickém programování doporučujeme třeba kuchařky KSP.

Máš na to!

I ty můžeš vyhrát! Nebo to aspoň zkusit :)