Cum te pregătești eficient pentru Olimpiada Județeană de Informatică (OJI)
Ghid practic pentru OJI: ce nivel cere, teme esențiale pe clase, un plan de antrenament realist, cum exersezi pe arhive și cum gestionezi timpul în concurs.
Te-ai calificat la Olimpiada Județeană de Informatică (OJI) sau vrei să ajungi acolo? Vestea bună e că OJI nu se câștigă cu talent înnăscut, ci cu un antrenament organizat. Hai să vedem exact ce ai de făcut ca să intri în concurs pregătit, nu speriat.
Ce nivel cere, de fapt, OJI
OJI e a doua etapă a olimpiadei, după faza pe școală/locală și înainte de etapa națională. Subiectele sunt mai grele decât la clasă, dar nu imposibile: de obicei primești 2-3 probleme pe care le rezolvi în câteva ore, scriind cod în C++.
Fiecare problemă e evaluată automat pe un set de teste, iar punctajul e proporțional cu câte teste treci. Asta înseamnă două lucruri importante:
- Nu trebuie să rezolvi totul perfect ca să iei puncte. O soluție parțială, mai lentă, poate lua 30-60 de puncte.
- Contează enorm să respecți formatul de intrare/ieșire și limitele (timp și memorie).
Mulți elevi buni pierd puncte nu pentru că nu știu algoritmul, ci pentru că au citit greșit enunțul sau au depășit limita de timp. La OJI, atenția la detalii valorează cât un algoritm în plus.
Temele esențiale, pe clase
Programa OJI e structurată pe clase, iar fiecare nivel adaugă peste cel anterior. Iată o hartă orientativă a temelor pe care merită să le stăpânești:
| Clasă | Teme esențiale |
|---|---|
| Clasa a V-a | numere, cifre, divizibilitate, prelucrări simple |
| Clasa a VI-a | șiruri de numere, vectori, parcurgeri, maxim/minim |
| Clasa a VII-a | matrice, prime, algoritmi pe cifre, sortare simplă |
| Clasa a VIII-a | căutare binară, greedy de bază, structuri pe vectori |
| Clasa a IX-a | sortări, complexitate, stive/cozi, two pointers |
| Clasa a X-a | recursivitate, backtracking, programare dinamică de bază |
| Clasa a XI-a | grafuri (BFS/DFS), arbori, DP mai avansat |
| Clasa a XII-a | grafuri ponderate, structuri de date, optimizări |
Nu te speria de listă. Ideea nu e să le știi pe toate dintr-odată, ci să le acoperi în ordine, temeinic. O temă pe care o înțelegi cu adevărat valorează mai mult decât cinci pe care le-ai văzut o dată.
Un plan de antrenament care chiar funcționează
Pregătirea haotică, în care rezolvi probleme la întâmplare, dă rezultate slabe. Mult mai eficient e un plan pe cicluri scurte. Iată un model de săptămână:
- Luni-marți: teorie nouă. Înveți o temă (de exemplu căutarea binară), citești cum funcționează și o implementezi de mână de 2-3 ori.
- Miercuri-joi: aplicare. Rezolvi 4-5 probleme pe exact acea temă, de la ușor la greu.
- Vineri: probleme mixte. Lucrezi probleme care nu îți spun ce algoritm cer, ca să exersezi recunoașterea tiparului.
- Weekend: simulare. O dată pe săptămână, faci un concurs cronometrat cu subiecte vechi de OJI.
Respectă două principii: constanță (o oră pe zi bate 7 ore o dată pe săptămână) și revizuire (revii peste problemele pe care nu le-ai scos, după câteva zile).
O tehnică de care ai mereu nevoie: căutarea binară
Căutarea binară apare la OJI în nenumărate forme, nu doar pentru a găsi un element într-un vector sortat, ci și pentru a "căuta răspunsul" la o problemă. Iată implementarea clasică, scrisă curat, fără capcanele de la mid:
#include <bits/stdc++.h>
using namespace std;
// Caută poziția lui x într-un vector sortat crescător.
// Întoarce indexul (0-based) sau -1 dacă x nu există.
int cautareBinara(const vector<int>& v, int x) {
int st = 0, dr = (int)v.size() - 1;
while (st <= dr) {
int mid = st + (dr - st) / 2; // evită overflow
if (v[mid] == x)
return mid;
else if (v[mid] < x)
st = mid + 1;
else
dr = mid - 1;
}
return -1;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
int n, q;
cin >> n >> q;
vector<int> v(n);
for (int i = 0; i < n; i++)
cin >> v[i];
sort(v.begin(), v.end());
while (q--) {
int x;
cin >> x;
cout << cautareBinara(v, x) << '\n';
}
return 0;
}
Observă câteva detalii care fac diferența la concurs:
mid = st + (dr - st) / 2în loc de(st + dr) / 2previne depășirea deintcând valorile sunt mari.ios_base::sync_with_stdio(false)șicin.tie(nullptr)accelerează citirea, esențial când ai sute de mii de valori.- Afișezi cu
'\n'în loc deendl, fiindcăendlgolește buffer-ul de fiecare dată și te poate costa timp.
Stăpânește acest șablon până îl scrii din memorie. La fel procedezi cu BFS, DFS, sortarea proprie de structuri și cu un backtracking de bază.
Cum exersezi pe arhive
Secretul real al pregătirii e să lucrezi pe probleme date deja la OJI și pe platformele de antrenament. Iată cum scoți maximul din ele:
- Rezolvă pe arhive cronometrat. Pe site-uri ca pbinfo, infoarena sau Kilonova găsești enunțuri OJI din anii trecuți. Pune-ți cronometru și simulează condiții reale.
- Citește editorialele după ce încerci. Mai întâi te chinui singur 30-40 de minute. Abia apoi citești soluția. Dacă te uiți prea repede, nu înveți să gândești.
- Ține un caiet de greșeli. Notează ce ai ratat: ai uitat un caz limită? Ai depășit timpul? Ai citit greșit enunțul? Peste o lună, caietul ăsta îți arată exact unde să insiști.
- Reimplementează problemele grele. Dacă o problemă te-a învins, după câteva zile o scrii din nou de la zero, fără să te uiți la soluție.
Ținta sănătoasă e să rezolvi complet (sau aproape) între 100 și 200 de probleme până la concurs, acoperind toate temele clasei tale.
Cum gestionezi timpul în concurs
Strategia din ziua concursului contează aproape la fel de mult ca pregătirea. Iată un plan simplu:
- Citește toate problemele întâi (5-10 minute). Îți faci o idee despre dificultate.
- Începe cu cea mai ușoară, nu cu prima din enunț. Iei puncte sigure de la început și prinzi încredere.
- Scrie o soluție de "brut" dacă te blochezi. O soluție simplă, chiar lentă, îți poate aduce testele mici. E mai bine decât zero.
- Testează pe exemplul din enunț înainte de a trimite. Și gândește-te la cazuri limită:
n = 0, valori egale, vectorul gol. - Lasă timp de verificare la final (10-15 minute). Verifică formatul de ieșire și că nu ai uitat un
endlsau un caz.
Nu te ambiționa pe o singură problemă până la epuizare. Dacă ai stat 40 de minute fără progres, treci la alta și revii.
Concluzie
Pregătirea pentru OJI nu e o cursă de viteză, ci una de rezistență: teorie pe clase, antrenament constant, probleme de pe arhive și o strategie clară în concurs. Dacă lucrezi organizat câteva luni, rezultatul vine aproape de la sine.
La ByteSchool te pregătim pentru olimpiadă alături de mentori care au fost ei înșiși olimpici și care lucrează acum în tech. Îți construim un plan pe clasa și nivelul tău, îți dăm probleme selectate și îți corectăm soluțiile pas cu pas — ca să ajungi la OJI nu doar calificat, ci pregătit.