Priprave na računalniške olimpijade (19/20)
Osnutek odseka
-
Priprave na računalniške olimpijade CEOI, BOI in IOI potekajo v prostorih Fakultete za računalništvo in informatiko, Večna pot 113, 1000 Ljubljana, ob ponedeljkih od 16:00 do 19:00 v učilnici P18 (zimski semester) in P21 (letni semester).Vsakim pripravam bo sledilo nekaj domačih nalog, ki prispevajo h končnemu rezultatu. Domače naloge morate implementirati samostojno, zaželeno pa je, da se pogovarjate o težavah in idejah, ki ste jih imeli pri njihov reševanju.Tekom priprav bodo skozi celo leto potekala tudi izbirna tekmovanja, ki bodo upoštevana pri izboru za CEOI. Prvi del predstavljajo tekmovanja COCI (Croatian Open Competition in Informatics), drugi del tekmovanja najtežjih skupin na tekmovanjih FIT in RTK, tretji del pa predstavlja končno izbirno tekmovanje.
Organizatorji priprav so:
- Jure Slak, jure.slak@ijs.si, Institut Jožef Stefan in Fakulteta za matematiko in fiziko
- dr. Tomaž Hočevar, tomaz.hocevar@fri.uni-lj.si, Fakulteta za računalništvo in informatiko
- dr. Janez Brank, janez.brank@ijs.si, Institut Jožef Stefan
- dr. Luka Fürst, luka.fuerst@fri.uni-lj.si, Fakulteta za računalništvo in informatiko
- Vid Kocijan, vid.kocijan@gmail.com, University of Oxford
- Filip Koprivec, filip.koprivec@student.fmf.uni-lj.si, Institut Jožef Štefan in Fakulteta za matematiko in fiziko
- Tim Poštuvan, tim.postuvan@gmail.com, Fakulteta za računalništvo in informatiko in Fakulteta za matematiko in fiziko
Za vprašanja glede organizacije se obrnite na Jureta Slaka, za vprašanja glede sistema za domače naloge in izbirnih tekmovanj na Tomaža Hočevarja, za vprašanja glede snovi pa na tistega, ki je vodil konkretne priprave.
Udeleženci si morajo narediti tudi račun na platformi ministrstva za šolstvo: https://platforma.skoz.si/, se prijaviti na projekt "Priprave na računalniške olimpijade" in po vsakih pripravah oddati en stavek s poročilom.
Za vprašanja je na voljo tudi kanal #priprave na Slack-u za tekmovalno programiranje: https://tekm-prog.slack.com/
-
Če se imate namen udeležiti priprav za olimpijade, se prosim zabeležite na zgornjem obrazcu, da bomo lahko bolje načrtovali priprave.
-
Tekmovalci skozi celotne priprave nabirajo točke za skupno razvrstitev, na podlagi katere bomo predlagali ekipe za mednarodne olimpijade. Točkovanje je sestavljeno iz spodaj naštetih uteženih komponent. Točke, ki se upoštevajo pri posamezni komponenti, so delež maksimalnega možnega števila točk, ki ga tekmovalec lahko doseže.
- domače naloge (10%)
- COCI (20%); štejejo 3 kola z najvišjim doseženim številom točk
- FIT/ZOTKS (20%); najtežja skupina
- RTK (25%); najtežja skupina
- izbirno (25%)
- Jure Slak, jure.slak@ijs.si, Institut Jožef Stefan in Fakulteta za matematiko in fiziko
-
Predavatelj: Jure Slak
Opis:
Literatura:
- IOI syllabus: https://people.ksp.sk/~misof/ioi-syllabus/ioi-syllabus.pdf
- Knjiga (s preveč snovi): Competitve programming 3
Osnovni algoritmi na celih številih:
- delo s števkami
- številski sistemi
- iskanje deliteljev
- testiranje praštevilskosti za eno število
- testiranje praštevilskosi za veliko števil: Eratostenovo rešeto
- razcep veliko števil na prafaktorje s pomočjo Eratostenovega rešeta
- razcept enega števila na prafaktorje, število deliteljev števila
- Evklidov algoritem, največji skupni delitelj, najmanjši skupni večkratnik
- Operacije na bitih: &, |, ^, ~, <<, >>, nastavljanje enega bita, preverjanje ali je i-ti bit prižgan ugasnjen
- Hitro potenciranje in ideja o obravnavi števil po potencah dvojke
-
Predavatelj: Jure Slak
Opis: Osnovne podatkovne strukture: vrsta, sklad, vrsta s prednostjo, povezani seznam, map, set, heap, časovne zahtevnosti operacij
-
Predavatelj: Janez Brank
Opis:
Osnovni algoritmi na seznamih:
- urejanje: [bubble, selection, insertion]-sort, [quick, merge, heap]-sort, [counting, bucket, radix]-sort
- bisekcija
Predprocesiranje seznamov:
- kumulativne vsote: poizvedbe na intervalih, spremembe na intervalih
- korenska dekompozicija (sqrt decomposition, dekompozicija poizvedb)
- redka tabela (sparse table)
- iskanje podniza: hashing (Rabin-Karp), z-funkcija, KMP
-
Predavatelj: Tomaž Hočevar
Opis: polni pregled (brute-force, rekurzija), deli in vladaj, požrešni algoritmi -
Predavatelj: Luka Fuerst
Opis: Dinamično programiranje, najdaljše naraščajoče podzaporedje, problem nahrbtnika
-
Predavatelj: Vid Kocijan
Opis: najdaljše skupno podzaporedje, urejevalna razdalja, dinamično programiranje na drevesih.
-
Predavatelj: Janez Brank
Opis: Osnovni algoritmi na grafih, pregled v širino, pregled v globino, štetje komponent.
-
Predavatelj: Janez Brank
Opis: Najkrajše poti, Dijkstra, Bellman-Ford, Floyd-Warshall.
-
Predavatelj: Tim Poštuvan
Opis: Union-Find, minimalno vpeto drevo, Kruskal, Prim.
-
Festival inovativnih tehnologij (ZOTKS)
https://www.zotks.si/programiranje/novice/računalniško-programiranje
-
Predavatelj: Tim Poštuvan
Opis: binarno iskalno drevo, trie, druge razširjene podatkovne strukture, še posebej segment tree
-
RTK - Tekmovanje ACM iz računalništva in informatike
-
Predavatelj: Vid Kocijan
Opis: Geometrija: ploščine, vektorski produkt, konveksna ovojnica, kompresija koordinat, presečišča, sweep line.
-
Predavatelj: Filip Koprivec
Opis: Topološko urejanje, močno povezane komponente, mostovi in prerezna vozlišča.
-
Predavatelj: Tomaž Hočevar
Opis: Napredno dinamično programiranje: bitmask DP - TSP, Steiner tree, Convex-hull optimization, Divide and conquer optimization.
-
Predavatelj: Tomaž Hočevar
Opis: Fenwick tree, Lowest common ancestor, Bipartite matching, Heavy-light decomposition, Centroid decomposition