Documente Academic
Documente Profesional
Documente Cultură
Responsabili:
Cristian Pătras, cu, Andrei Preda, Ionela Nicuta,
Iustin Sirbu, David Iancu, Bianca Ciuche, Alex Delicostea
cuprins
1 Problema 1: Gigel s, i criptomonedele 3
1.1 Enunt, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.2 Date de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.3 Date de ies, ire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.4 Restrict, ii s, i precizări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
1.5 Testare s, i punctare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.6.1 Exemplu 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
2 Problema 2: Gigel investeste la bursă 5
2.1 Enunt, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.2 Date de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.3 Date de ies, ire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.4 Restrict, ii s, i precizări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
2.5 Testare s, i punctare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
2.6.1 Exemplu 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
3 Problema 3: Gigel merge la munte 7
3.1 Enunt, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.2 Date de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.3 Date de ies, ire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.4 Restrict, ii s, i precizări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
3.5 Testare s, i punctare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1
CUPRINS 2
3.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6.1 Exemplu 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
3.6.2 Exemplu 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
4 Problema 4: Gigel si creasta montana 9
4.1 Enunt, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.2 Date de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.3 Date de ies, ire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.4 Restrict, ii s, i precizări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
4.5 Testare s, i punctare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
4.6.1 Exemplu 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
5 Problema 5 (bonus): Trigigel 11
5.1 Enunt, . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.2 Date de intrare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.3 Date de ies, ire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.4 Restrict, ii s, i precizări . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.5 Testare s, i punctare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11
5.6 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
5.6.1 Exemplu 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
6 Punctare 13
6.1 Checker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13
7 Format arhivă 15
8 Links 16
problema 1: gigel s, i criptomonedele 3
Gigel s-a hotărât că este timpul să se apuce de minat criptomonede $G$.
S, i-a cumpărat N calculatoare s, i le-a conectat între ele, într-o ret, ea de minat.
În ret, eaua sa, minatul reprezintă efectuarea unor calcule complexe. Primul
calculator începe, îsi face partea lui, apoi dă mai departe rezultatul calculatorului C2,
s, i imediat preia o nouă sarcină. C2 face acelas, i lucru, până la ultimul calculator. O
monedă este produsă după ce ultimul calculator s, i-a terminat calculele pentru
moneda respectivă. Fiecare calculator are o anumită putere de calcul, care îi permite
să îs, i facă partea lui de muncă pentru maxim Pi monede pe oră.
Gigel are B bani strâns, i, cu care vrea să îs, i mai cumpere procesoare pentru
calculatoarele lui pentru a mina mai repede. Pentru fiecare calculator el s, tie cât costă
un upgrade pentru a creste cu 1 numarul de monede la care un calculator poate
contribui într-o oră, s, i anume Ui .
Care este numărul maxim de criptomonede pe care ret, eaua lui Gigel le poate
mina pe oră dupa ce îs, i cumpără procesoare pentru calculatoarele sale?
Numărul de monede pe oră se măsoară după ce deja a fost produsă prima
monedă.
• 1 ⩽ N ⩽ 106
• 1 ⩽ B ⩽ 109
• 1 ⩽ Pi ⩽ 109
• 1 ⩽ Ui ⩽ 109
problema 1: gigel s, i criptomonedele 4
1.6 Exemple
1.6.1 Exemplu 1
Exemplu 1
crypto.in crypto.out Explicat, ie
5 16 3 Init, ial ret, eaua produce o monedă pe oră.
13 Gigel va face:
42 2 upgrade-uri pentru primul calculator, cu pret, ul 6,
33 2 upgrade-uri pentru calculatorul 4, cu pret, ul 4
12 si un upgrade pentru calculatorul 5, cu pret, ul 1.
21 Astfel, ret, eaua va putea mina 3 criptomonede pe oră.
Pret, ul plătit este 11, care se încadrează în buget.
problema 2: gigel investeste la bursă 5
Pentru că în ultima perioada Gigel a stat doar acasa, a reus, it să economisească
suma de B dolari, pe care acum dores, te să îi investească la bursa.
El a găsit online o listă cu N act, iuni studiate de cei mai buni specialis, ti ai lumii.
Ei au determinat pentru fiecare act, iune pret, ul minim s, i pret, ul maxim pe care aceasta
îl va putea avea la sfârs, itul anului.
Convins că specialis, tii nu pot să gres, ească, Gigel s-a hotărât să cumpere act, iuni
din această listă s, i să vândă tot la final de an. El dores, te să aleagă nis, te act, iuni astfel
încât în cel mai rău scenariu posibil, să nu piardă mai mult de L dolari s, i să obt, ină
profitul maxim în cel mai bun caz posibil.
Pentru că a auzit că este bine să ît, i diversifici portofoliul de actiuni, el a decis că
nu va cumpara mai mult de o act, iune de un anumit tip. De asemenea, pe platforma
online pe care Gigel tranzact, ionează, se pot cumpăra doar unităt, i întregi (nu poate
cumpăra fract, ii precum 0.3 dintr-o act, iune).
Care este profitul maxim pe care îl poate obtine Gigel?
În fis, ierul stocks.out se va afla profitul maxim pe care il poate obtine Gigel
• 1 ⩽ N ⩽ 100
• 1 ⩽ B ⩽ 500
• 1 ⩽ L ⩽ 100
• 1 ⩽ minValue < currentValue < maxValue ⩽ 100
problema 2: gigel investeste la bursă 6
2.6 Exemple
2.6.1 Exemplu 1
Exemplu 1
stocks.in stocks.out Explicat, ie
5 30 6 12 Buget = 30, maxLoss = 6
9 7 17 Gigel va alege act, iunile 1 3 si 4.
12 5 16 Va investi 9 + 7 + 3 = 19 dolari < Buget
768 În cel mai rau caz,
326 actiunile vor valora 7 + 6 + 2 = 15 dolari.
526 19 - 15 = 4. Mai mic decat maxLoss
In cel mai bun caz,
actiunile vor valora 17 + 8 + 6 = 31 de dolari.
31 - 19 = 12 dolari profit.
problema 3: gigel merge la munte 7
Cu banii câs, tigat, i din afaceri, Gigel s, i-a cumpărat excavator. Succesul l-a
determinat să mute munt, ii (la propriu), as, a că s-a apucat de excavat o vale în care să
îs, i construiască statuie.
Zona montană e reprezentată sub forma unui s, ir de numere: înălt, imile
vârfurilor care o compun.
Numim "vale" un s, ir de numere care poate fi impărt, it în două jumătăt, i (prefix s, i
sufix), s, i care îndeplines, te următoarele condit, ii:
De exemplu, s, irul [4, 3, 2, 5, 6] este o "vale" datorită împărt, irii în prefixul [4, 3, 2]
s, i sufixul [2, 5, 6]. Pe de altă parte, s, irul [1, 2, 3] nu este o "vale", deoarece nu are un
prefix valid (este o rampă).
Gigel poate excava o unitate din înălt, imea unui vârf într-o oră. Câte ore va dura
formarea văii dacă vrea să termine cât mai repede?
În fis, ierul valley.out se va afla numarul minim de ore in care Gigel poate forma
valea.
• 3 ⩽ N ⩽ 106
• 1 ⩽ hi ⩽ 109
problema 3: gigel merge la munte 8
3.6 Exemple
3.6.1 Exemplu 1
Exemplu 1
valley.in valley.out Explicat, ie
5 3 Excavând 3 unităt, i de la pozit, iile 2 s, i 3,
34524 Gigel poate obt, ine s, irul [3, 3, 3, 2, 4],
care este o vale, putând fi împărt, it în [3, 3, 3, 2] s, i [2, 4].
3.6.2 Exemplu 2
Exemplu 2
valley.in valley.out Explicat, ie
4 0 S, irul este deja vale.
3333
problema 4: gigel si creasta montana 9
Des, i at, i facut o treabă foarte bună cu prima cerint, ă a lui Gigel legată de munte,
acesta s-a răzgândit.
Nu mai vrea să facă o vale, ci vrea diversitate. Îs, i ia excavatorul s, i se apucă din
nou de săpat. La fel ca s, i prima dată, zona montană este reprezentat de un s, ir de
numere naturale, fiecare numar reprezentând înălt, imea muntelui i.
Acum el vrea să sape munt, ii astfel încât să nu existe doi munt, i adiacent, i de
aceeas, i înălt, ime. Totus, i el nu vrea să sape sub pământ, deci înălt, imile munt, ilor nu
pot să ajungă mai mici ca 0.
Pentru că a mai trecut timpul, a crescut pret, ul combustibilului s, i de asemenea,
unii munt, i au devenit mai tari s, i mai greu de săpat. Acum pentru fiecare săpătură
într-un munte, prin care înălt, imea acestuia scade cu 1, Gigel trebuie să plătească pe
combustibil un cost Ci.
Care este costul minim cu care Gigel poate să obt, ină creasta montană mult
visată?
• 1 ⩽ N ⩽ 106 .
• 1 ⩽ Hi , Ci ⩽ 109 .
problema 4: gigel si creasta montana 10
4.6 Exemple
4.6.1 Exemplu 1
Exemplu 1
ridge.in ridge.out Explicat, ie
4 3 Gigel va săpa o unitate din primul munte, cu costul 2
32 s, i o unitate din ultimul munte, cu costul 1.
33 Se obt, ine secvent, a de înălt, imi 2 3 4 3.
42
41
problema 5 (bonus): trigigel 11
Pentru a face s, i mai mult, i bani, Gigel a venit cu o nouă idee. Calculatoarele pe
care le are el pentru a mina criptomonede folosesc logica bivalentă ( operat, ii cu bit, i
de 0 s, i 1 ). El vrea să îs, i construiască un calculator ce foloseste logica trivalentă
pentru a mina mai eficient. Pentru asta, el vrea să înt, eleagă mai bine numerele 0 1 s, i
2.
Si-a scris un sir de lungime N cu numerele 0, 1 si 2, format din secventa 012,
care se repeta. Pentru N = 7, sirul sau este 0120120. Pentru N = 13, sirul este
0120120120120.
El vrea să vadă în câte moduri poate să aleagă o mult, ime de indici ai acestui s, ir,
astfel încât subs, irul format de numerele de la indicii ales, i să fie o subsecvent, ă a
s, irului init, ial.
Pentru că rezultatul poate fi foarte mare, dores, te afis, area sa modulo 1000000007.
În fis, ierul trigigel.out se va afla numarul pe care Gigel îs, i dores, te să il afle.
5.6 Exemple
5.6.1 Exemplu 1
Exemplu 1
trigigel.in trigigel.out Explicat, ie
S, irul este 01201
Putem alege următoarele mult, imi de indici ( indexare de la 0 )
0 -> subs, irul 0
1 -> subs, irul 1
2 -> subs, irul 2
3 -> subs, irul 0
4 -> subs, irul 1
5 16 0, 1 -> subs, irul 01
0,4 -> subs, irul 01
1,2 -> subs, irul 12
2,3 -> subs, irul 20
3,4 -> subs, irul 01
0,1,2 -> subs, irul 012
1,2,3 -> subs, irul 120
2,3,4 -> subs, irul 120
0,1,2,3 -> subs, irul 0120
1,2,3,4 -> subs, irul 1201
0,1,2,3,4 -> subs, irul 01201
punctare 13
6 punctare
• Punctajul temei este de 125 puncte, distribuit astfel:
• Problema 1: 25p
• Problema 2: 30p
• Problema 3: 30p
• Problema 4: 30p
• 5 puncte vor fi acordate pentru comentarii s, i README.
• 5 puncte vor fi acordate automat de checker pentru coding style. Totus, i, la
corectarea manuala se pot aplica depunctari de pană la 20 de puncte pentru
coding style neadecvat.
Punctajul pe README, comentarii s, i coding style este condit, ionat de obt, inerea a
unui punctaj strict pozitiv pe cel put, in un test.
Se poate obt, ine un bonus de 25p rezolvând problema TriGigel. Acordarea
bonusului NU este condit, ionată de rezolvarea celorlate probleme. În total se pot
obt, ine 150 de puncte (NU se trunchiază).
Pentru detalii putet, i să vă uitat, i s, i peste regulile generale de trimitere a temelor.
• O temă care NU compilează va fi punctată cu 0.
• O temă care NU trece niciun test pe vmchecker va fi punctată cu 0.
• Vor exista mai multe teste pentru fiecare problemă în parte. Punctele pe teste
sunt independente, punctajul pe un anumit test nefiind condit, ionat de alte teste.
• Fiecare problemă va avea o limită de timp pe test (precizată mai jos s, i pe pagina
cu enunt, ul). Dacă execut, ia programului pe un test al acelei probleme va dura mai
mult decât limita de timp, vet, i primi automat 0 puncte pe testul respectiv s, i execut, ia
va fi întreruptă.
• În fis, ierul README va trebui să descriet, i solut, ia pe care at, i ales-o pentru fiecare
problemă, să precizat, i complexitatea pentru fiecare s, i alte lucruri pe care le considerat, i
utile de ment, ionat.
6.1 Checker
7 format arhivă
• Temele pot fi testate automat pe vmchecker. Acesta suportă temele rezolvate în
C/C++ s, i Java. Dacă dorit, i să realizat, i tema în alt limbaj, trebuie să-i trimitet, i un
email lui Traian Rebedea (traian.rebedea@cs.pub.ro), în care să îi ceret, i explicit acest
lucru.
• Arhiva cu rezolvarea temei trebuie să fie .zip, având un nume de forma
Grupa_NumePrenume_Tema1.zip (ex: 399CX_PuiuGigel_Tema1.zip sau
399CX_BucurGigel_Tema1.zip) s, i va cont, ine:
• Fis, ierul pentru make trebuie denumit obligatoriu Makefile s, i trebuie să cont, ină
următoarele reguli:
• ATENT, IE! Funct, ia main din rezolvarea unei probleme se va găsi într-o sursă
ce trebuie obligatoriu denumită astfel:
8 links
• Regulament general teme PA
• Google C++ Style Guide
• Google Java Style Guide
• Debugging s, i Structuri de Date