Principii de bază în abordarea concursurilor de programare
Iată în continuare câteva idei pe care considerăm esențial să le citiți înainte de a începe treaba.
- Să lucrăm cât mai mult. Este foarte important să lucrăm cât mai multe probleme. În felul acesta ne formăm îndemânarea de a scrie cod, cu timpul acest lucru ducând la micșorarea timpului necesar implementării unui anumit algoritm. Cu cât lucrăm mai mult, cu atât crește probabilitatea să fi mai scris anterior o anume bucată de cod.
- Formarea de automatisme la implementare. La algoritmii foarte importanți este esențial să ne formăm automatism. Să nu se înțeleagă că trebuie memorați. Nu, trebuie să înțelegem foarte bine funcționarea unui algoritm și apoi să îl rescriem de suficiente ori până când ne este clar că îl putem implementa fără să îl greșim în condiții de concurs. Când ai încredere că poți scrie un anume algoritm în 10 minute, ești mult mai liniștit atunci când îți planifici timpul alocat pentru gândire la o altă problemă din set, în timpul probei. Pentru formarea de automatism la un anume agloritm nu este suficient doar să îl scriem de multe ori imediat după învățarea lui ci este foarte important să revenim după câtva timp (de exemplu 2-3 săptămâni) și abia atunci ne putem da seama mai bine dacă îl avem fixat.
- Cum procedăm când rezolvăm o problemă în afara unui concurs. Atunci când primim o problemă temă sau când ne alegem una pentru a o lucra, recomandarea este să procedăm în felul următor: mai întâi încercăm să facem observații folosind datele din enunț, apoi ne gândim bine cum putem să le utilizăm, cum ne folosim de restricții și care dintre algoritmii cunoscuți ar putea avea legătură cu rezolvarea. Chiar dacă ne dăm seama că nu dispunem de o soluție care să obțină punctaj maxim, este foarte important să scriem sursa pe ideea ce am conturat-o. După ce depanăm și obținem punctajul așteptat, pasul următor pentru obținerea punctejului maxim este de a căuta hinturi pentru rezolvare. Acestea pot fi găsite în descrierea soluției (pentru foarte multe probleme aceasta este disponibilă) sau în forumurile de discuții despre problemă. Aici este esențial să se înțeleagă că în această etapa o sursă optimă a altcuiva nu este lucrul cel mai util. Trebuie să construim propria noastră sursă pornind de la indicațiile de rezolvare citite. Evident că dacă obținem punctaj maxim suntem foarte bucuroși și este marea răsplată pentru efortul depus. Mai este ceva de făcut acum? Răspunsul este: DA. Este momentul să ne punem întrebarea: oare algoritmul pe care l-am scris noi este în forma cea mai simplă, este standard, este ușor de rescris altă dată? Sau poate am scris destul de greoi și cu altă ocazie ne-ar fi greu să refacem în condiții de concurs. Acum este momentul când putem studia și surse de punctaj maxim scrise de alți oameni. În acest fel putem găsi alte idei sau poate moduri mai ușoare de a rezolva problema.
- Ca și concurent nu este suficient să "îmi vină ideea", trebuie să duc implementarea până la capăt. Iată un motiv foarte important pentru a lucra mult, de a implememta efectiv multe probleme. Noi suntem concurenți, nu teoreticieni. Este important să știm multe idei de rezolvare, să facem legături între noțiuni, etc. Dar la ce bun că ne vine o idee genială în timpul unui concurs și nu vom fi capabili să scriem un algoritm care să o și implementeze? Cu cât avem mai mult exercițiu, automatisme formate pentru mulți algoritmi, cu atât șansa să facem o implementare pe o idee pe care o avem este mai mare. Nu uitați că adesea se întâmplă să ne vină ideea spre finalul concursului, când suntem și obosiți și când nici timpul nu mai este aliatul nostru. Atunci ajută foarte mult încrederea că putem scrie sursa.
- Putem să ne folosim intuiția? Nu de multe ori intuiția joacă un rol extrem de important în rezolvarea unei probleme în condiții de concurs. În multe cazuri nu mai avem timp să demonstrăm riguros că o soluție este corectă. Cei care au multă experiență, care au lucrat multe probleme, rareori dau greș atunci când simt că o idee este bună.
- Cum organizăm ciclul de pregătire pentru un concurs important? Ar trebui ca pregătirea mai dură, cu implementări greoaie, cu noțiuni dificil de fixat, să se facă mai departe de concurs. De multe ori implementările greoaie ne obosesc iar faptul că nu le putem duce la capăt pot avea va efect scăderea încrederii în sine. De aceea se recomandă ca acestea să nu fie făcute aproape de concurs. Mai aproape de concurs este poate important să reluăm algorimii standard pentru a ne asigura că îi scriem repede dacă este necesar și eventual să ne aruncăm o privire pe surse pe care le-am mai scris dar poate nu mai suntem siguri de tot ce conțin.
- Cum ne pregătim în apropierea unui concurs important? Înainte de un concurs foarte important ar trebui să ne planificăm pregătirea încât în preziua concursului să ne considerăm mulțumiți de ce am făcut deja. Atunci ar trebui să ne relaxăm, să facem altceva decât informatică, poate să ne plimbăm cu bicicleta în parc, să alergăm sau să jucăm biliard :D. Trebuie să căutăm cea mai bună stare mentală, nu trebuie să ne lăsăm copleșiți de emoții. În niciun caz nu trebuie să ratăm odihna din noaptea de dinainte de probă. A ne uita neliniștiți pe un monitor de evaluare pentru a vedea ce mai lucrează concurenți ai noștri în ultimul moment este cel mai greșit lucru. Adesea ne putem îngrijora că vedem un lucru pe care ni se pare că nu l-am mai ști. Să ne prăbușim mental înainte de concurs în loc să ne relaxăm este cel mai rău lucru. În fond niciodată nu o să ajungem să le știm pe toate, iar imediat înainte de probă este mai important să fim odihniți și mulțumiți cu ce am acumulat deja. Cel mult să ne asigurăm că știm bine ce am învățat, în niciun caz să căutăm a învăța lucruri noi.
- Ce facem după probă? Mergem către extreme, sau încercăm să rămânem în echilibru indiferent de rezultat? Se întâmplă uneori ca rezultatul să nu oglindească așa cum trebuie munca depusă în pregătire. O mică greșeală poate stica în mod dezastuos punctajul. Nu trebuie să ne descurajăm. Se mai întâmpă. Tot eu sunt cel care la un anume concurs anterior am reușit ceva fabulos, deci sunt în stare, nu trebuie să mă prăbușesc, trebuie doar să stau în echilibru și să continui. Dar dacă am obținut un rezultat extrem de bun? Am obținut primul loc. Aici trebuie evitată cealaltă extremă. A înceta sau a încetini pregătirea crezând că sunt deja cel mai bun reprezintă o greșeală care pe viitor va avea consecințe dramatice. Ceilalți concurenți se vor pregăti mai bine (că doar am arătat un nivel superior pe care acum vor încerca să îl atingă). Eu, pe de altă parte îmi voi ieși din mână dacă nu mai lucrez. E destul de simplu. Da, este important să mă bucur după un rezultat foarte bun, este chiar foarte important, căci pentru asta ne pregătim, pe de altă parte este inevitabil să ne întristăm după umn eșec. Dar în ambele cazuri trebuie ca apoi să revenim în echilibru ca și cum nimic nu s-ar fi întâmplat.
- Să participăm la cât mai multe concursuri. Odată ce am ajuns la un nivel de pregătire care ne dă ceva încredere este foarte important să participăm la multe concursuri (găsim destul de des concursuri online pe pagini dedicate). O greșeală făcută într-un concurs este mult mai bine ținută minte decât dacă o facem la o problemă pe care o lucrăm individual. În plus, participarea la concursuri ne face să căpătăm experiență în gestionarea timpului și a emoțiilor. Este și o măsură a evoluției noastre odată cu acumulările pe care le facem.
- Cum ne pot influența cei din jur? După un rezultat bun adesea se creează așteptăti pentru noi din partea oamenilor cu care interacționăm: colegi, familie, prieteni, profesori. Deseori asta ne face să mergem la concurs cu o presiune suplimentară pentru a nu îi dezamăgi. De multe ori acest lucru acționează în defavoarea noastră, mai ales la început și multe sunt situațiile când putem ajunge chiar și să abandonăm o probă. Trebuie să ne obișnuim a fi impasibili la influențele negative care pot veni asupra noastră. În fond, așa cum mai spuneam, eu sunt tot acela care am performat la o probă anterioară. Se observă adesea în competițiile sportive, o echipă nu poate câștiga mereu, mai apar și eșecuri, dar lucrurile merg apoi înainte și vor urma alte victorii.
- Ce este esențial să facem în paralel cu pregătirea la informatică? Noi aici discutăm despre cum trebuie făcute lucrurile privind către performanța la informatică. Evident că este un lucru deosebit să o atingem. Iar dacă nu reușim oricum suntem foarte câștigați. Ne vom forma ca oameni disciplinați, ordonați antrenați pentru diverse încercări și oricum vom fi buni programatori. Dar informatica nu este totul, nu trebuie să ne transformăm noi înșine doar în niște mașini de scris cod. Avem timp suficient să performăm la informatică mai ales dacă îmbinăm cu alte activități: facem sport în primul rând, apoi să ieșim cu prietenii, să comunicăm cu alți oameni, să citim, să facem toate acele lucruri care ne sunt hobby.
- Cum abordăm concursurile cu mai multe probe? Concursurile al căror rezultat se obține din două sau mai multe probe în zile apropiate nu trebuie privite doar ca un număr total de probleme. Este esențială regenerarea noastră de la o probă la alta, mai ales în perioada de început. Greșeli făcute la prima probă ne pot afecta mental pentru a doua. Uneori faptul că suntem jos în clasament după prima probă ne poate face să ne prăbușim pentru a doua. De aceea este foarte important să ne resetăm și să mergem la următoarele ca și cum nimic nu s-ar fi întâmplat înainte. Sunt extrem de multe situațiile de recuperare extraordinară în a doua zi, multe cauzate de faptul că aceia care au făcut bine în prima zi nu am gestionat corect situația, intrând în proba a doua relaxați.
- Să fim mereu cu mintea conectată la probleme. Nu vom ajunge la nivel de performanță dacă nu ne conectăm mare parte din timp, și aproape zilnic să fim cu mintea la o problemă de info. Dacă scopul nostu este ca pe lângă realizarea unei anume teme să căutăm singuri alte noțiuni, să le îmbinăm cu acelea cunoscute deja, să lucrăm și alte probleme, să ne gândim mai mult timp la ele, acesta este un semn că suntem pe drumul către a face performanță. Dacă urmărim să terminăm repede tema cu orice preț și apoi uităm de info, nu este bine.
- Cum abordăm o temă cu mai multe probleme pentru o perioadă de câteva zile? Evident că a lăsa lucrurile pentru ultima zi este nu numai neprofesionist dar și greșit ca abordare. Unele probleme necesită mai mult timp de gândire, poate ne vine ideea după o zi sau două, dacă suntem focusați cu mintea acolo. Așa că trebuie parcurse problemele la începutul intervalului pentru temă și lucrate ritmic. Unele implementări dificile poate nu ies din prima și va trebui să avem timp să revenim la ele.
- Cum abordăm setul de probleme în timpul probei? Aici fiecare concurent, mai ales cei experimentați, trebuie să meargă în primul rând pe propria rețetă, aceea care l-a dus până acum la succes. Iată și câteva lucruri care cu siguranță pot ajuta. În primul rând trebuie citite de la început toate problemele. Astfel ne putem face o idee de ansmblu despre dificultatea setului, despre ce știm deja să facem și cât timp ne-ar lua. O strategie bună este să alocăm ceva timp de gândire înainte de a ne apuca să implementăm, poate ne vine o idee mai repede. Recomandarea este ca apoi să scriem surse care să ne aducă ceva puncte la subtaskurile care ni se par ușoare. În acest fel avem deja încrederea dată de faptul că am acumulat ceva puncte. Dacă însă începem cu o sursă greu de scris, există riscul să nu ne iasă, să ne enervăm în etapa de depanare și să nu mai fim suficient de lucizi (și poate intrăm în criză de timp) pentru a le scrie pe cele mai ușoare.