Diferente pentru ghid-complet-pentru-concursurile-de-informatica intre reviziile #30 si #38

Nu exista diferente intre titluri.

Diferente intre continut:

== include(page="template/implica-te/scrie-articole" user_id="sims_gl") ==
(Categoria _Diverse_, autor _Mircea Pasoi_)
(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.**
h3. Concursuri pentru studenti
* "**ACM**":http://www.acm.ro - un concurs organizat pentru studenti, de natura algoritmica. Diferentele majore fata de concursurile de liceu sunt reprezentate de faptul ca un program trebuie sa rezolve toate seturile de date de intrare prezentate pentru a se acorda puncte (nu se mai acorda punctaje partiale) si viteza cu care se rezolva problemele conteaza, iar evaluarea programelor este imediata. Concursul este pe echipe de cate 3 persoane, toate la un singur calculator. Concursul are loc pe regiuni initial (Centrul Europei, Sudul Europei, etc.) iar echipele calificate se intalnesc la marea finala.
* "**TopCoder**":http://www.topcoder.com - un site care organizeaza concursuri saptamanal, cat si turnee. Formatul este diferit fata de orice concurs intalnit pana acum, si anume fiecare concurent are de rezolvat 3 probleme in 75 de minute: o problema usoara de 250 puncte, una medie de 500 puncte si una grea de 1000 puncte. Punctajul efectiv pentru o problema se da in functie de viteza cu care aceasta este rezolvata. De asemenea, exista si o etapa de "challenge", in care concurentii pot vedea sursele celorlalti si, in caz ca determina un bug intr-o sursa, pot sa ruleze sursa respectiva, iar daca da raspuns gresit concurentul primeste 50 de puncte, altfel este penalizat cu 50 de puncte. Aceste concursuri sunt diferite fata de cele din liceu in care accentul este pe realizarea unui algoritm eficient, deoarece aici se pune accentul mai mult pe o implementare rapida si corecta a unor probleme care folosesc variatii ale unor algoritmi destul de cunoscuti, dar fiind necesara tratarea diferitelor cazuri speciale ce pot aparea. Ca avantaje, premiile la turnee sunt foarte mare (20.000$ pentru primul clasat), iar intregul sistem de punctare este mult mai complex si mai eficient. Google organizeaza impreuna cu TopCoder concursul "**Google Code Jam**":http://www.google.com/codejam.
* "**TopCoder**":http://www.topcoder.com - un site care organizeaza concursuri saptamanal, cat si turnee. Formatul este diferit fata de orice concurs intalnit pana acum, si anume fiecare concurent are de rezolvat 3 probleme in 75 de minute: o problema usoara de 250 puncte, una medie de 500 puncte si una grea de 1000 puncte. Punctajul efectiv pentru o problema se da in functie de viteza cu care aceasta este rezolvata. De asemenea, exista si o etapa de "challenge", in care concurentii pot vedea sursele celorlalti si, in caz ca determina un bug intr-o sursa, pot sa ruleze sursa respectiva, iar daca da raspuns gresit concurentul primeste 50 de puncte, altfel este penalizat cu 25 de puncte. Aceste concursuri sunt diferite fata de cele din liceu in care accentul este pe realizarea unui algoritm eficient, deoarece aici se pune accentul mai mult pe o implementare rapida si corecta a unor probleme care folosesc variatii ale unor algoritmi destul de cunoscuti, dar fiind necesara tratarea diferitelor cazuri speciale ce pot aparea. Ca avantaje, premiile la turnee sunt foarte mari (20.000$ pentru primul clasat), iar intregul sistem de punctare este mult mai complex si mai eficient. Google organizeaza impreuna cu TopCoder concursul "**Google Code Jam**":http://www.google.com/codejam.
h2. 3. Inainte de concurs
h3. Discutiile cu alti elevi si profesori
Puteti invata foarte mult de la profesori, si in special de la elevi mai experimentati! Exista foarte multe exemple de elvei pentru care a contat foarte mult pregatirea individuala, dar exista unii care au fost ajutati de pregatirea organizata, in grupuri de elevi, sub indrumarea unor profesori cu preocupari de acest gen. In cadrul pregatirilor de acest tip se discuta algoritmi, se propun probleme spre rezolvare, se discuta diversele modalitati de rezolvare, se obtin mai multe informatii despre concursuri, etc. In plus, elevii aduc in discutie diverse probleme cu care s-au intalnit in cadrul pregatirii individuale. Daca doriti sa participati la astfel de pregatiri, trebuie sa luati legatura cu alti elevi interesati de concursuri, sau cu profesori care se ocupa de pregatirea elevilor pentru olimpiade. In prezent se organizeaza pregatiri la nivel de liceu, oras, judet, etc. in anumite zone. Astfel de pregatiri cresc valoarea tuturor participantilor, deci sunt foarte importanta. Pregatirile organizate au luat amploare odata cu infiintarea centrelor de excelenta. Pentru a intra in contact cu alti elevi interesati puteti folosi "forumul infoarena":http://infoarena.ro/forum si "forumul revistei GInfo":http://ba.toptalent.ro/forum.
Puteti invata foarte mult de la profesori, si in special de la elevi mai experimentati! Exista foarte multe exemple de elevi pentru care a contat foarte mult pregatirea individuala, dar exista unii care au fost ajutati de pregatirea organizata, in grupuri de elevi, sub indrumarea unor profesori cu preocupari de acest gen. In cadrul pregatirilor de acest tip se discuta algoritmi, se propun probleme spre rezolvare, se discuta diversele modalitati de rezolvare, se obtin mai multe informatii despre concursuri, etc. In plus, elevii aduc in discutie diverse probleme cu care s-au intalnit in cadrul pregatirii individuale. Daca doriti sa participati la astfel de pregatiri, trebuie sa luati legatura cu alti elevi interesati de concursuri, sau cu profesori care se ocupa de pregatirea elevilor pentru olimpiade. In prezent se organizeaza pregatiri la nivel de liceu, oras, judet, etc. in anumite zone. Astfel de pregatiri cresc valoarea tuturor participantilor, deci sunt foarte importante. Pregatirile organizate au luat amploare odata cu infiintarea centrelor de excelenta. Pentru a intra in contact cu alti elevi interesati puteti folosi "forumul infoarena":http://infoarena.ro/forum si "forumul revistei GInfo":http://ba.toptalent.ro/forum.
h3. Pregatirea de la locul desfasurarii probei
* somn odihnitor in noaptea care precede ziua concursului **(foarte important!)**
* obtinerea atitudinii mentale dorite
* prezentarea la timp in sala, cu toate obiectele necesare
* asculta muzica motivanta inaintea probelor; chiar daca pare ciudat, marii informaticieni asculta manele de calitate(Ma omoara, ma omoara, Sange de taur etc.)
Exista cateva obiecte pe care ar trebui sa le aveti la voi. In timpul concursului trebuie tinuta o evidenta drastica a timpului scurs si a celui ramas. E drept ca in general supraveghetorii anunta din cand in cand timpul care a trecut, dar e bine sa nu va bazati pe nimeni si nimic altceva decat pe voi insiva. Unii pot spune _Ei, ce nevoie am de ceas, oricum am ceasul calculatorului la indemana_. Asa e, dar e incomod sa te opresti mereu la jumatatea unei idei si sa verifici cat e ceasul schimband consola sau minimizand fereastra de lucru. In ceea ce priveste hartia de scris, ea este in mod sigur necesara. De fapt, o parte importanta a rezolvarii unei probleme este proiectarea matematica a algoritmului, lucru care nu se poate face decat cu creionul pe hartie. Pe langa aceasta, majoritatea problemelor opereaza cu vectori, matrice, arbori, grafuri, etc., iar exemplele pe care este testat programul realizat trebuie neaparat verificate "de mana". Este recomandat sa aveti mereu si hartie de matematica; este foarte folositoare pentru problemele de geometrie analitica, precum si penntru reprezentarea matricelor. Nu in ultimul rand, ar fi bine sa aveti o sticla de suc si o ciocolata; din nefericire, concursul incepe deseori cu intarziere si este bine ca foamea sau setea sa nu va preocupe in timpul rezolvarii problemelor.
Exista cateva obiecte pe care ar trebui sa le aveti la voi. In timpul concursului trebuie tinuta o evidenta drastica a timpului scurs si a celui ramas. E drept ca in general supraveghetorii anunta din cand in cand timpul care a trecut, dar e bine sa nu va bazati pe nimeni si nimic altceva decat pe voi insiva. Unii pot spune _Ei, ce nevoie am de ceas, oricum am ceasul calculatorului la indemana_. Asa e, dar e incomod sa te opresti mereu la jumatatea unei idei si sa verifici cat e ceasul schimband consola sau minimizand fereastra de lucru. In ceea ce priveste hartia de scris, ea este in mod sigur necesara. De fapt, o parte importanta a rezolvarii unei probleme este proiectarea matematica a algoritmului, lucru care nu se poate face decat cu creionul pe hartie. Pe langa aceasta, majoritatea problemelor opereaza cu vectori, matrice, arbori, grafuri, etc., iar exemplele pe care este testat programul realizat trebuie neaparat verificate "de mana". Este recomandat sa aveti mereu si hartie de matematica; este foarte folositoare pentru problemele de geometrie analitica, precum si pentru reprezentarea matricelor. Nu in ultimul rand, ar fi bine sa aveti o sticla de suc si o ciocolata; din nefericire, concursul incepe deseori cu intarziere si este bine ca foamea sau setea sa nu va preocupe in timpul rezolvarii problemelor.
h2. 4. In timpul concursului
* Salvati programul cat mai des. Daca va obisnuiti, chiar la fiecare 2-3 linii. Dupa ce o sa va intre in reflex n-o sa va mai incomodeze  cu nimic acest obicei. Au fost cazuri in care o pana de curent prindea pe picior gresit multi concurenti, iar dupa aceea nu mai este absolut nimic de facut, pentru ca nimeni nu va va crede pe cuvant ca ati facut programul si ca el mergea.
* Obisnuiti-va sa programati modular. Faceti proceduri separate pentru citirea si initializarea datelor, pentru sortare, pentru afisarea rezultatelor, etc. In general nu se recomanda sa scrieti proceduri in alte proceduri (adica e bine ca toate procedurile sa apartina direct de programul principal). Procedurile, acolo unde e posibil, nu trebuie sa depaseasca un ecran, pentru a putea avea o viziune de ansamblu asupra fiecareia in parte. Acest lucru ajuta mult la depanare.
* Rulati programul cat mai des, daca timpul va permite. In primul rand dupa ce scrieti procedura de citire a datelor. Daca e nevoie de sortarea datelor de intrare, nu strica sa va convingeti ca programul sorteaza bine, ruland 2-3 teste oarecare. E pacat sa pierdeti puncte dintr-o greseala copilareasca.
* O situatie mai delicata apare cand fisierul de intrare contine mai multe seturi de date (teste). In acest caz, atentia trebuie sporita, deoarece daca la primul sau al doilea test programul vostru da eroare si se opreste din executie, veti pierde automat si toate celelalte teste care urmeaza. Daca in fisierul de intrare exista un singur set de date, atunci pierderea din vedere a unui caz particular al problemei nu putea duce, in cel mai rau caz, decat la picarea unui test. Asa insa, picarea unui test poate atrage dupa sine picarea tuturor celor care il urmeaza. Pe langa corectitudinea strict necesara, programul trebuie sa se incadreze is in timp pentru orice fel de test. Daca la primul sau al doilea test din suita programul depaseste timpul (sau, si mai rau, se blocheaza), e foarte probabil sa fie oprit din executie de catre comisie, deci din nou veti pierde toate testele care au ramas neexecutate.
* O situatie mai delicata apare cand fisierul de intrare contine mai multe seturi de date (teste). In acest caz, atentia trebuie sporita, deoarece daca la primul sau al doilea test programul vostru da eroare si se opreste din executie, veti pierde automat si toate celelalte teste care urmeaza. Daca in fisierul de intrare exista un singur set de date, atunci pierderea din vedere a unui caz particular al problemei nu putea duce, in cel mai rau caz, decat la picarea unui test. Asa insa, picarea unui test poate atrage dupa sine picarea tuturor celor care il urmeaza. Pe langa corectitudinea strict necesara, programul trebuie sa se incadreze si in timp pentru orice fel de test. Daca la primul sau al doilea test din suita programul depaseste timpul (sau, si mai rau, se blocheaza), e foarte probabil sa fie oprit din executie de catre comisie, deci din nou veti pierde toate testele care au ramas neexecutate.
* Tot in situatia in care exista mai multe seturi de date in fisierul de intrare, daca iesirea se face intr-un fisier, este bine ca dupa afisarea rezultatului pentru fiecare test sa actualizati fisierul de iesire. In felul acesta, chiar daca la unul din teste programul se blocheaza sau da eroare, rezultatele deja scrise raman scrise. Altfel, e posibil ca rezultatele de la testele anterioare sa ramana intr-un buffer in memorie, fara a fi "varsate" pe disc.
Tot la partea de implementare, este bine ca codul sa fie cat mai scurt si cat mai optimizat - dar, despre scrierea unui cod cat mai eficient se poate face un articol cam la fel de mare cat acesta, deci nu se va trata acest subiect aici - metoda cea mai buna in acest sens este sa invatati din sursele altora. Puteti incepe cu articolele "_12 ponturi pentru programatorii C/C++_":http://infoarena.ro/12-ponturi-pentru-programatorii-CC si "_Multe smenuri de programare in C/C++... si nu numai!_":http://infoarena.ro/Multe-smenuri-de-programare-in-CC-si-nu-numai si sectiunea "Links":http://infoarena.ro/links.
Mai ramane doar partea de depanare. O metoda buna de depanare este urmatoarea:
* Incepeti cu un test nici prea simplu, nici prea complicat (si usor de urmarit cu creionul pe hartie) si executati-l de la cap la coada. Daca merge perfect, treceti la teste mai complexe (se recomanda **minim** 4 test si maxim 7-8). Daca le trece si pe acestea, puteti zambi. Totusi, daca programul vostru a mers perfect pe 7-8 teste date la intamplare, exista sanse (dar nu extrem de mari!) sa mearga pe majoritatea testelor comisiei, sau chiar pe toate.
* Incepeti cu un test nici prea simplu, nici prea complicat (si usor de urmarit cu creionul pe hartie) si executati-l de la cap la coada. Daca merge perfect, treceti la teste mai complexe (se recomanda **minim** 4 teste si maxim 7-8). Daca le trece si pe acestea, puteti zambi. Totusi, daca programul vostru a mers perfect pe 7-8 teste date la intamplare, exista sanse (dar nu extrem de mari!) sa mearga pe majoritatea testelor comisiei, sau chiar pe toate.
* Exemplul dat in enunt nu are in general nici o semnificatie deosebita (de fapt, are mai curand darul de a semana confuzie printre concurenti), iar daca programul merge pe acest test particular, nu inseamna ca o sa mearga si pe alte teste.
* Daca la unul din teste programul nu merge corespunzator, rulati din nou testul , dar de data aceasta procedura cu procedura. Dupa fiecare procedura evaluati variabilele si vedeti daca au valorile asteptate. In felul acesta puteti localiza cu precizie procedura, apoi linia unde se afla eroarea. Corectati in aceasta maniera toate erorile, pana cand testul este trecut.
* In acest moment, luati de la capat toate testele pe care programul le-a trecut deja. In urma depanarii, s-ar putea ca alte greseli sa iasa la suprafata si programul sa nu mai mearga pe vechile teste.
h2. 5. Dupa concurs
Dupa ce ati terminat problemele (se intampla destul de rar) nu iesiti din sala! Este momentul ultimelor teste. La iesirea din sala trebuie sa fiti convinsi ca ati facut tot ce era posibil in conditiile data. Concursul nu s-a terminat inca! Urmeaza corectarea. Va trebui sa verificati punctajul obtinut si sa fiti pregatit sa depuneti o contestatie daca aveti impresia ca ceva nu este in regula. La unele concursuri, corectarea se face in prezenta concurentului; aici aveti ocazia sa solicitati sa vi se arate testele si iesirile furnizate de programul vostru, sa cereti testarea din afara mediului de evaluare, etc. La alte concursuri, comisia ofera, mai tarziu, testele si raspunsurile corecte pentru autoevaluare. Nu ratati ocazia de a va evalua rezolvarile si nu depuneti contestatii decat daca in urma autoevaluarii obtineti un punctaj mai mare. Fiecare concurs este o experienta in plus! Discutati, dupa proba, cu alti concurenti, aflati cum ar fi trebuit rezolvate problemele pe care nu le-ati stiut aborda si ce au gresit ceilalti (este bine sa invatati si din greselile altora).
Dupa ce ati terminat problemele (se intampla destul de rar) nu iesiti din sala! Este momentul ultimelor teste. La iesirea din sala trebuie sa fiti convinsi ca ati facut tot ce era posibil in conditiile date. Concursul nu s-a terminat inca! Urmeaza corectarea. Va trebui sa verificati punctajul obtinut si sa fiti pregatit sa depuneti o contestatie daca aveti impresia ca ceva nu este in regula. La unele concursuri, corectarea se face in prezenta concurentului; aici aveti ocazia sa solicitati sa vi se arate testele si iesirile furnizate de programul vostru, sa cereti testarea din afara mediului de evaluare, etc. La alte concursuri, comisia ofera, mai tarziu, testele si raspunsurile corecte pentru autoevaluare. Nu ratati ocazia de a va evalua rezolvarile si nu depuneti contestatii decat daca in urma autoevaluarii obtineti un punctaj mai mare. Fiecare concurs este o experienta in plus! Discutati, dupa proba, cu alti concurenti, aflati cum ar fi trebuit rezolvate problemele pe care nu le-ati stiut aborda si ce au gresit ceilalti (este bine sa invatati si din greselile altora).
De multe ori, primul an de participare la olimpiada se soldeaza cu un rezultat cel mult mediu, deoarece, oricat ar spune cineva _Ei, nu-i asa mare lucru sa mergi la un concurs_, experienta acumulata conteaza mult. De aceea, abia de la a doua participare si uneori chiar de mai tarziu incep sa apara rezultatele. Intentia autorului a fost sa va usureze misiunea si sa va dezvaluie cateva din dificultatile de toate felurile care apar la orice concurs, pentru a nu va da ocazia sa le descoperiti pe propria piele. Speram ca aceste ponturi va vor fi de folos!

Nu exista diferente intre securitate.

Diferente intre topic forum:

 
3680