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

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

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

Tutoring System for Distance Learning of Java Programming Language

Uvod u računarstvo 2+2

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

Uvod u takmičarsko programiranje

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

Uvod u računarstvo 2+2

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

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

I grupa 1. Napisati program koji izračunava i ispisuje zbir 4 najveća od pet brojeva unetih sa standardnog ulaza. ulaz izlaz Analiza: 1.

ELEKTROTEHNIČKI FAKULTET UNIVERZITETA U BEOGRADU BEOGRAD, Ispit iz Programiranja 2 Ispit traje 135 minuta Napomene: a) Pažljivo proučite U

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

Funkcije predavač: Nadežda Jakšić

Microsoft PowerPoint - 03-Slozenost [Compatibility Mode]

Uvod u računarstvo 2+2

Microsoft PowerPoint - C-4-1

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

Funkcije predavač: Nadežda Jakšić

070-ALIP2-udzbenik.indb

Microsoft Word - AIDA2kolokvijumRsmerResenja.doc

Microsoft PowerPoint - Programski_Jezik_C_Organizacija_Izvornog_Programa_I_Greske [Compatibility Mode]

Uvod u računarstvo 2+2

1. Vremensko ograničenje Memorijsko ograničenje ulaz izlaz 0,1 s 64 MB standardni ulaz standardni izlaz Banka želi da upozori kupce na sumnjive aktivn

Programiranje u C-u ili C++-u Pseudo-slučajni brojevi; Dinamička alokacija memorije 1 ZADACI SA ČASA Zadatak 1 Napraviti funkciju koja generišlučajan

Razvoj programa, Code::Blocks, struktura programa, printf, scanf, konverzioni karakteri predavač: Nadežda Jakšić

Računarski praktikum I - Vježbe 03 - Implementacija strukture string

Microsoft PowerPoint - Bitovi [Compatibility Mode]

Microsoft PowerPoint - 10-Jednodimenzionalni nizovi.ppt [Compatibility Mode]

Microsoft Word - SIORT1_2019_K1_resenje.docx

Strukture predavač: Nadežda Jakšić

Tutoring System for Distance Learning of Java Programming Language

MergedFile

I колоквијум из Основа рачунарске технике I СИ- 2017/2018 ( ) Р е ш е њ е Задатак 1 Тачка А Потребно је прво пронаћи вредности функција f(x

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

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

P11.3 Analiza zivotnog veka, Graf smetnji

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

Microsoft Word - ZadaciBacktrackingKombinatorika.doc

Microsoft Word - Zadaci za samostalno vjezbanje 4.doc

Microsoft PowerPoint - Datoteke [Compatibility Mode]

Algoritmi

Dinamičko programiranje Primer 1: Za dati niz naći njegov najduži neopadajući podniz. Defnicija: podniz nekog niza je niz koji se dobija izbacivanjem

Algoritmi SŠ P1

Algoritmi SŠ P1

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

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

P1.1 Analiza efikasnosti algoritama 1

Programiranje 1 Beleške sa vežbi Školska 2007/2008 godina Matematički fakultet, Beograd Jelena Tomašević December 5, 2007

1 jmbag ime i prezime Programiranje 2 prvi kolokvij, Rezultati i uvidi u kolokvije: Rezultati u petak, 3.5., navečer na webu, a uvidi u p

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

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

Slide 1

Skripte2013

Classroom Expectations

Microsoft Word - ZadaciSeminarski.doc

Konstrukcija i analiza algoritama Nina Radojičić februar Analiza algoritama, rekurentne relacije 1 Definicija: Neka su f i g dve pozitivne fun

Microsoft PowerPoint - MR - Vjezbe - 03.ppt [Compatibility Mode]

Programski jezik C

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

Задатак 4: Центрифугална пумпа познате карактеристике при n = 2900 min -1 ради на инсталацији приказаној на слици и потискује воду из резервоара А у р

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

Microsoft PowerPoint - 13-Funkcije_2.ppt [Compatibility Mode]

Programski jezik C

My_P_Trigo_Zbir_Free

Tutoring System for Distance Learning of Java Programming Language

1

Infokup - Školsko Osnovne škole Algoritmi BaPaCpp

NIZOVI

2015_k2_z12.dvi

PowerPoint Presentation

01 SUBP

6-8. ČAS Celobrojno programiranje Rešavamo sledeći poblem celobrojnog programiranja: Gde pretpostavljamo da je A celobrojna matrica dimenzije,. Takođe

Microsoft PowerPoint - OOPpredavanja05 [Compatibility Mode]

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

LAB PRAKTIKUM OR1 _ETR_

СТЕПЕН појам и особине

23. siječnja od 13:00 do 14:00 Školsko natjecanje / Osnove informatike Srednje škole RJEŠENJA ZADATAKA S OBJAŠNJENJIMA Sponzori Medijski pokrovi

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ТЕСТ МАТЕМАТИКА школска 2013/

Konverzije, operatori, matematičke funkcije predavač: Nadežda Jakšić

Datoteke predavač: Nadežda Jakšić

My_P_Red_Bin_Zbir_Free

Рационални Бројеви Скуп рационалних бројева 1. Из скупа { 3 4, 2, 4, 11, 0, , 1 5, 12 3 } издвој подскуп: а) природних бројева; б) целих броје

Računarski praktikum I - Vježbe 01 - Uvod

DISKRETNA MATEMATIKA

Računarski praktikum I - Vježbe 06 - Standard Template Library (2)

Računarski praktikum I - Vježbe 07 - Podstrukture, const, reference

MAZALICA DUŠKA.pdf

ПРИРОДА И ЗНАК РЕШЕЊА 2 b ax bx c 0 x1 x2 2 D b 4ac a ( сви задаци су решени) c b D xx 1 2 x1/2 a 2a УСЛОВИ Решења реална и различита D>0 Решења реалн

Microsoft PowerPoint - Timer0 16F887.ppt [Compatibility Mode]

Microsoft PowerPoint - 07-DinamickeStrukturePodataka

PowerPoint Presentation

Ž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

Upitni jezik SQL

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.

ЕКОНОМСКИ ФАКУЛТЕТ УНИВЕРЗИТЕТА У ПРИШТИНИ КОСОВСКА МИТРОВИЦА

untitled

Република Србија МИНИСТАРСТВО ПРОСВЕТЕ, НАУКЕ И ТЕХНОЛОШКОГ РАЗВОЈА ЗАВОД ЗА ВРЕДНОВАЊЕ КВАЛИТЕТА ОБРАЗОВАЊА И ВАСПИТАЊА ЗАВРШНИ ИСПИТ У ОСНОВНОМ ОБРА

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

HIO 2019 zadaci

Транскрипт:

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 optimization is the root of all evil (or at least most of it) in programming. DONALD KNUTH - Computer Programming as an Art Sortiranje niza (C i C++) Sortiranje (uređivanje) niza podataka ne mora da se obavlja samo nad podacima numeričkog tipa, već se mogu sortirati i niske, datumi,... Poredak sortiranja može biti strogo rastući, neopadajući, strogo opadajući, nerastući. Poznat je veći broj algoritama za sortiranje. Oni se među sobom razlikuju po složenosti, efikasnosti, potrebama za memorijskim prostorom. Ako algoritam za sortiranje ne koristi dodatni memorijski prostor (sem prostora u koji je smešten niz), onda je to tzv. algoritam sortiranja u mestu. Sortiranje u rastućem poretku koriscenjem funkcije sort iz biblioteke algorithm 1. Kreirati sledeći C++ projekat u razvojnom okruženju #define MAXN 200 int main() int a[maxn]; int n,i; // iskljucujemo sinhronizaciju da bi ucitavanje teklo brze ios::sync_with_stdio(false); cin >>n; for (i=0; i<n; i++) cin >> a[i]; sort(a, a + n); for (i=0; i<n; i++) cout << a[i] << " "; 2. Sortiranje u opadajućem poretku koriscenjem funkcije sort iz biblioteke algorithm i korisničke funkcije poredi

#define MAXN 200 bool poredi (int i,int j) return (i>j); int main() int a[maxn]; int n,i; // iskljucujemo sinhronizaciju da bi ucitavanje teklo brze ios::sync_with_stdio(false); cin >>n; for (i=0; i<n; i++) cin >> a[i]; sort(a, a + n, poredi); for (i=0; i<n; i++) cout << a[i] << " "; 3. Obrtanje niza korišćenjem funkcije reverse iz biblioteke algorithm #define MAXN 200 int main() int a[maxn]; int n,i; // iskljucujemo sinhronizaciju da bi ucitavanje teklo brze ios::sync_with_stdio(false); cin >>n; for (i=0; i<n; i++) cin >> a[i]; reverse(a, a + n); for (i=0; i<n; i++) cout << a[i] << " ";

4. Sortiranje u delimično rastućem poretku korišćenjem funkcije partial_sort iz biblioteke algorithm #define MAXN 200 int main() int a[maxn], b[]=8,7,6,5,4,3,2,1,0; int n,i; // iskljucujemo sinhronizaciju da bi ucitavanje teklo brze ios::sync_with_stdio(false); partial_sort(b, b+5, b + 9); for (i=0; i<9; i++) cout << b[i] << " "; cout <<"\nunesite broj clanova niza a "; cin >>n; cout <<"\nunesite clanove niza a "; for (i=0; i<n; i++) cin >> a[i]; partial_sort(a, a+n/2, a + n); for (i=0; i<n; i++) cout << a[i] << " "; 5. Sortiranje u delimično opadajućem poretku korišćenjem funkcije partial_sort iz biblioteke algorithm #define MAXN 200 bool poredi (int i,int j) return (i>j); int main() int a[maxn], b[]=8,7,6,5,4,3,2,1,0; int n,i; // iskljucujemo sinhronizaciju da bi ucitavanje teklo brze ios::sync_with_stdio(false); partial_sort(b, b+5, b + 9, poredi); for (i=0; i<9; i++) cout << b[i] << " "; cout <<"\nunesite broj clanova niza a "; cin >>n; cout <<"\nunesite clanove niza a "; for (i=0; i<n; i++) cin >> a[i]; partial_sort(a, a+n/2, a + n, poredi); for (i=0; i<n; i++) cout << a[i] << " ";

6. Poznati prodavac jabuka Steva izabrao je n jabuka koje će odneti na pijacu na prodaju. Kada je stigao na pijacu, uvideo je da toga jutra je konkurencija dosta jaka. Mudri Steva je odlučio da svoju ponudu pospeši tako što će jabuke na svojoj tezgi aranžirati na specijalan način: najlakša jabuka će stajati krajnje levo, sledeća najlakša jabuka će stajati u krajnje desno na tezgi. Ovaj proces se nastavlja sve dok Steva ne postavi sve jabuke, ali tako da najteža jabuka bude u sredini. Napišite programa, koji prikazuje raspored Stevinih jabuka. U prvoj liniji standardnog ulaza će biti predstavljen broj jabuka- n (3<n<50). Nakon toga sledi n pozitivnih celih brojeva (ne većih od 100), u kojima je izražena masa svake jabuke u kilogramima. Na standardni izlaz ispisati u jednoj liniji masu jabuka posle aranžiranja. PRIMER ULAZ 5 1 2 3 4 5 IZLAZ 1 3 5 4 2 C++ REŠENJE: #include<iostream> #include<algorithm> int main () int n,a[100],b[100]; int i,j,z=0; cin>>n; for ( i=0; i<n; i++) cin>>a[i]; sort(a,a+n); i--; for ( j=0; j<n; j++) if(j%2!=0) b[i]=a[j];i--; else b[z]=a[j];z++; for(i=0;i<n;i++)cout<<b[i]<<" "; cout<<endl; 7. Dat je niz znakova (s 1,..., s n ) dužine n. Znak s i je + ili -. Dat je niz od n + 1 brojeva (a 1,..., a n + 1 ). Treba rasporediti brojeve u dati niz znakova tako da vrednost dobijenog izraz bude maksimalna. Formalno, treba naći vrednost val koja je definisana na sledeći način: val = maxa p(1) s 1... a p(n) s n a p(n + 1) p je permutacija brojeva od 1 do n + 1 Ulaz. (Ulazni podaci se učitavaju sa standardnog ulaza.) U prvom redu standardnog ulaza nalazi se

prirodan broj n (1 n 100000). U drugom redu nalazi se n znakova, redom od s 1 dos n. Svaki znak je karakter '+' ili '-'. Znakovi nisu odvojeni razmakom. U trećem redu se nalazi n + 1 brojeva, brojevi od a 1 do a n + 1, odvojenih razmakom. Svaki od tih brojeva je iz intervala [0, 1000000]. Izlaz. (Izlazne podatke ispisati na standardan izlaz.) U prvi i jedini red standardnog izlaza ispisati traženu vrednost, odnosno vrednost val. Primer 1. standardni ulaz standardni izlaz 3 8 +-+ 1 2 3 4 Objašnjenje. Jedno rešenje predstavlja raspored brojeva 2+3-1+4 Primer 2. standardni ulaz standardni izlaz 2 6 ++ 1 3 2 Objašnjenje. Bilo koji raspored brojeva vodi ka optimalnom rešenju. Primer 3. standardni ulaz standardni izlaz 4 6 ---- 3 12 1 2 0 Objašnjenje. Bilo koji raspored takav da je na prvom mestu broj 12 vodi ka optimalnom rešenju. Rešenje: Prebroji se broj znakova pri cemu se kod prvog sabirka podrazumeva da je pozitivan, i rezultat se dodeli promenljivoj cnt. Sortira se niz a, u neopadajući. Koliko je vrednost na promenljivoj cnt toliko najmanjih članova niza se oduzme od sume, a ostali članovi (koji su među većim) se saberu. /* C++ projekat */ #include <cstdio> #include <cstring> #include <cmath> #define ffor(_a,_f,_t) for(int _a=(_f), t=(_t);_a< t;_a++) #define FOR( i, n) ffor ( i, 0, n) const int MAXN = 100001; int a[maxn]; char str[maxn + 10]; int main() int n;

scanf("%d", &n); scanf("%s", str); FOR (i, n + 1) scanf("%d", &a[i]); int cnt = 0; FOR (i, n) cnt += str[i] == '-'; sort(a, a + n + 1); long long ret = 0LL; FOR (i, n + 1) if (i < cnt) ret -= a[i]; else ret += a[i]; printf("%lld\n", ret); 8. Sortiraj Stabilno Vremensko ograničenje: 1 s Memorijsko ograničenje: 1000 mb Dat je niz parova celih brojeva <A[i], B[i]>. Kazemo da je par <A[i], B[i]> manji od <A[j], B[j]> ukoliko vazi jedan od sledeca dva uslova: 1. A[i] < A[j] 2. A[i] = A[j], i < j Mozemo primetiti da ne postoje dva elemente u nizu koja su jednaka. Vas zadatak je da ispisete ovaj niz parova celih brojeva u rastucem redosledu. Input Prvi red standardnog ulaza sadrzi prirodan broj N (1 <= N <= 100 000) koji predstavlja broj elemenata niza A i B. Drugi red sadrzi N prirodnih brojeva, razdvojenih jednim znakom razmaka, koji predstavljaju elemente niza A. Naredni red sadrzi N prirodnih brojeva, razdvojenih jednim znakom razmaka, koji predstavljaju elemente niza B. (-10^9 <= A[i], B[i] <= 10^9) Output U prvi red standarnog izlaza ispisati niz A posle sortiranja. U sledeci red ispisati niz B posle sortiranja. Example Example Input 5 1-1 1 92-55 4 5 1-1 2 Example Output -55-1 1 1 92 2 5 4 1-1

Rešenje: Nama je potrebno da u ovom zadatku iskoriristimo stabilnost algoritma sortiranja. U biblioteci STL postoji implementacija stabilnog algoritma za sortiranje stable_sort koji garantuje da će elementi sa istom vrednosti biti poredjani onim redosledom u kom su bili pre sortiranja. Detaljan opis STL biblioteke http://www.cplusplus.com/reference/algorithm/ #include <cstdio> #define MAXN 100000 struct s int a, b; niz[maxn]; bool cmp(s x, s y) return x.a < y.a; int main() int n; scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &niz[i].a); for (int i = 0; i < n; i++) scanf("%d", &niz[i].b); stable_sort(niz, niz+n, cmp); for (int i = 0; i < n-1; i++) printf("%d ", niz[i].a); printf("%d\n", niz[n-1].a); for (int i = 0; i < n; i++) printf("%d ", niz[i].b); 9. Dat je ceo broј s i niz različitih celih brojeva. Napisati program kojim se određuje broj parova u nizu koji imaju zbir jednak datom broju s. U prvoj liniji standardnog ulaza nalazi se ceo broj s, u drugoj liniji nalazi se broj elemenata niza n(1 <n < 1000), а u sledećih n linija nalazi se redom elementi niza. ULAZ 5 6 1 4 3 6-1 5 IZLAZ 2 RESENJE 1

Zadatak možemo rešiti analizirajući sumu elemenata svakog para u nizu a. Različiti parovi niza a su (a[i], a[j]) gde i uzima vrednosti od 0 do n-2, а j uzima vrednosti od i + 1 do n - 1. #include<algorithm> int trazix(int x, int a[], int l, int d) while (l <= d) int s = l + (d - l) / 2; if (a[s] == x) return s; if (x > a[s]) l = s + 1; else d = s - 1; return -1; int main() int s,n; cin>>s>>n; int a[1000]; for (int i = 0; i < n; i++) cin>>a[i]; sort(a,a+n); int brojparova = 0; for (int i = 0; i < n - 1; i++) int p = trazix(s - a[i], a, i + 1, n-1); if (p!= -1) brojparova++; cout<<brojparova<<endl; RESENJE2 #include<algorithm> int main() int s,n; cin>>s>>n;

int a[1000]; for (int i = 0; i < n; i++) cin>>a[i]; sort(a,a+n); int brojparova = 0; int levo = 0, desno = n - 1; while (levo < desno) if (a[levo] + a[desno] == s) brojparova++; levo++; desno--; else if (a[levo] + a[desno] > s) desno--; else levo++; cout<<brojparova<<endl; RESENJE3 int main() int s,n; cin>>s>>n; int a[1000]; for (int i = 0; i < n; i++) cin>>a[i]; int brojparova = 0; for (int i = 0; i < n-1; i++) for(int j=i+1;j<n;j++) if (a[i] + a[j] == s) brojparova++; cout<<brojparova<<endl;

10. Dato je N celih brojeva izmedju -10000 i 10000. Napisite program koji pronalazi koliko se moze formirati (neuredjenih) trojki brojeva cija je suma 0. Test primer: Ulaz 10 2-5 2 3-4 7-4 0 1-6 Izlaz 6 Objasnjenje: Moguce trojke su: (2, -5, 3), (2, 2, -4), (2, 2, -4), (-5, 2, 3), (3, -4, 1), (3, -4, 1). Uocite da broj -4 je dupliran na ulazu, te se neke od trojki zato ponavljaju. Resenje: #include <cstdio> #include <string> #define MAX 10002 int a[max], n; string tostring(long long num) if (num <= 0) return "0"; string ret; while (num) ret.push_back(num % 10 + 48); num /= 10; reverse(ret.begin(), ret.end()); return ret; int binarysearch(int leftpos, int rightpos, int num) if (a[rightpos] < num) int left, right, mid; int lower = rightpos + 1, upper = leftpos - 1; // pretraga sleva u intervalu left = leftpos; right = rightpos; while (left <= right) mid = (left + right) / 2; if (a[mid] == num) lower = min(lower, mid); if (a[mid] < num) left = mid + 1; else right = mid - 1;

if (lower > rightpos) // pretraga sdesna u intervalu left = leftpos; right = rightpos; while (left <= right) mid = (left + right) / 2; if (a[mid] == num) upper = max(upper, mid); if (a[mid] <= num) left = mid + 1; else right = mid - 1; return max(0, upper - lower + 1); long long solve() sort(a, a + n); long long ans = 0; for (int i = 0; i < n; i++) if (a[i] > 0) break; for (int c = i + 1; c < n; c++) if (a[i] + a[c] > 0) break; ans += binarysearch(c + 1, n - 1, -a[i] - a[c]); return ans; int main(void) scanf("%d", &n); for (int i = 0; i < n; i++) scanf("%d", &a[i]); printf("%i64d\n", solve()); // printf("%s\n", tostring(solve()).c_str());