2033 - MCub: Difference between revisions
Pagină nouă: Alexandru este foarte pasionat de cuburi. Într-o zi, acesta a creat un zid format din <code>N</code> turnuri de cuburi, turnul <code>i</code> fiind alcătuit din <code>H[i]</code> cuburi puse unul peste altul. Având acest zid, el își pune următoarea întrebare: Dacă aș porni de la un zid “gol” cu <code>N</code> turnuri (gol înseamnă ca <code>H[i] = 0</code> pentru orice <code>1 ≤ i ≤ N</code>) iar singura operație pe care o pot face este să aleg doi indici... |
No edit summary |
||
Line 25: | Line 25: | ||
=== Lipește codul aici === | === Lipește codul aici === | ||
<syntaxhighlight lang="python"> | |||
import sys | |||
sys.stdintxt = open('mcubin.txt', 'r') | |||
sys.stdouttxt = open('mcubout.txt', 'w') | |||
n = int(input()) | |||
hmax = 0 | |||
rez = 0 | |||
for i in range(1, n+1): | |||
hmax = h | |||
h = int(input()) | |||
if h > hmax: | |||
rez += h - hmax | |||
print(rez) | |||
</syntaxhighlight> |
Latest revision as of 14:15, 14 December 2023
Alexandru este foarte pasionat de cuburi. Într-o zi, acesta a creat un zid format din N
turnuri de cuburi, turnul i
fiind alcătuit din H[i]
cuburi puse unul peste altul. Având acest zid, el își pune următoarea întrebare: Dacă aș porni de la un zid “gol” cu N
turnuri (gol înseamnă ca H[i] = 0
pentru orice 1 ≤ i ≤ N
) iar singura operație pe care o pot face este să aleg doi indici i
și j
cu 1 ≤ i ≤ j ≤ N
și să pun câte un cub peste fiecare turn în intervalul i
și j
, care este numărul minim de astfel de operații ce trebuie efectuate pentru a obține zidul inițial?
Cerința[edit | edit source]
Lui Alexandru i s-a părut banală problema așa că te provoacă și pe tine să o rezolvi.
Date de intrare[edit | edit source]
Fișierul de intrare mcub.in
conține pe prima linie numărul N
, iar pe a doua linie N
numere naturale ce reprezintă înălțimile fiecărui turn al zidului.
Date de ieșire[edit | edit source]
Fișierul de ieșire mcub.out
va conține pe prima linie numărul S
, reprezentând răspunsul întrebării puse de Alex.
Restricții și precizări[edit | edit source]
1 ≤ N ≤ 100.000
- numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât
1.000.000
Exemplu:[edit | edit source]
mcub.in
5 1 0 3 1 2
mcub.out
5
Încărcare soluție[edit | edit source]
Lipește codul aici[edit | edit source]
<syntaxhighlight lang="python"> import sys
sys.stdintxt = open('mcubin.txt', 'r')
sys.stdouttxt = open('mcubout.txt', 'w')
n = int(input())
hmax = 0
rez = 0
for i in range(1, n+1):
hmax = h
h = int(input())
if h > hmax:
rez += h - hmax
print(rez)
</syntaxhighlight>