{"id":1982,"date":"2011-07-26T22:50:00","date_gmt":"2011-07-26T22:50:00","guid":{"rendered":"https:\/\/zrstest.zrs.hr\/index.php\/2011\/07\/26\/programerski-osvrt-na-drugo-kolo-ljetne-lige-c-2011-za-kadete\/"},"modified":"2011-07-26T22:50:00","modified_gmt":"2011-07-26T22:50:00","slug":"programerski-osvrt-na-drugo-kolo-ljetne-lige-c-2011-za-kadete","status":"publish","type":"post","link":"https:\/\/zrs.hr\/index.php\/2011\/07\/26\/programerski-osvrt-na-drugo-kolo-ljetne-lige-c-2011-za-kadete\/","title":{"rendered":"Programerski osvrt na drugo kolo Ljetne lige C++ 2011 za kadete"},"content":{"rendered":"<p>\n\tDanas je zavr&scaron;eno 2. kolo ljetne lige C++ za kadete. Zadaci su ovog puta malo poja\u010dani, &scaron;to mo\u017eemo i pro\u010ditati iz samih <a href=\"http:\/\/zatemas.zrs.hr\/?app=contest2&amp;show=results&amp;groupid=16&amp;id=67&amp;roundid=286&amp;categoryid=143&amp;viewid=-1\">rezultata<\/a> :-).<\/p>\n<p>\n\tPonovno smo nai&scaron;li na razli\u010dite i zanimljive pristupe, posebice u tre\u0107em zadatku &quot;otoci&quot;. \ud83d\ude42<br \/>\n\tIsto tako, drago nam je da su nekim natjecateljima svi &quot;pravci&quot; uvijek paralelni :-P, iako nam nije drago da se jo&scaron; uvijek poku&scaron;ava dijeliti s nulom \ud83d\ude41<br \/>\n\t&Scaron;to se ti\u010de sortiranja stringova, ono je leksi\u010dko, te duljina niza nije primarni kriterij (zadatak &quot;Max-suma&quot;), tako da bi poravnanje sa prefiksnim nulama bilo od pomo\u0107i, a ne bi bio niti veliki problem uvesti vlastiti kriterij usporedbe&#8230;<\/p>\n<p>\n\t<strong>Slijedi nekoliko dobrih praksi i pravila kojih bi se trebali pridr\u017eavati svi natjecatelji pri rije&scaron;avanju zadataka i predaji rje&scaron;enja:<\/strong><\/p>\n<p>\n\t1) Valja pripaziti na imenovanje datoteka, ime datoteke s rje&scaron;enjem se uvijek nalazi pri samom dnu teksta zadatka.<br \/>\n\t2) Preporuka je radi uniformnosti, prije predavanja rje&scaron;enja zakomentirati ili obrisati svaku pojavu <strong>system(&quot;pause&quot;);&nbsp;<\/strong><br \/>\n\t3) Ispis valja zavr&scaron;iti u novom retku, dakle zadnji znak koji bi trebalo ispisati je <strong>endl. <\/strong>Drugim rije\u010dima korisite <strong>cout &lt;&lt; endl;<\/strong> ili <strong>printf(&quot;&bsol;n&quot;);<\/strong><br \/>\n\t4) U svakom zadatku su zadana ograni\u010denja (tipovi podataka i veli\u010dina podataka), te iste uvijek valja uzeti u obzir.<br \/>\n\t5) Memorijsko ograni\u010denje je u pravilu 32 MB po zadatku, a vremensko je do 30 sekundi po test primjeru.&nbsp;<\/p>\n<p>\n\t<strong>Evo i nekoliko prijedloga koji se ti\u010du tipova podataka te njihovog unosa i ispisa:<\/strong><br \/>\n\t&#8211; Za cijele brojeve koristimo <strong>int <\/strong>(%d)<br \/>\n\t&#8211; Za racionalne brojeve koristiom <strong>float <\/strong>(%f), a za racionalne brojeve dvostruke preciznosti <strong>double <\/strong>(%lf), koristimo izraz &quot;racionalni&quot;, jer realni brojevi ne mogu biti pokriveni budu\u0107i sadr\u017ee i iracionalne brojeve koje u stvarnosti i ne mo\u017eemo to\u010dno zapisati u ra\u010dunalu (ograni\u010deni smo veli\u010dinom registra &#8230;), a niti na papiru (izuzev simboli\u010dkih zapisa)<br \/>\n\t&#8211; za formatirani ispis valja koristiti <strong>printf <\/strong>naredbu: npr za racionalni broj zaokru\u017een na 2 decimale pi&scaron;emo <strong>printf(&quot;%.2f&quot;);<br \/>\n\t&#8211; <\/strong>kada \u017eelimo napraviti desno poravnanje brojeva (npr. na 10 mjesta) onda pi&scaron;emo <strong>printf(&quot;%10f&quot;);<\/strong> ili <strong>printf(&quot;%10d&quot;);<\/strong><\/p>\n<p>\n\t<strong>Za semda&scaron;e, a pogotovo osma&scaron;e, bilo bi dobro da prou\u010de i izvje\u017ebaju odre\u0111ene algoritme, <\/strong><br \/>\n\tposebice su zanimljivi BFS:&nbsp;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Breadth-first_search\">http:\/\/en.wikipedia.org\/wiki\/Breadth-first_search<\/a>&nbsp;i DFS:&nbsp;<a href=\"http:\/\/en.wikipedia.org\/wiki\/Depth-first_search\">http:\/\/en.wikipedia.org\/wiki\/Depth-first_search<\/a><\/p>\n<p>\n\t<strong>Od ostalih, svakako bi trebalo poznavati sljede\u0107e strukture podataka i algoritme:<br \/>\n\t&#8211; <\/strong>Apsolutno sve &scaron;to se ti\u010de stringova i charova<br \/>\n\t&#8211; Stack, Queue, FIFO i LIFO, vezane liste, cirkularne liste, &#8230;<br \/>\n\t&#8211; Longest Common Substring (algoritam za najdulji zajedni\u010dki podniz)<br \/>\n\t&#8211; Euklidov algoritam najve\u0107e zajedni\u010dke mjere<br \/>\n\t&#8211; Eratostenovo sito za mapiranje prostih brojeva od 2 &#8211; N.<br \/>\n\t&#8211; Rastav brojeva na proste faktore<br \/>\n\t&#8211; Binarno pretra\u017eivanje i binarna stabla<br \/>\n\t&#8211; Formule za sumu i pronalazak \u010dlanova aritmeti\u010dkih i geometrijskih nizova<br \/>\n\t&#8211; Algoritam za pronalak te\u017ei&scaron;ta poligona<br \/>\n\t&#8211; Algoritmi za izra\u010dun presjeka, unije i razlike realnih intervala<br \/>\n\t&#8211; Algoritmi za ra\u010dunanje s velikim brojevima, odnosno zbrajanje, oduzimanje i mno\u017eenje &quot;stringova&quot;<br \/>\n\t&#8211; Algoritmi za kriptiranje podataka, barem oni najosnovniji &#8211; bazirani na XOR-u \ud83d\ude42<br \/>\n\t&#8211; Dvodimenzionalne matrice su uvijek posebno zanimljive, kretanje \u010dovje\u010duljka i izbjegavanje prepreka je \u010desta pojava \ud83d\ude42<br \/>\n\t&#8211; C++ strukture <strong>pair<\/strong>, <strong>vector<\/strong> i <strong>map<\/strong> te pripadne metode i iteratore nad tim objektima<br \/>\n\t&#8211; zatim uporaba funkcija <strong>sort<\/strong> i <strong>reverse<\/strong> (i ostalo iz &lt;algorithm&gt;), kod sort funkcije svakako obratiti pa\u017enju na mogu\u0107nost uvo\u0111enja vlastite funkcije za usporedbu elemenata (compare function)<br \/>\n\t&#8211; uvo\u0111enje vlastitih struktura podataka (<strong>typedef struct { .. }<\/strong> )<br \/>\n\t&#8211; kod rekurzivnih rje&scaron;enja, valja se zapitati da li postoji dinami\u010dki pristup (mapiranje izra\u010duna)<br \/>\n\t&#8211; kada sve ostalo zaka\u017ee, valja krenuti heuristi\u010dkim putem :-), a kada i to zaka\u017ee, uvijek preostaje brute force i mapiranje rje&scaron;enja \ud83d\ude42<br \/>\n\t&#8230;<\/p>\n<p>\n\t&nbsp;<\/p>\n<p>\n\t<strong>Evaluacija na ovoj Ljetnoj ligi te na IBT-u za mla\u0111e kadete se vr&scaron;i pomo\u0107nim evaluatorom, koji radi sljede\u0107e zada\u0107e:<\/strong><\/p>\n<p>\n\t1) Prevodi natjecateljska rije&scaron;enja sa g++ compiler-om<br \/>\n\t2) Poziva natjecateljske izvr&scaron;ne verzije (.exe) sa preusmjerenim ulazom na test primjere, te nakon toga se poziva u istom re\u017eimu slu\u017ebeno rje&scaron;enje<br \/>\n\t3) Test primjeri se izmi&scaron;ljaju ru\u010dno ili sa pomo\u0107nim programom koji ih generira, a tada su oni posve nasumi\u010dni te u granicama zadanim u tekstu zadatka.<br \/>\n\t4) Provjera ispravnosti rje&scaron;enja se radi ru\u010dnim putem: usporedbom natjecateljskih izlaza sa slu\u017ebenim izlazima<br \/>\n\t5) Bodovi se mogu dijeliti na na\u010din da se priznaju samo potpuno ispravni izlazi, ili se mogu dijeliti djelomi\u010dni bodovi za djelomi\u010dna rje&scaron;enja, a to ovisi isklju\u010divo o prirodi samog zadatka. Tako recimo za zadatke koji tra\u017ee 3 izlaza, mo\u017ee se davati po tre\u0107ina ili polovina bodova za djelomi\u010dna rje&scaron;enja.&nbsp;<\/p>\n<p>\n\tToliko u ovom osvrtu, puno sre\u0107e na preostalim kolima!<\/p>\n<p>\n\t<em>Autor zadataka C++<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Danas je zavr&scaron;eno 2. kolo ljetne lige C++ za kadete. Zadaci su ovog puta malo poja\u010dani, &scaron;to mo\u017eemo i pro\u010ditati iz samih rezultata :-). Ponovno smo nai&scaron;li na razli\u010dite i zanimljive pristupe, posebice u tre\u0107em zadatku &quot;otoci&quot;. \ud83d\ude42 Isto tako, drago nam je da su nekim natjecateljima svi &quot;pravci&quot; uvijek paralelni :-P, iako nam nije [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":1983,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14,23],"tags":[],"class_list":["post-1982","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-obavijesti","category-ljeto-u-zagrebu"],"_links":{"self":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/posts\/1982","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/comments?post=1982"}],"version-history":[{"count":0,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/posts\/1982\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/media\/1983"}],"wp:attachment":[{"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/media?parent=1982"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/categories?post=1982"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/zrs.hr\/index.php\/wp-json\/wp\/v2\/tags?post=1982"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}