Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2007-06-30 11:33:28.
Revizia anterioară   Revizia următoare  

Ghid complet pentru concursurile de informatica

(Categoria Diverse, autor Mircea Pasoi)

Acest articol se adreseaza pasionatilor de informatica si celor care au de gand sa participe la concursurile si olimpiadele de informatica. Observatiile din cadrul acestui articol sunt, in mare parte, rezultatul experientei autorului.

1. Ce sunt concursurile?

Concursurile de informatica, ca la orice alta disciplina, vor sa fie o metoda de clasificare a participantilor in functie de abilitatile de programare si de cunostintele de algoritmica. In plus, exista unele concursuri in care cei mai buni concurenti sunt rasplatiti. Probabil cel mai important aspect, concursul include aparitia unui factor suplimentar care rastoarna multe din obisnuintele programarii "la domiciliu" sau "la locul de munca" (de obicei programatorii care lucreaza in firme au perioade mult mai lungi de timp pentru a-si duce la final sarcina): timpul. Autorul a avut la dispozitie mai mult de sapte ani ca sa descopere pe propria piele importanta foarte mare a acestui factor; si, mai mult decat durata de timp in sine a concursului, care este aceeasi pentru toti concurentii, conteaza capacitatea fiecaruia de a gestiona bine acest timp. Daca in fata calculatorului de acasa, cu o sticla de suc alaturi si cu muzica mergand, este intr-adevar un lucru laudabil sa justificam matematic fiecare pas al algoritmului, sa nu ne lasam inselati de intuitie si sa scriem programul fara sa ne grabim, alocandu-ne o mare parte din timp numai pentru depanarea lui, in schimb, in timp de concurs lucrurile stau tocmai invers: de demonstratii riguroase din punct de vedere matematic rar are timp cineva, intuitia fiind la mare pret si de nenumarate ori fiind criteriul care aduce victoria; iar timpul la un concurs serios este suficient doar pentru implementarea tuturor programelor, pentru depanare alocandu-se de obicei o perioada destul de mica.

In multe cazuri, cele doua etape principale ale programarii - conceperea si implementare algoritmului - incep sa se bata cap in cap. Exista situatii in care avem la dispozitie un algoritm foarte eficient, dar implementarea acestuia este extrem de dificila, alteori algoritmul ales nu va face fata volumului maxim de date de intrare, iar alteori ne dam seama ca am putea foarte usor sa scriem un program, dar nu suntem in stare sa demonstram ca el merge sigur pe orice set de date de intrare. Foarte des se renunta la implementarea algoritmilor de complexitate optima, care in multe cazuri constituie adevarate focare de "bug"-uri, preferandu-se un algoritm mai lent dar care sa se poate implementa mai rapid si fara dureri de cap. Multi concurenti pierd primii ani de concursuri descoperind aceste lucruri. Desigur, aceste lucruri variaza foarte mult in functie de viteza fiecaruia de a implementa in limbajul preferat (atentie, viteza mare de tastare a unui text normal nu garanteaza neaparat o viteza mare de tastare a unui program!), cat si de abilitatea de a te concentra la toate detaliile care apar in implementare (acest lucru depinde foarte mult de cat de antrenata este mintea fiecaruia). De fapt, concurentii care ies pe primele locuri de obicei, sunt cei care au reusit sa formeze un echilibru intre cele doua etape ale programarii: pot sa conceapa algoritmi eficienti, care sa se incadreze in limitele de timp si memorie, cat si sa implementeze acesti algoritmi intr-un timp acceptabil, depanand foarte putin.

O intrebare pe care cineva, care citeste aceste randuri, si-o poate pune este urmatoarea: De ce sa particip la astfel de concursuri? Principalele avantaje sunt formarea unei gandiri algoritmice, intelegerea metodelor de rezolvare pentru anumite probleme (care pot aparea si in cadrul dezvoltarii de aplicatii), dezvoltarea capacitatii de a reactiona rapid intr-un timp scurt. In timp, experienta acumulata in cadrul pregatirii si a concursurilor va conduce la eficienta mai mare in cadrul proiectelor de dezvoltare de software si, de ce nu, la obtinerea unor salarii mai mari la angajare. Exista multe companii care iau in considerare participarile la concursuri la interviurile pentru angajare, cat si multe facultati din strainatate care le considera un criteriu pentru primirea unei burse (asta nu inseamna ca o astfel de participare garanteaza neaparat o bursa!). Un alt avantaj ce nu este de neglijat este reprezentat de premiile puse in joc, atat cele materiale (calculatoare, diferite componente hardware, excursii in strainatate, carti, etc.), cat si intrarea fara examen la facultate, in cazut obtinerii unor rezultate bune la olimpiadele nationale sau internationale.

2. Care sunt concursurile?

O alta intrebare la care doresc sa afle raspunsul cei care vor sa participe la concursurile de informatica este: Care sunt cele mai importante concursuri de programare? Se pot clasifica doua mari tipuri de concursuri: cele pentru gimnaziu si liceeni si cele pentru studenti.

Concursuri pentru liceu

  • Olimpiada Locala de Informatica - Se desfasoara in fiecare judet de obicei la inceputul anului (lunile ianuarie-februarie) si, in general, nivelul de dificultate este foarte redus (exceptie facand poate Bucuresti si alte cateva judete), subiectele fiind propuse de profesorii din judetul respectiv.
  • Olimpiada Judeteana de Informatica - Incepand cu anul 2003 subiectele pentru olimpiada judeteana au fost aceleasi in toata tara; de obicei se desfasoara cu o luna dupa olimpiada locala si cu cel putin o luna inainte de olimpiada nationala; subiectele sunt de un nivel mediu in general.
  • Olimpiada Nationala de Informatica - Se organizeaza o data pe an, de obicei in prima vacanta din semestrul II al anului scolar; probele pentru liceu se desfasoara timp de 2 zile, in fiecare zi concurentii avand de rezolvat 3 probleme in 4 ore, iar probele pentru gimnaziu dureaza doar o zi, cate 2 probleme in 3 ore. De asemenea, prima jumatate din clasamentul pentru fiecare clasa de liceu participa la barajele pentru selectia lotului largit de informatica - aici, toti concurentii, indiferent de varsta, au de rezolvat aceleasi probleme. Primii ~20 selectati in urma acestei probe (care se desfasoara tot timp de 2 zile) vor forma lotul national largit; acestia vor participa la mai multe pregatiri, in cadrul carora sunt incluse baraje pentru selectarea echipelor de cate 4 elevi care vor reprezenta Romania la BOI, CEOI si IOI.
  • Balcaniada de Informatica (BOI) - Prima editie a avut loc la Constanta in anul 1993. Standardele acestui concurs nu erau foarte ridicate, iar concurentii romani se claseaza foarte des pe primele locuri. Cel mai concludent exemplu in acest sens este faptul ca la editia din anul 2001 toate cele patru medalii de aur au fost obtinute de reprezentantii nostri, iar in 2005 ambele medalii de aur acordate au revenit iarasi romanilor. Exista si ani cand nivelul de dificultate al problemelor este mai ridicat, spre exemplu in 2003(Romania) si 2004(Bulgaria).
  • Olimpiada de Informatica a Europei Centrale (CEOI) - Prima editie a avut loc la Cluj-Napoca in anul 1994. Editia din 2000 a acestui concurs a avut loc tot la Cluj-Napoca. Standardele acestui concurs sunt mai ridicate decat cele de la BOI, deoarece elevii din tarile participante sunt intotdeauna foarte bine pregatiti.
  • Olimpiada Internationala de Informatica (IOI) - Acest concurs reuneste anual elevi din ~80 tari ale lumii. Fiecare tara este reprezentata de cel mult patru concurenti, iar numarul tarilor participante creste in fiecare an. Organizarea concursului este asemanatoare cu cea a celorlalte concursuri internationale mentionate. Concursul este individual si se desfasoara sub forma a doua probe. La fiecare proba concurentii au la dispozitie 5 ore pentru a rezolva 3 probleme cu un grad ridicat de dificultate. Dupa fiecare proba, programele concurentilor sunt evaluate automat, cu ajutorul unor programe de evaluare. Dupa cele doua zile de concurs se stabileste clasamentul final si se acorda medaliile. Rezultatele sunt secrete pana in momentul decernarii premiilor. La aproape toate editiile acestui concurs, echipa Romaniei a avut rezultate excelente. Astfel, incepand din anul 1993, cu doar doua exceptii, toti cei patru componenti ai echipei tarii noastre au obtinut medalii; conform punctajelor individuale, s-au obtinut doua locuri I (1993 si 1998) cu punctaj maxim si un loc II (2001), iar in clasamentul pe natiuni Romania este o prezenta constanta in primele 10 locuri.

Mai exista si alte concursuri internationale, cum ar fi Olimpiada Tarilor Baltice, la care Romania nu participa. Puteti gasi detalii mai multe despre aceste concursuri, cat si problemele propuse, folosind Google. De asemenea problemele si solutiile din ultimii ani pentru concursurile importante pot fi gasite la sectiunea Downloads a site-ului infoarena, acesta fiind actualizat periodic.

Exista cateva concursuri regionale si nationale similare olimpiadelor (difera timpul de concurs, numarul de probe si dificultatea problemelor). Cateva dintre acestea sunt:
* Marele Premiu al Palatului Copiilor - concurs organizat la Palatul National al Copiilor din Bucuresti; participa echipe ale Cluburilor Copiilor din mai multe judete ale tarii
* Concursul "Grigore C. Moisil" - organizat anual la Lugoj; are o desfasurare similara
* diferite concursuri interjudetene organizate in anumite regiuni ale tarii; mai multe astfel de concursuri poarta numele lui Grigore Moisil; alte concursuri sunt Info-Oltenia, LInfo@SV, Urmasii lui Moisil, etc.
* Stelele Informaticii - concurs cu organizare asemanatoare cu Olimpiada Nationala de Informatica; participarea la acesta se face doar pe baza de invitatie.

De obicei aceste manifestari sunt mai ample; la aceste concursuri exista si alte sectiuni, cum ar fi cele dedicate dezvoltarii de aplicatii software sau de pagini web.

Exista de asemenea numeroase concursuri on-line, la care concurentii participa de acasa si isi trimit solutiile prin intermediul internet-ului. Desigur, nu se pot acoperi integral toate concursurile disponibile pe internet in acest articol. Este foarte importanta citirea regulamentului inainte de rezolvarea problemelor, deoarece pot exista restrictii care difera de la caz la caz. Datorita faptului ca majoritatea acestor concursuri sunt internationale, cunoasterea limbii engleze devine o necesitate pentru a putea participa. Pentru o pregatire cat mai eficienta, se recomanda participarea la acest tip de concursuri, atat pentru valoarea premiilor puse in joc, cat si ca modalitate de antrenament.

  • preONI - Un concurs organizat in scopul pregatirii pentru Olimpiada Nationala de Informatica, organizat de catre studenti si elevi, actuali si fosti olimpici nationali si internationali. In ultimii 3 ani acest concurs a fost organizat de echipa infoarena, un grup de olimpici care administreaza primul (si singurul la momentul acesta) site din Romania cu evaluator disponibil 24 din 24. Acest concurs este intr-o continua expansiune, devenind din ce in ce mai complex de la an la an. Pe langa preONI, echipa infoarena organizeaza si alte concursuri; calitatea si valoarea concursurilor organizate precum si a materialelor educationale ce sunt puse la dispozitie este recunoscuta atat de elevi cat si de profesori de renume in informatica.