![]() |
![]() |
|
Programiranje Programski jezici, tehnike, alatke... |
![]() |
|
Alatke vezane za temu | Vrste prikaza |
![]() |
#1 |
Starosedelac
|
![]()
Danas je bilo okruzno takmichenje iz programiranja odrzano u ETS "Rade Konchar". Evo par zadataka, i par problema koje mozete da reshavate da vam ne bude dosadno :P
Problem 1. Najslabija karika U popularnom televizijskom kvizu "Najslabija karika" nekoliko takmicara redom u krug odgovaraju na postavljena pitanja. Prvi tacan odgovor donosi jedan dinar, dok svaki sledeci tacan odgovor u nizu donosi duplo vishe poena nego prethodni. Kada neko odgovori netacno - lanac se prekida i sledeci tacan odgovor donosi 1 dinar. Kada takmicar kzaze "Banka", sav novac u trenutnom lancu tacnih odgovora se dodaje na ukupnu zagarantovanu sumu, a naredni tacan odgovor ponovo vredi 1 dinar. Ako takmicari u nizu daju 15 tachnih odgovora, a da izmedju nije bilo bankiranja - nagrada iznosi neverovatnih 1000000000 (milijardu) dinara, bez obzira da li je neko rekao "Banka" ili su pre toga takmichari osvojili neshto novca. Vama su na raspolaganju podaci iz prethodne emisije. Treba odrediti koliko dinara su takmichari zaradili. Ulaz. (Ulazni podaci se nalaze u datoteci karika.in) U prvom redu ulazne datoteke se nalazi niz znakova. Svaki od znakova je iz skupa {'O', 'X', 'B'}. (sva tri moguca znaka su velika slova, shto znachi da prvi od tri znaka nije cifra nula, vec slovo O) i oni predstavljaju tacan odgovor, netacan odgovor i banku. Duzina niza znakova je manja ili jednaka 100000. Izlaz. (Izlazne podatke upisati u datoteku karika.out) U izlaznu datoteku treba upisati broj dinara koji su takmi chari zaradili. Primer 1. karika.in OOOBXOXBXOOBOX karika.out 10 Objasnjenje. Posle bankiranja, takmichari redovno dobijaju 7 + 0 + 3 = 10 dinara Primer 2. karika.in XOOBOOOOOOOOOOOOOOOOXOOB karika.out 1000000000 Objasnjenje. Takmichari imaju niz od 15 tachnih odgovora, pa zaradjuju 1000000000 dinara. |
![]() |
![]() |
![]() |
#2 |
Starosedelac
|
![]()
Problem 2. Igra
Na papiru je napisan broj N (1 <= N <= 10^7). Dva igracha naizmenichno rade sledece: igrach koji je na potezu bira neki delilac broja koji je napisan na papiru (delilac ne sme biti 1 ili broj sa papira), racuna kolichnik broja sa papira i izabranog delioca, brise broj koji se nalazi na papriu, i pishe dobijeni kolichnik. Ukoliko igrach ne moze da odigra svoj potez (tj. jedini delioci su 1 i broj sa papira), on je pobednik. Napisati program koji treba da uchita niz brojeva i za svaki od tih brojeva odredi koji igrach pobedjuje u partiji na chijem pochetku se na papiru nalazi taj broj. Smatrati da oba igracha igraju optimalno (povlache najbolje poteze). Ulaz. (Ulazni podaci se nalaze u datoteci igra.in) U prvom redu ulazne datoteke se nalazi broj M(5 <= M <= 20). U narednih M redova nalazi se po jedan broj N (1 <= N <= 10^7). Izlaz. (Izlazne podatke upisati u datoteku igra.out) U izlaznu datoteku treba upisati M redova. U i-tom redu ispisati broj 1, ako prvi igrach pobedjuje kad je pochetni broj na papiru Ni, a 2, ako drugi igrach pobedjuje. Primer 1. igra.in 5 1 4 5 10 25 igra.out 1 2 1 2 2 |
![]() |
![]() |
![]() |
#3 |
Veteran
|
![]()
Kako si uradio? E onaj ko ovo uradi neka ne postavlja odmah resenje, sem ako drugi nece, kako bi svi mogli prvo da pokusaju da urade
![]() |
![]() |
![]() |
![]() |
#4 |
Starosedelac
|
![]()
i... MG-RAY je na tom takmicenju puk'o ko zvecka
![]() |
![]() |
![]() |
![]() |
#5 |
Veteran
Član od: 28.7.2007.
Lokacija: Rockin world!
Poruke: 700
Zahvalnice: 303
Zahvaljeno 265 puta na 97 poruka
|
![]()
Ili da se resenje stavi u spoiler tag!
|
![]() |
![]() |
![]() |
#6 |
Starosedelac
|
![]()
3. Saksije.
Bastovan Toma je resio da ulepsa svoje prostrano dvoriste tako sto ce ga ukrasiti cvecem. On naime zeli da najpre postavi n saksija u red (1 <= n <= 100000) i da u svakoj od ovh n saksija bude k kilograma zemlje (0 <= k <= 1000), a da potom u njima sadi razno cvece. On je zato od firme koja se bavi prodajom saksija narucio n saksija takvih da se u svakoj od tih n saksija nalazi k kilograma zemlje. Ta firma je bila toliko ljubazna da ne samo donese te saksije vec da ih i postavi u red. Medjutim, sutradan je Toma doziveo veliki shok. Neke saksije imaju vise, a neke manje od k kilograma zemlje. Toma se ipak smirio kada je primetio da je ukupna tezina zemlje u svim saksijama k*n kg. - pa se ova greska da ispraviti. Toma zeli da prebacivanjem zemlje iz jedne saksije u drugu ucini da u svakoj saksiji bude k kilograma zemlje, a da se pri tom najmanje umori. Toma zna da je za prebacivanje x kg. zemlje iz saksije koja je i-ta po redu u saksiju koje je j-ta po redu potrebno da utrosi x * |i - j| dzula energije. Odrediti koliko je minimalno energije koju Toma mora da potrosi da bi ispravio gresku firme koja mu je poslala saksije. Ulaz: (Ulazni podaci se nalaze u datoteci saksije.in) U prvom redu tekstualne datoteke nalaze se redom celi brojevi n i k. U 2. redu ove datoteke nalazi se n celih brojeva koji su >= 0. Naime i-ti broj (1 <= i <= n) u drugom redu oznacava koliko se kg. zemlje nalazi u i-toj saksiji kada se gleda sa prozora Tomine spavace sobe sa leva na desno. Izlaz. (Izlazne podatke upisati u datoteku saksije.out) U Izlaznu datoteku treba upisati jedan broj koje je jednak W mod 1000000000, gde je W jednak minimalnom broju dzula koje Toma mora da potrosi da bi ispravio gresku firme od koje je kupio saksije. Primer 1. saksije.in 6 4 5 6 2 1 7 3 saksije.out 8 Izvrsavanje programa ne sme da bude duze od 1s. Vazi sa sva 3 zad. |
![]() |
![]() |
![]() |
#7 |
Starosedelac
|
![]() |
![]() |
![]() |
![]() |
#8 |
Mythbuster
|
![]()
Ako je zaista tako, onda je to još jedan dokaz koliko je naše školstvo zapravo loše. Šta znači da radi ispod jedne sekunde ? Na šta se odnosi ? Ako se odnosi na sam algoritam sa limitiranim vrednostima onda ok. Ako se radi o kompletnom procesu, onda to zavisi od veličine ulaznog i izlaznog fajla, kao i od brzine samog računara. Ako je veliki fajl, ponekad samo otvaranje i parsiranje istog može trajati nekoliko sekundi. Uzgred, o kom programskom jeziku se radi ? Mislim, nije da pravi neku bitnu razliku, ali čisto informativno me interesuje.
|
![]() |
![]() |
![]() |
#9 |
Banned
Član od: 20.12.2005.
Lokacija: banjaluka
Poruke: 3.220
Zahvalnice: 278
Zahvaljeno 363 puta na 216 poruka
|
![]()
prvi je lagan, vjerujem da niste imali problema sa tim, pa idemo dalje
drugi program je, bez uvrede, jos gluplji: Spoiler za rjesenje:
Spoiler za rjesenje:
Poslednja ispravka: sasha vukelic (16.3.2008 u 3:52) Razlog: brzina izvrsavanja |
![]() |
![]() |
![]() |
#10 | |
Starosedelac
|
![]() Citat:
C++ (DevC++ IDE) |
|
![]() |
![]() |
![]() |
#11 |
Veteran
|
![]()
Evo resenje za prvi i drugi,za treci me mrzi da mislim, sad cu da vidim sta je Sasha napisao:
Spoiler za Resenje1:
Spoiler za Resenje2:
Sledeci put da me je neko od vas dvojice obavestio, hocu i ja da se takmicim ![]() EDIT: @sasha vukelic: Lako je reci al treba uraditi, normalno je valjda da svima takva logika pada na pamet ![]() Poslednja ispravka: Stevvan (16.3.2008 u 13:18) |
![]() |
![]() |
![]() |
#12 |
Banned
Član od: 20.12.2005.
Lokacija: banjaluka
Poruke: 3.220
Zahvalnice: 278
Zahvaljeno 363 puta na 216 poruka
|
![]()
lako je i uraditi
![]() al, kao sto je jedan moj prof govorio kada mu se nesto nije dalo: to ostavljamo za zadacu ![]() |
![]() |
![]() |
![]() |
#13 | |
Član
Član od: 30.10.2005.
Lokacija: Vancouver, BC
Poruke: 475
Zahvalnice: 48
Zahvaljeno 95 puta na 75 poruka
|
![]() Citat:
![]() Pre takmicenja se, naravno, napisu odgovarajuci programi koji rade ispod jedne sekunde za sve ulazne podatke na test masini, gde se posle testiraju i resenja svih takmicara. Dakle, moguce je napisati program koji ispunjava sve uslove, i to je ono sto se trazi od takmicara. Zadaci se rade u Pascalu, C-u i C++u, a okruzenja su uglavnom Free Pascal (negde moze i Delphi, ali treba uzeti u obzir da se pregleda kôd koji se naknadno kompajlira, pa nesto sto radi u Delphiju ne mora da radi pri testiranju) i DevC++. Ja sam ove godine odabrao da radim u C++u, iako sam ga prvi put "uzeo u ruke" pre nekoliko nedelja - zgodnija mi je sintaksa, a i treba se navici na jezik za sledecu godinu (kada budem 4. razred), posto mi je tada jako vazan uspeh na drzavnom ![]() ![]() ![]() Evo ih i svi zadaci sa resenjima na zvanicnom sajtu: 1. Najslabija karika 2. Igra 3. Saksije 4. Kamencici 5. Krtice Poslednja ispravka: VojaM (18.3.2008 u 23:38) Razlog: Dodah linkove...; karija --> karika (VojaM) |
|
![]() |
![]() |
![]() |
#14 |
Novi član
Član od: 16.3.2008.
Poruke: 1
Zahvalnice: 0
Zahvaljeno 0 puta na 0 poruka
|
![]()
genijalci jel ko uradio 3. , 4. ili 5. zadatak
![]() |
![]() |
![]() |
![]() |
#15 |
Veteran
|
![]()
jesam i 3 i 4, stim sto mi 4 ne ide ispod 1 sec
![]() |
![]() |
![]() |
![]() |
#16 |
Starosedelac
|
![]()
Chak ni njima ne ide ispod jedne sekunde! 4 sek za poslednji primer!
|
![]() |
![]() |
![]() |
#17 |
Član
Član od: 30.10.2005.
Lokacija: Vancouver, BC
Poruke: 475
Zahvalnice: 48
Zahvaljeno 95 puta na 75 poruka
|
![]()
Kako to? Ako se lepo odradi, cetvrti zadatak uopste nije preterano zahtevan
![]() |
![]() |
![]() |
![]() |
#18 |
Veteran
|
![]()
Fora kod 4-og je da za svako slovo poseno napravis skladiste (u vidu vektora, zbog lakse upotrebe) gde su mase poredjane redom od najmanje do najvece, posle se samo uzima prva masa (koja je u stvari i najlaksa), i to je sve
![]() ![]() ![]() EDIT: Evo kako sam ja uspeo da optimizujem koliko god sam mogao, na mom kompu za zadnji nacin uradi odmah (kamen.09.in), mada mislim da kada ne bih koristio brisanje prvog clana program bi radio jos brze ![]() Kod:
#include <cstdio> #include <vector> #include <algorithm> using namespace std; int main() { FILE *f; f = fopen("kamen.in","r"); int num, word_len; fscanf(f, "%d %d\n", &num, &word_len); vector <int> all_letters[26]; for (int i = 0; i < num; i++) { char c; int m; fscanf(f, "%c %d\n", &c, &m); all_letters[c-'A'].push_back(m); } for (int i = 0; i < 26; i++) { sort(all_letters[i].begin(), all_letters[i].end()); } int mass = 0; char c; int index; for (int i = 0; i < word_len; i++) { fscanf(f, "%c\n", &c); index = c-'A'; if (all_letters[index].size() == 0) { mass = -1; break; } else { mass+=all_letters[index][0]; all_letters[index].erase(all_letters[index].begin()); } } printf("%d\n", mass); fclose(f); return 0; } Poslednja ispravka: Stevvan (17.3.2008 u 21:42) |
![]() |
![]() |
![]() |
#19 |
Član
Član od: 30.10.2005.
Lokacija: Vancouver, BC
Poruke: 475
Zahvalnice: 48
Zahvaljeno 95 puta na 75 poruka
|
![]()
Nisam ni ja znao za vector pa sam improvizovao sa dve matrice - jedna mi je cuvala podatke, a druga pokazivace ka sledecem elementu po velicini
![]() |
![]() |
![]() |
![]() |
#20 |
Veteran
|
![]()
Jel mozemo da vidimo source?
![]() |
![]() |
![]() |
![]() |
Bookmarks sajtovi |
|
|