Algoritmi SŠ P1

Слични документи
2015_k2_z12.dvi

Algoritmi SŠ P1

Državna matura iz informatike

(Microsoft Word - Dr\236avna matura - svibanj osnovna razina - rje\232enja)

(Microsoft Word - Dr\236avna matura - studeni osnovna razina - rje\232enja)

(Microsoft Word - Dr\236avna matura - lipanj osnovna razina - rje\232enja)

(Microsoft Word - Dr\236avna matura - kolovoz ni\236a razina - rje\232enja)

Matematika 1 - izborna

Programiranje 1 9. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog1 2018, 9. predavanje p. 1/6

Matematika kroz igru domino

ALIP1_udzb_2019.indb

Microsoft PowerPoint - C-4-1

(Microsoft Word - Rje\232enja zadataka)

(Microsoft Word - Dr\236avna matura - kolovoz osnovna razina - rje\232enja)

(Microsoft Word - Dr\236avna matura - kolovoz osnovna razina - rje\232enja)

SVEUČILIŠTE U ZAGREBU PRIRODOSLOVNO MATEMATIČKI FAKULTET MATEMATIČKI ODSJEK Ivana Šore REKURZIVNOST REALNIH FUNKCIJA Diplomski rad Voditelj rada: doc.

PowerPoint Presentation

Konstrukcija i analiza algoritama vežbe 10 Nina Radojičić 15. decembar Algoritamske strategije - podeli pa vladaj (divide and conquer) Ova stra

Infokup - Školsko Osnovne škole Algoritmi BaPaCpp

Microsoft Word - AIDA2kolokvijumRsmerResenja.doc

8 2 upiti_izvjesca.indd

Microsoft Word - 12ms121

Test ispravio: (1) (2) Ukupan broj bodova: 21. veljače od 13:00 do 14:00 Županijsko natjecanje / Osnove informatike Osnovne škole Ime i prezime

ŽUPANIJSKO NATJECANJE IZ MATEMATIKE 28. veljače razred - rješenja OVDJE SU DANI NEKI NAČINI RJEŠAVANJA ZADATAKA. UKOLIKO UČENIK IMA DRUGAČIJI

Microsoft Word - Rjesenja zadataka

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

7. predavanje Vladimir Dananić 14. studenoga Vladimir Dananić () 7. predavanje 14. studenoga / 16

(Microsoft Word - MATB - kolovoz osnovna razina - rje\232enja zadataka)

JMBAG IME I PREZIME BROJ BODOVA 1. (ukupno 6 bodova) MJERA I INTEGRAL 1. kolokvij 4. svibnja (Knjige, bilježnice, dodatni papiri i kalkulatori n

(Microsoft Word - Dr\236avna matura - rujan osnovna razina - rje\232enja)

Uvod u računarstvo 2+2

18. ožujka Državno natjecanje / Osnovna škola (6. razred) Primjena algoritama (Basic/Python/Pascal/C/C++) Sadržaj Zadaci... 1 Zadatak: Kineski..

Microsoft Word - 6ms001

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL završni ispit 6. srpnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1.

Tutoring System for Distance Learning of Java Programming Language

Hej hej bojiš se matematike? Ma nema potrebe! Dobra priprema je pola obavljenog posla, a da bi bio izvrsno pripremljen tu uskačemo mi iz Štreberaja. D

JMBAG IME I PREZIME BROJ BODOVA 1. (ukupno 20 bodova) MJERA I INTEGRAL Popravni ispit 7. rujna (Knjige, bilježnice, dodatni papiri i kalkulatori

Microsoft Word - DIOFANTSKE JEDNADŽBE ZADACI docx

Numeričke metode u fizici 1, Projektni zadataci 2018./ Za sustav običnih diferencijalnih jednadžbi, koje opisuju kretanje populacije dviju vrs

Algebarski izrazi (4. dio)

Програмирај!

Programiranje 2 popravni kolokvij, 15. lipnja Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanj

Univerzitet u Novom Sadu Tehnički fakultet Mihajlo Pupin Zrenjanin Seminarski rad Predmet: Konkuretno programiranje doc. dr Dejan Lacmanovic Zorica Br

Slide 1

Microsoft Word - predavanje8

Natjecanje 2016.

Programiranje 2 0. predavanje Saša Singer web.math.pmf.unizg.hr/~singer PMF Matematički odsjek, Zagreb Prog2 2019, 0. predavanje p. 1/4

Programiranje 1 drugi kolokvij, 2. veljače Ime i prezime: JMBAG: Upute: Na kolokviju je dozvoljeno koristiti samo pribor za pisanje i brisanje,

PRIRODNO MATEMATIČKI FAKULTET U NIŠU DEPARTMAN ZA RAČUNARSKE NAUKE Utorak, godine PRIJEMNI ISPIT IZ INFORMATIKE 1. Koja od navedenih ekste

Agencija za odgoj i obrazovanje Hrvatska zajednica tehničke kulture 57. ŽUPANIJSKO/KLUPSKO NATJECANJE MLADIH TEHNIČARA PISANA PROVJERA ZNANJA 5.

Računarski praktikum I - Vježbe 11 - Funktori

Microsoft Word - 15ms261

My_P_Red_Bin_Zbir_Free

MIP-heuristike (Matheuristike) Hibridi izmedu metaheurističkih i egzaktnih metoda Tatjana Davidović Matematički institut SANU

Државно такмичење године 5. и 6. разред 1. [pločice] Правоугаону терасу димензија d s центиметара квадратних треба поплочати коришћењем плочица

PROGRAMIRANJE Program je niz naredbi razumljivih računalu koje rješavaju neki problem. Algoritam je postupak raščlanjivanja problema na jednostavnije

SKUPOVI TOČAKA U RAVNINI 1.) Što je ravnina? 2.) Kako nazivamo neomeđenu ravnu plohu? 3.) Što je najmanji dio ravnine? 4.) Kako označavamo točke? 5.)

Uvod u obične diferencijalne jednadžbe Metoda separacije varijabli Obične diferencijalne jednadžbe Franka Miriam Brückler

Grafovi 1. Posmatrajmo graf prikazan na slici sa desne strane. a) Odrediti skup čvorova V i skup grana E posmatranog grafa. Za svaku granu posebno odr

vjezbe-difrfv.dvi

(Microsoft Word - MATB - kolovoz vi\232a razina - rje\232enja zadataka)

JMBAG IME I PREZIME BROJ BODOVA MJERA I INTEGRAL 2. kolokvij 29. lipnja (Knjige, bilježnice, dodatni papiri i kalkulatori nisu dozvoljeni!) 1. (

PowerPoint Presentation

knjiga.dvi

РЕПУБЛИКА СРПСКА МИНИСТАРСТВО ПРОСВЈЕТЕ И КУЛТУРЕ РЕПУБЛИЧКИ ПЕДАГОШКИ ЗАВОД Милоша Обилића 39 Бањалука, Тел/факс 051/ , 051/ ; p

The real problem is that programmers have spent far too much time worrying about efficiency in the wrong places and at the wrong times; premature opti

(Microsoft Word - Dr\236avna matura - lipanj osnovna razina - rje\232enja)

Microsoft Word - PARCIJALNI IZVODI I DIFERENCIJALI.doc

Microsoft Word - 6. RAZRED INFORMATIKA.doc

No Slide Title

KDP

(Microsoft Word - Dr\236avna matura - rujan vi\232a razina - rje\232enja)

Grananje u programu predavač: Nadežda Jakšić

Slide 1

P1.1 Analiza efikasnosti algoritama 1

Diferenciranje i integriranje pod znakom integrala math.e Vol math.e Hrvatski matematički elektronički časopis Diferenciranje i integriranje pod

My_P_Trigo_Zbir_Free

Programski jezici i strukture podataka 2018/2019. Programski jezici i strukture podataka Računarske vežbe vežba 10 Zimski semestar 2018/2019. Studijsk

Microsoft Word - Pripremni zadatci za demonstrature

(Kvantitativne metode odlu\350ivanja \226 problem optimalne zamjene opreme | math.e)

Programiranje II Beleške sa vežbi Smer Informatika Matematički fakultet, Beograd Sana Stojanović 1

Veeeeeliki brojevi

Matrice. Algebarske operacije s matricama. - Predavanje I

GLAZBENO DRUŠTVO „CVJETIĆI GLAZBE”

(Microsoft Word - MATA - ljeto rje\232enja)

1 Polinomi jedne promenljive Neka je K polje. Izraz P (x) = a 0 + a 1 x + + a n x n = n a k x k, x K, naziva se algebarski polinom po x nad poljem K.

Često postavljana pitanja u programu OBRT 1. Kako napraviti uplatu u knjizi tražbina i obveza? 2. Kako odabrati mapu/disk za pohranu podataka? 3. Kako

Dvostruki integrali Matematika 2 Erna Begović Kovač, Literatura: I. Gusić, Lekcije iz Matematike 2

Funkcije predavač: Nadežda Jakšić

PASCAL UVOD 2 II razred gimnazije

DRŽAVNO NATJECANJE IZ MATEMATIKE Primošten, 4.travnja-6.travnja razred-rješenja OVDJE SU DANI NEKI NAČINI RJEŠAVANJA ZADATAKA. UKOLIKO UČENIK

Рачунарска интелигенција

(Microsoft Word - Dr\236avna matura - lipanj osnovna razina - rje\232enja)

4

Sos.indd

Maksimalni protok kroz mrežu - Ford-Fulkerson, Edmonds-Karp

Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: min c T x Ax = b x 0 x Z n Gde pretpostavljamo da je A celobrojna matrica

Logičke izjave i logičke funkcije

Optimizacija

PowerPoint Presentation

Транскрипт:

Županijsko natjecanje iz informatike Srednja škola 9. veljače 2018. RJEŠENJA ZADATAKA Napomena: kodovi za većinu opisanih algoritama dani su u Pythonu radi jednostavnosti i lakše čitljivosti. Zbog prirode jezika, rješenja u Pythonu sporija su od ekvivalentnih rješenja u C++u pa natjecateljima preporučujemo da u slučaju potrebe za bržim rješenjem koriste C++. Stranica 1 od 5

Zadatak BITCOIN Ako su odabrani dani s rednim brojevima A, B i C, na kraju ćemo imati bitcoina. 10 / cijena[a] * cijena[b] / cijena[c] Isprobavajući sve moguće trojke A, B, C (koristeći tri for petlje jednu unutar druge) dobivamo složenost O(N 3 ), što je presporo za veće test podatke. Brže rješenje u O(N 2 ) možemo dobiti isprobavanjem svih odabira A i B (dvije for petlje) ako znamo brzo naći element s najmanjom vrijednošću cijena[c] desno od odabranog B, jer se očito isplati podijeliti sa što manjim brojem. To možemo provesti ako, prije isprobavanja odabira, unaprijed izračunamo tražene minimume za svaki B. Preciznije, prolazeći nizom s desna na lijevo pamtimo dosadašnji minimum i spremamo ga u pomoćni niz na trenutačnu poziciju B. Konačno, uočimo da isto možemo učiniti i za elemente lijevo od B. Naime, za dan B koji odabiremo na sve moguće načine, isplati se uzeti najmanji element cijena[a] lijevo od B, kao i najmanji element cijena[c] desno od B. Ako smo te minimume lijevo i desno za svaki mogući B unaprijed izračunali dvama prolascima po nizu, dobivamo rješenje u složenosti O(N). n = int(input()) a = [float(input()) for i in range(n)] min_lijevo = [a[0]] + [0 for i in range(n - 1)] for i in range(1, n): min_lijevo[i] = min(min_lijevo[i - 1], a[i]) min_desno = [0 for i in range(n - 1)] + [a[n - 1]] for i in range(n - 2, -1, -1): min_desno[i] = min(min_desno[i + 1], a[i]) print(10 * max(a[i] / min_lijevo[i - 1] / min_desno[i + 1] for i in range(1, n - 1))) Stranica 2 od 5

Zadatak CONNECT Ovo je zadatak u kojemu je prilično jasno što treba činiti, ali treba razmisliti kako to jednostavno i što elegantnije implementirati. Očekivano rješenje isprobava sve stupce, za svaki od njih pronalazi najniže slobodno polje, i potom se iz tog polja širi u svih osam smjerova, brojeći uzastopne žetone boje 1. Za elegantno širenje u osam smjerova koristimo dva pomoćna niza od 8 elemenata koji sadrže pomake po retku i stupcu (0, -1 ili 1) za pojedini smjer. m = [] for i in range(6): m.append(input()) m = [[c for c in m[i]] for i in range(5, -1, -1)] sol = False for s in range(7): r = -1 for i in range(6): if m[i][s] == '0': r = i m[r][s] = '1' break if r == -1: continue zetona = [0 for i in range(8)] for smjer in range(8): x, y = r, s while 0 <= x < 6 and 0 <= y < 7 and m[x][y] == '1': zetona[smjer] += 1 x += [0, 1, 1, 1, 0, -1, -1, -1][smjer] y += [-1, -1, 0, 1, 1, 1, 0, -1][smjer] if max(zetona[0] + zetona[4], zetona[1] + zetona[5], zetona[2] + zetona[6], zetona[3] + zetona[7]) >= 5: sol = True print(s + 1) m[r][s] = '.' if not sol: print(-1) Stranica 3 od 5

Zadatak VRTULJAK Najprije valja izdvojiti sve vremenske intervale u kojima je prskalica mogla biti ispravna, tj. naći komplement intervala zadanih u ulaznim podatcima. To činimo tako da zadane intervale kvara prskalice interpretiramo kao događaje koji mogu biti kvar počinje ili kvar završava. Te događaje potom sortiramo po vremenu i prolazimo po njima, održavajući broj trenutačno nezavršenih kvarova. Na taj način možemo detektirati vremenske intervale u kojima nema kvara. Za svaki od dobivenih ispravnih intervala znamo početnu i završnu sekundu i pitamo se koja su djeca i koliko puta bila poprskana u tom vremenskom intervalu. Dijeljenjem trajanja intervala s brojem N možemo saznati broj punih krugova vrtuljka u kojima su sva djeca bila poprskana čokoladom. Taj broj održavamo u pomoćnoj varijabli i na kraju svaki element rješenja (za svako dijete) treba uvećati za taj broj. U slučaju da se interval prskanja ne sastoji samo od punih krugova, formulama valja pronaći prvo i zadnje poprskano dijete u tom intervalu. Za svu djecu koja se u krugu nalaze između to dvoje treba povećati rješenje za 1, jer ona su bila poprskana jedan put više. Da ne bismo premašili vremensko ograničenje, ne prolazimo po svima petljom, nego u pomoćnom nizu označimo početno i završno dijete koje je bilo jedanput više poprskano, npr. povećavajući odgovarajuće elemente za +1 i -1. Na kraju ćemo jednom proći po tom pomoćnom nizu i, održavajući trenutačni zbroj njegovih elemenata ( broj otvorenih intervala prskanja ), saznati traženi ukupan broj prskanja za pojedino dijete. Posebnu pažnju valja posvetiti činjenici da je niz kružni, što malo komplicira gornju ideju ažuriranja intervala koristeći pomoćni niz. import sys n, m = map(int, input().split()) k = int(input()) events = [] for i in range(k): x, y = map(int, input().split()) events.append((x - 1, 'poc')) events.append((y - 1, 'zav')) events.append((m, 'poc')) a = [0 for i in range(n + 1)] svi = 0 def prskanje(lo, hi): global svi if lo == hi: return svi += (hi - lo) // n if (hi - lo) % n == 0: return Stranica 4 od 5

Zadatak VRTULJAK prvi = lo % n zadnji = (hi - 1) % n if prvi <= zadnji: a[prvi] += 1 a[zadnji + 1] -= 1 if zadnji < prvi: a[0] += 1 a[zadnji + 1] -= 1 a[prvi] += 1 zadnji_kraj = -1 otvorenih_intervala = 0 for t, tip in sorted(events): if tip == 'poc': if otvorenih_intervala == 0: prskanje(zadnji_kraj + 1, t) otvorenih_intervala += 1 else: zadnji_kraj = max(zadnji_kraj, t) otvorenih_intervala -= 1 for i in range(n): if i > 0: a[i] += a[i - 1] print(a[i] + svi) Stranica 5 od 5