Kantonalno Takmicenje Iz tike v5.2

Embed Size (px)

Citation preview

Univerzitet u Sarajevu Elektrotehniki fakultet u Sarajevu

KANTONALNO TAKMIENJE IZ INFORMATIKE ZA SREDNJE KOLE ZADACI ZA PRIPREMU SA RJEENJIMA

Priredili: mr Vedran Ljubovi, dipl. ing. el. Alvin Abdagi, MoE dipl. ing. el. Marko Lali Amer Meanovi Doc. dr Samim Konjicija, dipl. ing. el.

Sarajevo, Mart 2012. godine

1

Ovaj dokument e biti aktivno doraivan. Posljednja verzija dokumenta bit e dostupna na stranici http://takmicenje.etf.unsa.ba. Trenutna verzija dokumenta je: 5.1.

Sadraj:PRAVILA KANTONALNOG TAKMIENJA IZ INFORMATIKE................................................................5 SILABUS KANTONALNOG TAKMIENJA IZ INFORMATIKE.................................................................7 1.Strategija rjeavanja programskih zadataka.............................................................................................................11 Zadatak 1.1. Prethodni i sljedei datum................................................................................................................11 Zadatak 1.2. Razlika datuma...................................................................................................................................19 Zadatak 1.3. Rimski brojevi....................................................................................................................................22 Zadatak 1.4. Numerika matematika.....................................................................................................................24 Zadatak 1.5. Bazen (jednostavnija varijanta)........................................................................................................27 2.Operacije s nizovima..................................................................................................................................................28 Zadatak 2.1. Najvei meu najmanjima................................................................................................................28 Zadatak 2.2. Histogram...........................................................................................................................................30 Zadatak 2.3. Operacije sa skupovima....................................................................................................................32 3.Prosti brojevi................................................................................................................................................................33 Zadatak 3.1. Razdvojiti proste od sloenih..........................................................................................................33 Zadatak 3.2. Kazna...................................................................................................................................................36 Zadatak 3.3. Igra.......................................................................................................................................................38 Zadatak 3.4. Prosti blizanci.....................................................................................................................................41 4.Iscrpna pretraga (exhaustive search, brute-force metod).....................................................................................43 Zadatak 4.1. Konjiev skok.....................................................................................................................................43 5.Binarna pretraga..........................................................................................................................................................46 Zadatak 5.1. Pretraga brojeva.................................................................................................................................46 6.Rekurzija.......................................................................................................................................................................49 Zadatak 6.1. Hanojske kule.....................................................................................................................................51 Zadatak 6.2. Flood fill..............................................................................................................................................53 7.Sortiranje......................................................................................................................................................................57 Zadatak 7.1. Elementarna nepogoda.....................................................................................................................59 8.Efikasno stepenovanje...............................................................................................................................................62 Zadatak 8.1. Efikasno stepenovanje......................................................................................................................62 9.Pohlepni (greedy) algoritmi.......................................................................................................................................64 Zadatak 9.1. Lopov...................................................................................................................................................64 10.Osnovna geometrijska tijela (pravougaonici, krunice)......................................................................................67 Zadatak 10.1. Majansko prokletstvo......................................................................................................................67 Zadatak 10.2. Obuhvatanje taaka.........................................................................................................................72 11.Rad sa stringovima....................................................................................................................................................75 Zadatak 11.1. Cenzura.............................................................................................................................................75 Zadatak 11.2. Pravilan jezik....................................................................................................................................75 Zadatak 11.3. Prijemni ispit....................................................................................................................................78 Zadatak 11.4. Spellchecker......................................................................................................................................79 12.Veliki broj...................................................................................................................................................................80 Zadatak 12.1. Zbir i proizvod dva velika broja....................................................................................................80 13.Grafovi i stabla..........................................................................................................................................................84 Zadatak 13.1. Presjedanje........................................................................................................................................84 2

Zadatak 13.2. BIHAMK..........................................................................................................................................87 Zadatak 13.3. Nomenklatura..................................................................................................................................91 Zadatak 13.4. Farma.................................................................................................................................................96 Literatura..........................................................................................................................................................................97

Zadatak 1.1. 1.2. 1.3. 1.4. 1.5. 2.1. 2.2. 2.3. 3.1. 3.2. 3.3. 3.4. 4.1. 5.1. 6.1. 6.2. 7.1. 8.1. 9.1. 10.1. 10.2. 11.1. 11.2. 11.3. 11.4. 12.1. Prethodni i sljedei datum Razlika datuma Rimski brojevi Numerika matematika Bazen (jednostavnija varijanta) Najvei meu najmanjima Histogram Operacije sa skupovima Razdvojiti proste od sloenih Kazna Igra Prosti blizanci Konjiev skok Pretraga brojeva Hanojske kule Flood fill Elementarna nepogoda Efikasno stepenovanje Lopov Majansko prokletstvo Obuhvatanje taaka Cenzura Pravilan jezik Prijemni ispit Spellchecker

Naziv

Teina O S O S O O S O S S S S N N N N N S N N S S S-N S S-N N

Zbir i proizvod dva velika broja3

13.1. 13.2. 13.3. 13.4. Legenda:

Presjedanje BIHAMK Nomenklatura Farma

N N N I

O osnovno znanje (oekuje se da zadatak moe uraditi uesnik sa znanjem steenim u redovnoj srednjokolskoj nastavi, bez posebne pripreme) S srednje (preporuujemo takmiarima da ponove ove oblasti) N napredne teme (teme koje su mogue na kantonalnom takmienju (max. jedan zadatak), potrebna je posebna priprema) I teme koje nee biti obuhvaene kantonalnim takmienjem, ali su mogue na dravnom takmienju iz informatike i meunarodnoj olimpijadi (IOI)

4

PRAVILA KANTONALNOG TAKMIENJA IZ INFORMATIKESvi zadaci na Kantonalnom takmienjimu iz informatike iskljuivo su programerski zadaci i teite je na dizajniranju ispravnog i (vremenski i memorijski) efikasnog algoritma. Zadaci se mogu rjeavati u bilo kojem od ponuenih programskih jezika. Ulazne i izlazne operacije ograniavaju se na osnovne operacije (itanje iz tekstualne datoteke i upis u tekstualnu datoteku), tako se panja takmiara moe usmjeriti na sam algoritam. Taan pregled oblasti i tema koje su obuhvaene takmiarskim zadacima (silabus) dostupan je u nastavku dokumenta. Oprema, pribor i materijal za takmienje, tok takmienja Za takmienje se koriste standardni PC raunari sa ogranienim mrenim pristupom. Takmiari e na radnim mjestima dobiti printane verzije zadataka za takmienje, dovoljno praznih papira, pribor za pisanje i pristupne podatke za takmiarski web interfejs. Takmiarima nije dozvoljeno unositi bilo kakav dodatni pribor, literaturu ili opremu. Takmiarima je doputena samo usmena komunikacija sa osobom koja je deurna u kabinetu ili sa administratorom i to iskljuivo na temu line ili tehnike prirode a nikako na temu zadataka. Bilo kakvo odstupanje od ovih pravila rezultirat e diskvalifikacijom. Programski jezici i okruenje Takmiarima je doputeno koritenje programskih jezika Pascal i C/C++ za izradu rjeenja. Na samom takmienju, raunari e biti sa instaliranim Linux (Ubuntu) operativnim sistemom, te FreePascal i Code::Block razvojnim okruenjima. Svi detalji o okruenju mogu se preuzeti sa web stranice http://takmicenje.etf.unsa.ba Broj zadataka i trajanje takmienja Takmiari imaju 120 minuta za izradu rjeenja. Takmiari e usmeno biti napomenuti onda kada do kraja takmienja ostane 15 minuta i 5 minuta. Rjeavaju se tri zadatka. Ogranienja i zahtjevi na program Va program treba da ulazne podatke ita iz ulazne datoteke, te da svoja rjeenja zapisuje u izlaznu datoteku. Nazivi i format sadraaja obje datoteke bit e precizno definiran za svaki zadatak. Va program ne smije koristiti bilo kakve druge datoteke osim dvije navedene. Va program treba da se izvrava unutar odreenih vremenskih i memorijskih ogranienja koja e biti navedena za svaki zadatak. Zabranjeno je pozivanje bilo kakvih drugih sistemskih funkcija kao i fork-anje (otvaranje dodatnih thread-ova). Ispravnost zapisane izlazne datoteke bit e provjeravana samo ukoliko je program sa izvravanjem zavrio normalno, odnosno ako je operativnom sistemu vratio vrijednost 0. Sistem bodovanja Evaluacija takmiarskih rjeenja vri se automatiziranim sistemom odmah po zavretku takmienja. Za svaki zadatak komisija unaprijed definie skup testova koje e sistem provesti. Svaki test se evaluira individualno i nosi odreeni broj bodova. Test se sastoji od sadraja ulazne datoteke i oekivanog sadraja izlazne datoteke. Test se smatra uspjenim i za njega se dodjeljuju bodovi onda kada takmiarski program pod ranije navedenim ogranienjima za specifini sadraj ulazne datoteke generie oekivani sadraj izlazne datoteke. Neophodno je pridravati se tano definisanih formata obje datoteke. Svaki zadatak e ukljuivati dovoljan broj testova razliite kompleksnosti kako bi se na taj nain osigurala adekvatna distribucija bodova u skladu sa vremenskom i memorijskom efikasnou takmiarskog rjeenja (uz neophodnu ispravnost rjeenja). Takmiarski web interfejs 5

Takmiari e za vrijeme takmienja imati ogranien mreni pristup samo prema serveru za takmienje kroz web preglednik u vidu takmiarskog web interfejsa. Ovaj interfejs prvenstveno omoguava takmiarima da alju svoju rjeenja za vrijeme takmienja. Jedino rjeenja poslata na ovaj nain e biti evaluirana na ranije opisani nain. Nakon slanja rjeenja, sistem e rjeenje odmah testirati na jednom ili vie tzv. trivijalnih testova i rezultate ponuditi takmiaru. Sadraj ulaznih datoteka trivijalnih testova kao i oekivani sadraj izlaznih datoteka ovih testova bit e dostupan takmiarima u sklopu postavke zadatka. Trivijalni testovi su po sloenosti jako jednostavni i slue kako bi se testiralo da li takmiar ispravno koristi ulazne i izlazne datoteka, pridrava se navedenog formata ulaznih i izlaznih podataka i slino. Trivijalni testni sluajevi ne donose nikakve poene, ali se rjeenja koja ne prolaze trivijalne testove nee evaluirati po zavretku takmienja i bodovat e se sa 0 bodova. Ne postoji ogranienje na broj koliko puta takmiar smije poslati rjeenje nekog zadataka. Posljenje rjeenje koje je prolo trivijalne testove za odreeni zadatak e biti testirano po zavretku takmienja. Takmiarski web interfejs e se koristiti i za eventualna pitanja koja takmiari mogu imati za komisiju. Takmiari e prije samog takmienja imati priliku da se upoznaju sa takmiarskim web interfejsom. Termini kada e ovo biti mogue e biti objavljeni na stranici http://takmicenje.etf.unsa.ba Pitanja Takmiari pitanja postavljaju i komisija na njih daje odgovor kroz takmiarski web interfejs. Komisija na pitanja takmiara moe dati odgovor DA, NE ili BEZ KOMENTARA. Pitanja trebaju biti postavljena tako da je na njih mogu DA ili NE odgovor. Ukoliko pitanje nije tako postavljeno, komisija daje odgovor BEZ KOMENTARA. Osim toga, ukoliko takmiar postavi pitanje na koje komisija ne moe dati odgovor zato to bi to u nepovoljan poloaj dovela druge takmiare, daje se odgovor BEZ KOMENTARA. U sluajevima kada se daje odgovor BEZ KOMENTARA, komisija moe dodatno pojasniti zato takmiar nije dobio odgovor na svoje pitanje. Rezultati i reklamacije Po zavretku automatske evaluacije, objavljuju se preliminarni rezultati. Takmiari mogu koritenjem pristupnih podataka koje se koristili i za vrijeme takmienja, pristupiti takmiarskom web interfejsu. Interfejs e po zavetku takmienja omoguiti detaljan pregled svih testova i rezultata testiranja. Svi eventualni prigovori podnose se u pismenoj formi komisiji koja ih razmatra.

6

SILABUS KANTONALNOG TAKMIENJA IZ INFORMATIKE(pregled oblasti i tema koje su obuhvaene takmiarskim zadacima)Legenda zahtjevnosti pojedinih oblasti: O osnovno znanje (oekuje se da zadatak moe uraditi uesnik sa znanjem steenim u redovnoj srednjokolskoj nastavi, bez posebne pripreme) S srednje (preporuujemo takmiarima da ponove ove oblasti) N napredne teme (teme koje su mogue na kantonalnom takmienju (max. jedan zadatak), potrebna je posebna priprema) I teme koje nee biti obuhvaene kantonalnim takmienjem, ali su mogue na dravnom takmienju iz informatike i meunarodnoj olimpijadi (IOI) Znanja iz domena osnovne raunarske pismenosti koja su preduslov za uee na takmienju su: Osnovna struktura i nain rada raunara (CPU, memorija, ulaz/izlaz) Upotreba standardnog grafikog okruenja Upotreba uobiajenih pomonih aplikacija u operativnom sistemu Upotreba integrisanog razvojnog okruenja (IDE) Rad sa datotenim sistemom (kreiranje direktorija/foldera, kopiranje, premjetanje i brisanje datoteka) Upotreba web preglednika i rad sa internetom (posebno: slanje datoteke putem web preglednika) 1. MATEMATIKA Teina TEMA O O O O O O I S O Cijeli brojevi (engl. integers) i brojevni sistemi Matematike operacije i poreenja Osobine cijelih brojeva (pozitivni/negativni, parni/neparni, djeljivost, prosti brojevi /engl. primes/) Razlomci, postotni raun Take u Dekartovom koordinatnom sistemu (dvodimenzionalnom), vektori Euklidova udaljenost, Pitagorina teorema Dui, osobine presjeka Uglovi Osnovni geometrijski oblici: trougao, pravougaonik, kvadrat, krug 7

I O I O I I N S S N S S I

Vieugaonik (poligon) Matematske funkcije, relacije, skupovi Dirihleov princip Osnove matematske logike (logike operacije, istinosne tabele) Napredne teme iz matematske logike (predikatska logika, modus ponens i modus tolens) Tehnike dokazivanja (direktan dokaz, dokaz preko kontradikcije, matematska indukcija) Nizovi, redovi, aritmetike i geometrijske progresije, Fibonaijevi brojevi Permutacije i kombinacije Faktorijel, binomni koeficijenti, Paskalova jednaina, binomni teorem Stabla Neusmjereni i usmjereni grafovi Strategije prolaska kroz grafove Spanning trees, decorated graphs, multigraphs 2. OSNOVE PROGRAMIRANJA I STRUKTURE PODATAKA

Teina TEMA O O O O O O O S S S N O O O S N N Osnove sintakse i semantike programskog jezika Pascal ili C Promjenljive (varijable), tipovi podataka (boolean, integer, character), izrazi, naredba dodjele Jednostavan ulaz/izlaz Uslovi i grananje Petlje Funkcije, prosljeivanje parametara Strukturna dekompozicija problema (razbijanje problema na podprobleme) Strategije rjeavanja programskih zadataka Pojam algoritma, uloga algoritma u procesu rjeavanja zadatka Strategije uklanjanja greaka (debugging) Osobine algoritama: korektnost, efikasnost Nizovi (arrays) Slogovi (records) Stringovi (strings) Statike (static) i globalne (global) varijable Linkovane liste (linked list) - implementacija preko niza Grafovi (graph) i stabla (tree) - implementacija preko niza 8

I I I I N I I

Stekovi (stack) i redovi (queue) - implementacija preko niza Gomile (heap), Fenwick-ovo stablo Strategije za izbor optimalne strukture podataka Apstraktni tipovi podataka (abstract data types - ADT), prioritetni red (priority queue), dinamiki skup (dynamic set), dinamika mapa (dynamic map) Rekurzija (recursion), jednostavne rekurzivne procedure Rekurzivne matematske funkcije Strategije "zavadi-pa-vladaj" (divide-and-conquer) 3. ALGORITMI

Teina TEMA I I I I O S N I I I S I I O O S S S S N O Formalna specifikacija algoritama, korektnost, invarijantnost Asimptotska analiza gornje granice kompleksnosti, big-O notacija Standardni sluajevi kompleksnosti Vremenski i prostorni kompromisi u algoritmima Jednostavne strategije dizajna petlje Algoritmi brutalne sile (brute-force), odnosno iscrpne pretrage (exhaustive search) Pohlepni (greedy) algoritmi Algoritmi "zavadi-pa-vladaj" (divide-and-conquer) Backtracking algoritmi (rekurzivni i nerekurzivni) Branch-and-bound algoritmi Prepoznavanje uzoraka i algoritmi za rad sa stringovima (pri emu se ne zahtijeva razumijevanje korektnosti i efikasnosti ovih algoritama) Dinamiko programiranje (dynamic programming) Algoritmi diskretne aproksimacije (discrete approximation) Algoritmi za konverziju brojevnih sistema Euklidov algoritam Provjera da li je broj prost Erastotenovo sito Faktorizacija Efikasno stepenovanje Operacije nad cijelim brojevima proizvoljnog broja cifara Popunjavanje niza 9

S S S O S O O S S I N N I I I I I I S

Pomjeranje niza, izbacivanje elementa iz niza, rotiranje niza Okretanje niza Promjena veliine niza Traenje najveeg/najmanjeg lana u nizu Histogram niza (prebrojavanje lanova niza) Sumiranje niza (ukljuujui parcijalne sume) Sekvencijalna obrada lanova niza (ukljuujui sekvencijalno pretraivanje niza) Binarna pretraga (binary search) Jednostavni algoritmi sortiranja: selection sort, insertion sort, bubble sort Quick sort, Heap sort, Merge sort Algoritmi za kretanje kroz grafove (implementirane preko niza), ukljuui kretanje po dubini (depth-first search - DFS) i po irini (breadth-first search - BFS) Algoritmi za kretanje kroz stablo (implementirano preko niza) Algoritmi najkraeg puta (Dijkstra, Bellman-Ford, Floyd-Warshall) Algoritmi minimalnog stabla (Jarnik-Prim, Kruskal) Topoloko sortiranje Algoritmi za odreivanje Eulerovog puta/ciklusa Osnove teorije igara, minimaks algoritmi Geometrijski algoritmi (presjeci dui, lokacija take u poligonu, algoritmi za odreivanje konveksnog omotaa /convex hull/ itd.) ali: Lociranje take u osnovnim geometrijskim oblicima: krunica, pravougaonik, kvadrat

10

1. Strategija rjeavanja programskih zadatakaU nastavku smo dali nekoliko primjera zadataka u kojima se diskutuje generalan pristup rjeavanju programskih zadataka kod kojih ne postoji neki specifian algoritam ili model rjeavanja, nego je potrebno koristiti zdrav razum, dekompoziciju problema i proceduralni pristup.

Zadatak 1.1. Prethodni i sljedei datumTeina: O Ovaj zadatak je bio na Kantonalnom takmienju iz informatike 2010. godine Dat je niz datuma u obliku "dd mm gggg". Za svaki datum potrebno je ispisati prethodni i sljedei datum. Da bi neka godina bila prestupna mora biti djeljiva sa 4. Meutim, od onih godina koje su djeljive sa 4, godine koje su djeljive sa 100 a nisu sa 400 nisu prestupne. Npr. 1900. nije bila prestupna dok je 2000. godina bila prestupna. U prestupnoj godini mjesec februar ima 29 dana dok u ostalim godina ima 28. Ulaz: Najprije je dat jedan cijeli broj N (maksimalno 100) koji predstavlja broj datuma. Nakon toga, svaka linija ulaza sastoji se od tri cijela broja razdvojena znakom razmak koji predstavljaju dan, mjesec i godinu. Izlaz: Za svaku liniju ulaza treba ispisati tekst oblika: Datum: dd.mm.gggg Predhodni dd.mm.gggg. Naredni dd.mm.gggg. godine ili, ukoliko je datum na ulaznoj liniji neispravan, treba ispisati: Datum: dd.mm.gggg neispravan. Primjer ulaza: 5 28 2 1900 1 3 1900 28 2 2000 1 3 2000 29 2 2001 Primjer izlaza: Datum: 28.2.1900 Prethodni 27.2.1900. Naredni 1.3.1900. godine Datum: 1.3.1900 Prethodni 28.2.1900. Naredni 2.3.1900. godine Datum: 28.2.2000 Prethodni 27.2.2000. Naredni 29.2.2000. godine Datum: 1.3.2000 Prethodni 29.2.2000. Naredni 2.3.2000. godine Datum: 29.2.2001 neispravan. Pojanjenje: Kao i svi programski zadaci, ovaj zadatak treba rjeavati dio po dio kreui od stvari koje su vam poznate, te koristiti osobinu programskih jezika da dijelove problema izdvojite u zasebne cjeline (funkcije) kako biste ih odvojeno rjeavali i testirali. Najprije emo uraditi najlaki dio zadatka, a to je napraviti petlju za unos niza od n datuma i njihov ispis na 11

ekran u traenom formatu: "Datum: dd.mm.yyyy". Bie nam potrebne sljedee varijable (promjenljive): cjelobrojne promjenljive za dan, mjesec i godinu cjelobrojna promjenljiva n za broj datuma poto za blok koda koji se izvrava poznat broj puta koristimo for petlju, uveemo i cjelobrojnu promjenljivu i kao kontrolnu promjenljivu for petlje. Programski jezik C:int n,i; scanf("%d",&n); int dd,mm,gg; for(i=0;i