Atenţie! Aceasta este o versiune veche a paginii, scrisă la 2012-03-23 05:37:48.
Revizia anterioară   Revizia următoare  

Cum sa scrii programe la concursuri si nu numai

Cosmin
Cosmin Negruseri
23 martie 2012

Continuam seria sfaturilor inainte de ONI. De data acesta despre coding.

Citeste atent problema
Se intampla frecvent, sub presiunea concursului, sa intelegi problema gresit. Citeste-o atent si uita-te la exemple ca sa nu ai surprize neplacute.

Gandeste-te bine la solutie inainte sa scrii cod
Incepatorii se arunca sa implementeze prima ideea. Apoi dupa timp bun de codare si depanare au surpriza ca algoritmul lor e gresit. Incearca ideea ta pe cateva exemple sa te convingi ca merge inainte sa scrii cod.

Fa teste si bute force-uri
Un set initial de teste bune ajuta foarte mult la implementarea unei solutii bune. Cateva exemple mici care testeaza cazul normal de functionare si doua teste extreme (n = 1 si n = MAX).
E foarte util sa ai si o solutie naiva de care te poti convinge usor ca e corecta. Ajuta la implementarea solutiei eficiente, si in caz ca nu iti vine in minte o solutie eficienta prinzi oricum cam 40 de puncte pe problema.

Cunoaste bine particularitatile limbajului de programare
Trebuiei sa stii cum se face citirea (cu buffer sau fara, parsezi datele sau nu si afisarea (numere reale, stringuri …).
In C++ STL e important, uita-te la sort, map, hash_map, set, pair, vector ca sa le poti folosi fara sa cauti documentatie prin librarii.

Conventii de coding
Concurentii la concursuri de programare folosesc frecvent variabile de genul ii, iii, x1, xx1, y0. Iti sugerez sa folosesti nume bune si in general conventii de coding . (e mai greu sa incurci intre ele sum si prod decat a si b)

Scrie cod incremental
In liceu, scriam tot codul ce rezolva o problema, apoi ma apucam de depanat. Am vazut mai tarziu ca, scriind cod bucata cu bucata si testand bucatile intermediare, ajung mult mai repede la o solutie functionala. Gandeste-te bine cum poti sa imparti solutia in pasi intermediari si sa verifici usor ca fiecare pas e corect.

La antrenamente fa mai multe solutii pentru o problema
Codul scurt si clar e usor de depanat si probabilitatea sa aiba buguri e mica. Astfel la antrenamente rescrie un program de mai multe ori pana ajungi la o solutie scurta si curata. Uita-te pe siteuri ca infoarena sau topcoder cum fac cei mai buni si incearca sa intelegi de ce au solutii mai scurte sau mai clare.

Partea misto e ca ideile de mai sus se aplica foarte bine si in contextul muncii in industrie.

Voi ce sfaturi aveti legate de implementare?

Categorii: