Prefață
„Se știe că un profesor bun e cel care te face ca lucrurile mai grele să ți se pară ușoare.” - Grigore Moisil
Programarea competitivă este, înainte de toate, o școală a gândirii. Nu este doar despre a scrie cod care rulează, ci despre a scrie cod care rezolvă o problemă corect, rapid și elegant, în condiții de timp și memorie limitate. Este despre a transforma o idee într-un algoritm, un algoritm într-o implementare și o implementare într-un punctaj.
La concursuri nu câștigă cine știe cele mai multe formule, ci cine știe să vadă problema dincolo de enunț: să recunoască tiparul, să aleagă structura de date potrivită, să estimeze complexitatea și să evite capcanele. Această abilitate nu vine peste noapte - se construiește problemă cu problemă, eșec după eșec, submisie după submisie.
În spatele fiecărei soluții elegante de la OJI, ONI sau IOI se află ore de antrenament, sute de probleme rezolvate și zeci de idei care nu au funcționat. Fiecare algoritm clasic pe care îl învățăm astăzi - de la sortări până la fluxuri în rețea - a fost cândva o descoperire, iar astăzi este o unealtă în arsenalul unui programator competitiv.
Această carte s-a născut dintr-o întrebare simplă:
„Cum putem construi, pas cu pas, drumul de la primele linii de cod până la problemele grele de olimpiadă, fără ca elevii să se piardă pe parcurs?”
Pentru a răspunde acestei întrebări, este nevoie să facem un pas înapoi și să ne întoarcem la momentul în care am învățat și noi, pentru prima dată, informatică. Privind lucrurile din această perspectivă, apar alte întrebări esențiale:
Cum am înțeles cel mai ușor teoria din spatele unui algoritm?
Care au fost cele mai mari dificultăți întâmpinate la concursuri?
Dacă aș putea schimba ceva în modul în care am fost pregătit pentru performanță, ce aș schimba?
Când a apărut, cu adevărat, pasiunea pentru programarea competitivă?
Despre această carte
Această carte își propune să fie un ghid pentru elevii care vor să urmeze drumul programării competitive, de la primii pași până la tehnicile avansate întâlnite la olimpiade și concursuri naționale. Parcursul este construit gradual: pornim de la noțiunile fundamentale și ajungem, lecție cu lecție, la algoritmi și structuri de date care apar frecvent în problemele grele.
Accentul nu cade pe sintaxă, ci pe modul de a gândi: cum descompunem o problemă, cum alegem o abordare, cum demonstrăm că soluția este corectă și cum o optimizăm atunci când limitele o cer. Fiecare temă este însoțită de exemple, idei-cheie și probleme din culegeri sau arhive de concurs.
Sper ca această carte să fie un partener de antrenament - nu un manual pe care îl citești o dată, ci unul la care te întorci, pe măsură ce întâlnești probleme tot mai grele și descoperi că aceleași idei de bază capătă noi fațete.
PS. Cartea acoperă un spectru larg de dificultate, de la lecții introductive până la teme avansate de olimpiadă. Nu vă descurajați dacă unele capitole par grele la prima citire - săriți peste ele, rezolvați probleme din zonele accesibile, apoi reveniți. Programarea competitivă se învață în spirală: fiecare întoarcere la același subiect aduce o înțelegere mai adâncă și o soluție mai curată.
Motivația personală
În urma activităților și concursurilor la care am participat în acești ani școlari, 2020-2026, am descoperit că programarea competitivă este mult mai mult decât fișiere text și linii de cod care, la prima vedere, pot părea greu de înțeles. Este un domeniu care te învață să gândești logic, să ai răbdare, să fii perfecționist și creativ, chiar și atunci când lucrurile nu ies din prima - iar o submisie cu Wrong Answer sau Time Limit Exceeded devine, cu timpul, un prieten, nu un dușman.
Până acum, nu m-am aflat niciodată în postura unui profesor, a unei persoane care, zi de zi, caută cele mai bune metode pentru a explica, a motiva și a inspira elevii, fiecare copil având propriul ritm și propriul mod de a învăța. Anul acesta, însă, am avut șansa de a trăi această experiență și de a înțelege ce înseamnă cu adevărat să fii alături de elevi în drumul lor spre performanță.
Este o bucurie greu de descris să vezi cum, pas cu pas, un elev capătă încredere, începe să înțeleagă și să creadă în propriile forțe. Să fii martor la micile lor reușite, să te bucuri alături de ei când lucrurile încep să se lege și când munca depusă dă roade.
În același timp, acest drum vine și cu momente de tristețe. Momente în care nu toți ajung unde și-ar dori, în care efortul nu este întotdeauna răsplătit imediat sau în care despărțirea de un colectiv devine inevitabilă. Tocmai aceste momente m-au făcut să înțeleg mai bine ce înseamnă să fii cu adevărat alături de elevi, nu doar în reușite, ci și în momentele mai grele, când am fost nevoiți să trecem peste eșecuri, să învățăm din greșeli și să avem curajul de a încerca din nou.
Toate aceste emoții m-au ajutat să înțeleg mai bine responsabilitatea, dar și frumusețea, rolului de a îndruma, de a susține și de a fi prezent, nu doar ca mentor, ci ca om.
Mulțumiri speciale
Mulțumesc foarte mult profesorilor mei de informatică, alături de care am ajuns la performanțe mari, am învățat din plăcere și am descoperit că informatica nu este doar o materie, ci un mod de a gândi, de a crea și de a rezolva probleme care contează. Fără răbdarea, dedicarea și încrederea lor, această carte nu ar fi existat.
Mulțumesc colegilor și prietenilor care au crezut în mine, care m-au încurajat în momentele dificile și care au fost alături de mine la fiecare pas. Fiecare discuție, fiecare idee împărtășită și fiecare cuvânt de susținere au contat mai mult decât își pot imagina.
Și în final, familiei, care mereu a fost lângă mine, m-a susținut necondiționat și mi-a dat libertatea de a-mi urma pasiunea.
Așa cum spunea doamna profesoară Ivașc Cornelia, alături de care am avut onoarea de a învăța nu doar informatică, ci și lecții valoroase de viață, la fiecare oră și la fiecare lecție, prin idei împărtășite, povești simple sau sfaturi spuse la momentul potrivit:
„Trebuie să învățăm să învățăm.”