<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0398_-_Plopi_2</id>
	<title>0398 - Plopi 2 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=0398_-_Plopi_2"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0398_-_Plopi_2&amp;action=history"/>
	<updated>2026-05-01T05:59:52Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0398_-_Plopi_2&amp;diff=8690&amp;oldid=prev</id>
		<title>AntalKrisztian: Pagină nouă: == Cerinţa == De-a lungul principalei străzi din orașul nostru există &#039;&#039;&#039;n&#039;&#039;&#039; plopi, pentru fiecare cunoscându-se înălțimea. Primarul orașului dorește ca plopii să aibă înălțimile în ordine descrescătoare. Pentru aceasta, este posibilă tăierea dintr-un plop a unei bucăți – este o tehnică ecologică, nevătămătoare, în urma căreia plopul nu are de suferit. Plopii nu pot fi înălțați în niciun fel.  Determinați numărul minim de plopi din care s...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0398_-_Plopi_2&amp;diff=8690&amp;oldid=prev"/>
		<updated>2023-12-29T17:39:34Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerinţa == De-a lungul principalei străzi din orașul nostru există &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; plopi, pentru fiecare cunoscându-se înălțimea. Primarul orașului dorește ca plopii să aibă înălțimile în ordine descrescătoare. Pentru aceasta, este posibilă tăierea dintr-un plop a unei bucăți – este o tehnică ecologică, nevătămătoare, în urma căreia plopul nu are de suferit. Plopii nu pot fi înălțați în niciun fel.  Determinați numărul minim de plopi din care s...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;== Cerinţa ==&lt;br /&gt;
De-a lungul principalei străzi din orașul nostru există &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; plopi, pentru fiecare cunoscându-se înălțimea. Primarul orașului dorește ca plopii să aibă înălțimile în ordine descrescătoare. Pentru aceasta, este posibilă tăierea dintr-un plop a unei bucăți – este o tehnică ecologică, nevătămătoare, în urma căreia plopul nu are de suferit. Plopii nu pot fi înălțați în niciun fel.&lt;br /&gt;
&lt;br /&gt;
Determinați numărul minim de plopi din care se va tăia și lungimea totală minimă a bucăților tăiate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;plopi2in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul de plopi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Urmează &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale nenule, separate prin spaţii, care pot fi dispuse pe mai multe linii, reprezentând înălțimile plopilor.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;plopi2out.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie numerele &amp;#039;&amp;#039;&amp;#039;C T&amp;#039;&amp;#039;&amp;#039;, separate prin exact un spațiu, reprezentând numărul minim de plopi din care se va tăia și lungimea totală minimă a bucăților tăiate.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;2 &amp;amp;les; n &amp;amp;les; 100&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* înălțimile plopilor vor fi mai mici decât &amp;#039;&amp;#039;&amp;#039;10000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; plopi2in.txt&lt;br /&gt;
 8&lt;br /&gt;
 5 7 3 6 4 4 2 6&lt;br /&gt;
; plopi2out.txt&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 5 11&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Vom tăia din plopii numerotați cu &amp;#039;&amp;#039;&amp;#039;2 4 5 6 8&amp;#039;&amp;#039;&amp;#039;, astfel încât înălțimile să devină &amp;#039;&amp;#039;&amp;#039;5 5 3 3 3 3 2 2&amp;#039;&amp;#039;&amp;#039;. Lungimea totală a bucăților tăiate este: &amp;#039;&amp;#039;&amp;#039;2  + 3 + 1 + 1 +4 = 11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; plopi2in.txt&lt;br /&gt;
 yrteofmnrf&lt;br /&gt;
; plopi2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# Funcția de validare verifică dacă datele de intrare sunt în intervalul specificat&lt;br /&gt;
def validare(n_validare, inaltimi_validare):&lt;br /&gt;
    # Verificăm dacă n este în intervalul 2-100&lt;br /&gt;
    if n_validare &amp;lt; 2 or n_validare &amp;gt; 100:&lt;br /&gt;
        raise ValueError  # Ridicăm o eroare dacă n nu este în intervalul 2-100&lt;br /&gt;
    for inaltime in inaltimi_validare:    # Parcurgem lista de înălțimi&lt;br /&gt;
        # Verificăm dacă înălțimea este mai mică decât 10000&lt;br /&gt;
        if inaltime &amp;gt;= 10000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția taie_plopi taie plopii astfel încât să aibă înălțimile în ordine descrescătoare&lt;br /&gt;
def taie_plopi(n_taie, inaltimi_taie):&lt;br /&gt;
    # Inițializăm numărul de plopi din care se va tăia și lungimea totală a bucăților tăiate&lt;br /&gt;
    nr_plopi, lungime_totala = 0, 0&lt;br /&gt;
    # Parcurgem lista de înălțimi&lt;br /&gt;
    for i in range(1, n_taie):&lt;br /&gt;
        # Dacă înălțimea plopului curent este mai mare decât înălțimea plopului anterior&lt;br /&gt;
        if inaltimi_taie[i] &amp;gt; inaltimi_taie[i-1]:&lt;br /&gt;
            # Tăiem din plop&lt;br /&gt;
            lungime_totala += inaltimi_taie[i] - inaltimi_taie[i-1]&lt;br /&gt;
            inaltimi_taie[i] = inaltimi_taie[i-1]&lt;br /&gt;
            nr_plopi += 1&lt;br /&gt;
    return nr_plopi, lungime_totala&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    file_in = open(&amp;quot;plopi2in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;plopi2out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de plopi&lt;br /&gt;
        n_main = int(file_in.readline())&lt;br /&gt;
        # Citim înălțimile plopilor&lt;br /&gt;
        inaltimi_main = list(map(int, file_in.readline().split()))&lt;br /&gt;
        # Validăm datele de intrare&lt;br /&gt;
        validare(n_main, inaltimi_main)&lt;br /&gt;
        # Tăiem plopii&lt;br /&gt;
        nr_plopi_main, lungime_totala_main = taie_plopi(n_main, inaltimi_main)&lt;br /&gt;
        # Scriem numărul de plopi din care se va tăia și lungimea totală a bucăților tăiate în fișierul de ieșire&lt;br /&gt;
        file_out.write(str(nr_plopi_main) + &amp;#039; &amp;#039; + str(lungime_totala_main) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
    # Dacă datele de intrare nu sunt valide, afișăm un mesaj de eroare&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # Dacă datele de intrare sunt incomplete, afișăm un mesaj de eroare&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>AntalKrisztian</name></author>
	</entry>
</feed>