Raamatuid ja muid materjale:
- Tennisberg, T., Gabrel, K. (2017, 2018) Võistlusprogrammeerimine (Lehel olevad lingid ülesannetele on TK kursuse vmt osa ja ei puutu otseselt meisse).
- Laaksonen, A. (2018) Competitive Programmer's Handbook
- Halim, S., Halim, F., Effendy, S. (2020) Competitive programming 4 ja selle varasemad versioonid (ei ole tasuta kättesaadav)
- CP-Algorithms
Kursusel toetume esimesele raamatule, ülejäänu on toodud laiemaks kontekstiks.
Praktikumide materjalid
- Praktikum 1: VP peatükk, koodinäited. Arvestuse saamiseks tuleks ära lahendada 3 tavaülesannet (ABCDE seast) või 2 lisaülesannet (XYZ seast) 15.03 õhtuks.
- Praktikum 2: VP peatükk, koodinäited. Arvestuse saamiseks tuleks lahendada 3 tavaülesannet (ABCD seast) või 2 lisaülesannet (XYZ seast) 22.03 õhtuks.
- Praktikum 3: VP peatükk, alates lk. 25, koodinäited. Arvestuse saamiseks tuleks lahendada 3 tavaülesannet (ABCD seast) või 1 lisaülesanne (XY seast) 05.04 õhtuks.
- Praktikum 4: VP peatükk, punktid 8.1 ja 8.2; kui aega jääb, siis ka 8.3, koodinäited. Arvestuse saamiseks tuleks lahendada 2 tavaülesannet (ABC seast) või 1 lisaülesanne (XY seast) 19.04 õhtuks.
- Praktikum 5: CPH peatükk 15. Arvestuse saamiseks tuleks lahendada 2 tavaülesannet (ABC seast) või 1 lisaülesanne (XY) seast 03.05 õhtuks.
- Praktikum 6: modint class ja tahvlijoonistused. Arvestuse saamiseks tuleks lahendada 3 ülesannet 17.05 õhtuks.
- Praktikum 7: VP peatükk, punktid 11.4.1 ja 11.6, koodinäited. Arvestuse saamiseks tuleks lahendada mõlemad tavaülesanded (AB) või lisaülesanne (X) 31.05 õhtuks.
- Praktikum 8: VP peatükk, koodinäited. Arvestuse saamiseks tuleks lahendada üks ülesannetest A ja B 07.06 õhtuks.
Mõned praktilised nõuanded programmeerimiskeelte osas
- Võistlusprogrammerimise industry standard on C++: selles kirjutatud programmid on kiired ja samas on C++ standardteek piisavalt suur. Kõikvõimalikud näited on samuti kõige suurema tõenäosusega C++-s. Kursusel on võimalik ja lubatud kasutada ka kõiki teisi programmeerimiskeeli, mida Codeforces kasutada võimaldab.
- Kursuse praktikumides ja harjutusvõistlustes on teatud keeltel pikem ajalimiit, mis peaks nendes keeltes võistlemise "ausamaks" tegema. Näiteks kui ülesande ajalimiit on 1 sekund, siis Java programmil rakendatakse ajalimiiti 1.5 sekundit ja Haskelli programmil 3 sekundit. Samas tuleb arvestada, et "päris" võistlustel sellist varianti üldiselt ei ole ja näiteks Pythoni kasutajad on tavaliselt ebaeelisseisus.
- Pythonis kirjutades on PyPy interpretaator sageli kiirem.
- Kui te kasutate C++ koodis sisendi-väljundi jaoks
cin
jacout
ningprintf
jascanf
ei kasuta, siis võib olla mõistlik panna programmi algusesseios::sync_with_stdio(false)
. See võtabcin
-cout
ningprintf
-scanf
omavahel sünkroonist välja, mis teeb sisendi-väljundi kiiremaks (samas ei tohi siisprintf
egascanf
kasutada, vastasel juhul võib väljund ekraanile ilmuda ebaloogilises järjekorras). - C++ (võistlusprogrammeerimise) koodis ei tasu reavahetuse jaoks kasutada võtmesõna
endl
. See tühjendab peale reavahetuse trükkimise iga kord väljundipuhvri. Kui seda teha palju kordi, teeb see väljundi trükkimise aeglaseks.