Tartalom
1. Bevezető
A középiskolai programozási versenyek egyik nagy csoportja a feladatok hatékony megoldási algoritmusainak készítésére összpontosít. Olyan programot kell írni, ami valamilyen jól meghatározott bemeneti adatokból valamilyen kimeneti adatokat állít elő egy pontos leírásnak megfelelően.
A helyes működés mellett számít az is, hogy a program mennyi idő alatt fut le és mennyi memóriát használ összesen (erre korlátok vannak megadva). A bemenetek általában nagyok, hogy meg tudják különböztetni a hatékony algoritmusokkal dolgozó programokat a kevésbé hatékonyaktól.
Leadni általában csak a forráskódot kell, a tesztelés automatikus (gépi), bizonyos bemenetekre lefuttatják a forráskódból lefordított programunkat, ellenőrzik a kimenet helyességét, illetve mérik a futásidőt és memóriahasználatot.
1.1. Hasznos oldalak
https://www.pbinfo.ro/ - osztályszintű és nehezebb feladatok,
automatikus kiértékelő rendszer (online judge), cikkek és segédanyagokhttps://infoarena.ro/ - versenyfeladatok gyűjteménye, online judge, kicsit inaktív már, értések része az „Arhiva educațională” (versenyekhez szükséges elméleti ismeretek, trükkök leírása), illetve OJI/ONI archívum korábbi évekből a Downloads menüben
https://kilonova.ro/ - átfogó feladatgyűjtemény info olimpiáról és más
versenyekről, online judge, aktívan frissítik
https://sepi.ro/ - a SEPI weboldala, OJI/ONI archívum újabb évekből
https://edu.roalgo.ro/ - a RoAlgo online közösség tananyagai
https://njudge.hu/ - feladatgyűjtemény magyarországi versenyekről, online judge
http://mester.inf.elte.hu/ - az ELTE feladatgyűjteménye, online judge,
kényelmetlenebb használni, mint az njudge-ot, de több a feladat
https://codeforces.com/ - online judge és versenyportál, hetente szerveznek
versenyeket (nincsenek korcsoportok, szabadon jelentkezhet bárki)https://vjudge.net/ - online judge-okat összesítő platform/crawler, hatalmas feladatgyűjtemény
https://cp-algorithms.com/ - elméleti ismeretek programozási versenyekhez, elég magas szintű
1.2. Bibliográfia
- Cătălin Frâncu: Psihologia concursurilor de informatică, 1997 - megtalálható itt
- Thomas H. Cormen, Charles E. Leiserson, Ronald L. Rivest: Introduction to Algorithms, 3rd ed. 2009 - megtalálható a kereskedelemben (vagy Anna’s Archive, LibGen stb.)
- Steven Halim, Felix Halim, Competitive Programming 4, 2020, két kötet - megtalálható a kereskedelemben (vagy Anna’s Archive, LibGen stb.)
2. Versenyek
Amiken általában részt szoktunk venni:
- Olimpiada Națională de Informatică (ONI), illetve ennek megyei szakasza (OJI)
- Concursul Național de Matematică și Informatică „Grigore C. Moisil” (korábban interjudețean volt)
- Zsakó László Nemzetközi Programozási Verseny (korábban Nemes Tihamér volt a neve)
- Kalkulusz Informatika Tantárgyverseny (a marosvásárhelyi Bolyai Farkas Elméleti Líceum multidiszciplináris tantárgyversenyének része)
- Dr. Toró László Talentum verseny (a temesvári Bartók Béla Elméleti Líceum szervezi)
2.1. ONI, OJI
A Tanügyminisztérium és a SEPI (Societatea pentru Excelență și Performanță în Informatică) szervezi. Minden évfolyam külön versenyez, a XI. és XII. osztály azonos tételt kap.
Szakaszai:
- megyei olimpia (OJI) - fizikai jelenléttel Szatmáron
- országos olimpia (ONI) - ide a megyeiről kell továbbjutni, többnapos rendezvény
- olimpiai válogató (Baraj) - ide az országosról kell továbbjutni, ezen és további Lot-nak nevezett versenyeken válogatják ki azt a csapatot, melynek tagjai az országot képviselik majd a nemzetközi versenyeken (IOI, CEOI).
Lefolyása:
- C++-ban érdemes programozni
- a versenybizottság adja a hardvert, rajta Windows/Linux oprendszer (választható), Code::Blocks környezet és C++ stdlib dokumentáció
- egy weboldalra kell feltölteni a forráskódot, általában full feedback a beküldésekre (azaz egyből lehet látni a pontszámot)
- az internetkapcsolat csak a versenyplatformra limitálódik, más weboldal és IP nem elérhető
- a megyei szakaszon 4 óra alatt 3 feladatot kell megoldani
Szabályzat, tételek:
- lásd a SEPI weboldalán, régebbieket az infoarenán
- a Kilonován is megvannak a feladatok + online judge
- régebben működő oldal, mára már kihalt: https://olimpiada.info/index_php
2.2. Grigore Moisil
- Románia jónéhány megyéjéből vesznek ezen részt diákok
- fizikai jelenléttel zajlik valamelyik megye szervezésében
- az OJI-ról az első néhány helyezettet hívják meg minden évfolyamból (általában 2-2 versenyzőt)
- az elmúlt évek feladatai megvannak a Kilonován vagy az egyes kiadások saját weboldalain (amíg azok még működnek): 2025, 2024, 2023, 2019, 2017 stb.
2.3. Zsakó László Nemzetközi Programozási Verseny
Magyarországi szervezésű verseny (ELTE), részt vehetnek az erdélyi magyar diákok is, sőt, akár a magyaroszági olimpiai csapat vállogatóversenyére is meghívást lehet szerezni az utolsó fordulóból (valamivel könnyebb oda bekerülni, mint a romániaiba, de azért ez sem könyű).
Nemrég lett átnevezve Nemes Tihamér Nemzetközi Programozási Versenyről, úgyhogy sokan még ezen a néven fogják említeni (rövide: „Nemes”).
Lefolyása:
- az első fordulóra küldenek egy feladatsort nagyrészt csak logikai feladványokból, papíron kell megoldani
- a következő forduló Erdély-szintű, számítógépen zajlik, full feedback-kel, lehet Szatmárról is versenyezni
- az ezt követő forduló az országos/nemzetközi szakasz, a teljes magyarság részt vesz rajta, szintén számítógépen zajlik feedback-kel, Budapesten és Marosvásárhelyen lehet versenyezni
Korcsoportok:
- nem minden osztálynak szervezik meg külön, több évfolyam versenyez együtt (azonos tételekből egy rangsorban)
- korcsoport: 5-8. évfolyamosok
- korcsoport: 9-10. évfolyamosok
- korcsoport: 11-12. évfolyamosok
Szabályzat, tételek:
- van két weboldal, az egyik az erdélyi szervezőké (EMT): https://emt.ro/esemeny/zsako-laszlo-nemzetkozi-programozasi-verseny/zsako-laszlo-nemzetkozi-programozasi-verseny, a másik pedig az ELTE-s: https://tehetseg.inf.elte.hu/nemes/index.html, az ELTE-s weblapon megvannak a papíron megoldandó tételek korábbi évekből
- njudge-on és a mester.inf.elte.hu-n meg lehet találni a programozás-feladatokat
2.4. Kalkulusz (Bolyai)
Ez a Bolyai Farkas Multidiszciplináris Tantárgyverseny informatika szekciója. Évente kerül megrendezésre, nincsenek korcsoportok, IX-XII. osztályok azonos tételből egy rangsorban versenyeznek.
Lefolyása:
- egy megyei fordulóval indul papíron vagy online google form kitöltésével
- ezt követi a marosvásárhelyi Bolyai Farkas Elméleti Líceumban megrendezett döntő (Erdély-szintű, csak magyar tagozatok)
- a döntő számítógépen zajlik, feedback nincs (tehát kézzel kell alaposan tesztelni a programokat)
Weblap, szabályzat, tételek: https://bolyai.ro/index.php/iskolai-elet-3/versenyek/bolyai-farkas-multidiszciplinaris-tantargyverseny
2.5. Dr. Toró László Talentum verseny
Multidiszciplináris verseny, egyszerre két tantárgyból kell indulni. Két online fordulót egy döntő követ Temesváron, itt is számítógépen kell programozni, a kiértékelés viszont kézi, nem automatizált.
Weboldal, versenykiírás, korábbi tételek és regisztráció: https://www.bartok.ro/talentum-versenyek/talentum-verseny-2025-2026/
3. Tananyag
Az informatika versenyek tananyaga általában az intenzív informatika szakosok tantervét követi (specializarea: matematică-informatică intensiv informatică). Mivel nálunk a líceumban csak nem intenzív informatika szak van, ezért az adott évfolyam osztálybeli anyaga nem elég, ennél tovább kell menni.
3.1. IX. osztály
Programozási nyelv elemei:
- típusok, vezérlő szerkezetek
- egy- és kétdimenziós tömbök, std::vector<>
- szöveges fájl I/O
- struktúrák
- függvények, rekurzió
- bitműveletek
Algoritmusok:
- oszthatósággal kapcsolatos feladatok (prímteszt, lnko - euklideszi algoritmus, tényezőkre bontás)
- Algoritmusok hatékonysága
- számjegyek feldolgozása, számrendszerek közötti átalakítások
- gyorshatvány
- sorozatok feldolgozása, sorozatok generálása
- résztömbök, RLE kódolás, leghosszabb résztömbök, legnagyobb összegű résztömb
- többségi elem
- rendezés négyzetes időben
- összefésülés, mergesort
- beépített függvények rendezéshez
- bináris keresés (és beépített függvények)
- frekvenciatömbök, karakterisztikus tömbök
- Eratosthenész szitája
- leszámláló rendezés
- részösszegek, differenciatömbök, részösszegek mátrixon
- greedy módszer
- two pointers technika
3.2. X. osztály
Programozási nyelv elemei:
- stringek (és beépített függvények)
- pointerek
- osztályok, OOP
- sablonok
- STL adatszerkezetek (pair, vector, queue, stack, dqeue, list, set, map, priority_queue)
Algoritmusok:
- Lee algoritmus mátrixon
- műveletek nagy számokkal
- moduláris aritmetika
- backtracking
- kombinatorika: megszámlálás, adott sorszámú szerkezet generálása, generálás
- divide et impera
- keresés string-ben: KMP, Rabin-Karp
- dinamikus programozás
- geometria, line sweeping, convex hull
3.3. XI-XII. osztály
A XI. és XII. osztályosok általában ugyanazt a tételt kapják általában a versenyeken.
Algoritmusok:
- dinamikus programozás, dinamikus programozás bitmaszkokon
- mátrix-hatványozás logaritmikus időben
- gráfelméleti fogalmak, gráfábrázolás
- gráfok bejárása (BFS, DFS), összefüggő komponensek, topológiai rendezés
- erősen összefüggő komponensek
- duplán összefüggő komponensek
- legrövidebb utak (Floyd-Warshall, Bellman-Ford, Dijkstra)
- Euler-vonalak keresése
- hamiltoni kör keresése
- fák, fa átmérője
- feszítő fák (Kruskal, Prim)
- dinamikus programozás fákon
- inclusion exclusion principle
- square root decomposition
- Mo algoritmus
- RMQ / LCA
- meet in the middle
Adatszerkezetek:
- disjoint set forest
- heap
- bináris keresőfák
- intervallumfa
- binárisan indexelt fa
- Trie, Aho-Corasick