<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Monica+Dragos</id>
	<title>Bitnami MediaWiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Monica+Dragos"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Monica_Dragos"/>
	<updated>2026-05-01T04:48:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2405_-_politic&amp;diff=6564</id>
		<title>2405 - politic</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2405_-_politic&amp;diff=6564"/>
		<updated>2023-05-14T22:42:24Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/304/secvente 2405 - politic]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
În Țara lui Papură Vodă s-au organizat de curând primele alegeri democratice. A rezultat astfel un parlament din care fac parte deputați cu diverse doctrine politice, de stânga sau de dreapta. Acestea sunt descrise prin numere naturale nenule (orientarea politică este cu atât mai de stânga cu cât numărul este mai mic). Parlamentarii s-au asociat în partide politice în funcție de doctrina fiecăruia. Oricare doi deputați ale căror doctrine corespund unor numere consecutive fac parte din același partid. Prin urmare, partidele vor fi alcătuite din deputați ale căror doctrine sunt numere consecutive. (De exemplu, dacă parlamentul are 5 deputați, cu doctrinele 1, 2, 3, 5 şi 6, atunci înseamnă că aceștia sunt grupați în două partide: unul format din 1, 2 și 3 și altul din 5 și 6.)&lt;br /&gt;
Un guvern trebuie să beneficieze de susținerea a mai mult de jumătate dintre parlamentari. De exemplu, dacă parlamentul este format din 7 deputați, atunci un guvern are nevoie de susținerea a cel puțin 4 deputați.&lt;br /&gt;
Pentru a putea guverna, partidele se pot grupa in coaliţii. Regula după care se asociază este urmatoarea: două partide A şi B, A având o doctrină mai de stânga, pot face parte din aceeași coaliţie doar dacă din coaliţia respectivă fac parte toate partidele a căror doctrină este mai de dreapta decât cea a lui A şi mai de stânga decât cea a lui B. De exemplu, dacă parlamentul este alcătuit din deputaţi cu orientările politice 1, 2, 4, 5, 7 şi 8, atunci partidul format din 1 şi 2 nu se poate asocia cu partidul format din 7 şi 8 decât dacă din coaliţia respectivă face parte şi partidul format din 4 şi 5.&lt;br /&gt;
Fiind dat parlamentul din Ţara lui Papură Vodă printr-un şir ordonat strict crescător de numere naturale nenule, se cere să se stabilească numărul de partide parlamentare şi numărul variantelor de coaliţie majoritară.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare politic.in conține pe prima linie un număr natural nenul N, reprezentând numărul de deputați din parlament. Pe a doua linie se află N numere naturale nenule separate prin câte un spațiu, ordonate strict crescător, reprezentând doctrinele parlamentarilor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, fișierul de ieșire politic.out conține prima linie numărul C, reprezentând numărul de secvenţe cu elementele ordonate crescător din şirul dat&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;lt; N ≤ 20.000&lt;br /&gt;
* numerele din șir sunt mai mici sau egale cu 30.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: politic.in&lt;br /&gt;
: 10&lt;br /&gt;
: 1 2 3 5 6 8 10 11 14 15 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: politic.out&lt;br /&gt;
: 5 &lt;br /&gt;
: 4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: politic.in&lt;br /&gt;
: 20 &lt;br /&gt;
: 0 7 8 9 1 2 3 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2405 - politic&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if n &amp;lt;= 0 or n &amp;gt; 20000:&lt;br /&gt;
        return False&lt;br /&gt;
    if any(x &amp;lt;= 0 or x &amp;gt; 30000 for x in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def count_sequences(arr):&lt;br /&gt;
    cnt = 1&lt;br /&gt;
    max_cnt = 1&lt;br /&gt;
    for i in range(1, len(arr)):&lt;br /&gt;
        if arr[i] &amp;gt; arr[i-1]:&lt;br /&gt;
            cnt += 1&lt;br /&gt;
            if cnt &amp;gt; max_cnt:&lt;br /&gt;
                max_cnt = cnt&lt;br /&gt;
        else:&lt;br /&gt;
            cnt = 1&lt;br /&gt;
    return max_cnt&lt;br /&gt;
&lt;br /&gt;
def count_coalitions(arr):&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        for j in range(i+1, len(arr)):&lt;br /&gt;
            diff = abs(arr[i] - arr[j])&lt;br /&gt;
            if diff == 1:&lt;br /&gt;
                break&lt;br /&gt;
            else:&lt;br /&gt;
                for k in range(i+1, j):&lt;br /&gt;
                    if abs(arr[k] - arr[i]) &amp;gt; diff and abs(arr[k] - arr[j]) &amp;gt; diff:&lt;br /&gt;
                        continue&lt;br /&gt;
                    else:&lt;br /&gt;
                        break&lt;br /&gt;
                else:&lt;br /&gt;
                    cnt += 1&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    arr = list(map(int, input().split()))&lt;br /&gt;
    if validate_input(n, arr):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(count_sequences(arr))&lt;br /&gt;
        print(count_coalitions(arr))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, arr) verifică dacă numărul n este între 1 și 20000 și dacă fiecare element din array-ul arr este între 1 și 30000. Dacă datele nu corespund acestor restricții, funcția returnează False, altfel returnează True.&lt;br /&gt;
&lt;br /&gt;
Funcția count_sequences(arr) numără cel mai lung șir crescător de elemente consecutive din array-ul arr. Inițial, variabila cnt este setată la 1, pentru că fiecare element din array poate fi considerat un șir crescător de lungime 1. Apoi, se parcurge array-ul și se verifică dacă elementul curent este mai mare decât cel anterior. Dacă da, se crește numărul de elemente din șirul crescător curent, și se actualizează max_cnt dacă valoarea lui cnt este mai mare. Dacă elementul curent este mai mic sau egal decât cel anterior, se resetează cnt la 1. La final, funcția returnează max_cnt, lungimea maximă a unui șir crescător de elemente consecutive.&lt;br /&gt;
&lt;br /&gt;
Funcția count_coalitions(arr) numără numărul de sub-șiruri neadiacente din array-ul arr care au diferența maximă între cel mai mare și cel mai mic element mai mică sau egală cu 1. Funcția parcurge fiecare pereche de elemente din array, calculează diferența dintre ele și verifică dacă aceasta este mai mare sau egală cu 2. Dacă da, atunci verifică dacă există vreun alt element între cele două care să aibă o diferență mai mică sau egală cu cea dintre cele două. Dacă există un astfel de element, atunci sub-șirul nu este valid și se trece la următoarea pereche de elemente. Dacă nu există un astfel de element, atunci sub-șirul este valid și se crește numărul de sub-șiruri găsite. La final, funcția returnează numărul de sub-șiruri valide găsite.&lt;br /&gt;
&lt;br /&gt;
Funcția __main__ primește datele de intrare și le validează folosind funcția validate_input. Dacă datele sunt valide, afișează un mesaj de confirmare și calculează valorile cerute folosind funcțiile count_sequences și count_coalitions. Dacă datele nu sunt valide, afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3846_-_KSum2&amp;diff=6563</id>
		<title>3846 - KSum2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3846_-_KSum2&amp;diff=6563"/>
		<updated>2023-05-14T22:41:04Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3846/ksum2 3846 - KSum2]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
După ce Ionuț a învățat despre algoritmul lui Kadane își pune următoarea întrebare: se dă N, K și W apoi un vector cu N elemente, din acest vector care este suma maximă a unei secvențe (elemente adiacente) de lungime cel puțin K și cel mult W. A zis să vă întrebe pe voi cum se face.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ksum2.in conține pe prima linie numerele N, K și W, pe următoarea linie N elemente întregi reprezentând elementele vectorului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire ksum2.out va conține pe prima linie numărul S, reprezentând suma maximă a unei secvențe (elemente adiacente) din vector de lungime cel puțin K și cel mult W&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele şirului vor avea cel mult 4 cifre&lt;br /&gt;
* o secvență cu elemente ordonate crescător este maximală dacă adăugând la secvență încă un element ea nu mai are elementele ordonate crescător&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ksum2.in&lt;br /&gt;
: 8 &lt;br /&gt;
: 12 10 15 17 17&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: ksum2.out&lt;br /&gt;
: 3&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ksum2.in&lt;br /&gt;
: 8 &lt;br /&gt;
: 1 2 3 4 5 6&lt;br /&gt;
: -0,12 123 0 1 -2 -3 1,23&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3846 - KSum2&lt;br /&gt;
&lt;br /&gt;
def validate_input(N, K, W, arr):&lt;br /&gt;
    # Verificăm dacă N, K și W respectă restricțiile&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 1000 or not 1 &amp;lt;= K &amp;lt;= N or not K &amp;lt;= W &amp;lt;= N:&lt;br /&gt;
        return False&lt;br /&gt;
    &lt;br /&gt;
    # Verificăm dacă elementele din vector respectă restricțiile&lt;br /&gt;
    for x in arr:&lt;br /&gt;
        if not -9999 &amp;lt;= x &amp;lt;= 9999:&lt;br /&gt;
            return False&lt;br /&gt;
    &lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def max_sequence_sum(arr, K, W):&lt;br /&gt;
    # Inițializăm variabilele necesare pentru calculul sumei maxime&lt;br /&gt;
    max_sum = -float(&#039;inf&#039;)&lt;br /&gt;
    cur_sum = 0&lt;br /&gt;
    start = end = 0&lt;br /&gt;
    &lt;br /&gt;
    # Parcurgem vectorul și calculăm suma maximă&lt;br /&gt;
    for i in range(len(arr)):&lt;br /&gt;
        # Adăugăm elementul curent la suma curentă&lt;br /&gt;
        cur_sum += arr[i]&lt;br /&gt;
        &lt;br /&gt;
        # Dacă secvența devine prea lungă, scădem primul element din ea&lt;br /&gt;
        if i &amp;gt;= K:&lt;br /&gt;
            cur_sum -= arr[i-K]&lt;br /&gt;
        &lt;br /&gt;
        # Dacă secvența este suficient de lungă, verificăm dacă suma ei este maximă&lt;br /&gt;
        if i &amp;gt;= W-1:&lt;br /&gt;
            if cur_sum &amp;gt; max_sum:&lt;br /&gt;
                max_sum = cur_sum&lt;br /&gt;
                start = i-W+1&lt;br /&gt;
                end = i&lt;br /&gt;
                &lt;br /&gt;
        # Dacă suma curentă devine negativă, o resetăm la 0 și mutăm începutul secvenței&lt;br /&gt;
        if cur_sum &amp;lt; 0:&lt;br /&gt;
            cur_sum = 0&lt;br /&gt;
    &lt;br /&gt;
    return max_sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citim datele de intrare&lt;br /&gt;
    N, K, W = map(int, input().split())&lt;br /&gt;
    arr = list(map(int, input().split()))&lt;br /&gt;
    &lt;br /&gt;
    # Verificăm dacă datele de intrare sunt corecte&lt;br /&gt;
    if not validate_input(N, K, W, arr):&lt;br /&gt;
        print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Calculăm suma maximă și o afișăm&lt;br /&gt;
        max_sum = max_sequence_sum(arr, K, W)&lt;br /&gt;
        print(max_sum)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Funcția validate_input primește patru argumente: N, K, W și arr. Această funcție validează datele de intrare pentru a se asigura că ele respectă restricțiile impuse în enunțul problemei. Mai exact, verifică dacă N, K și W se încadrează în intervalul specificat, iar elementele din vectorul arr sunt numere întregi de cel mult patru cifre. Funcția returnează True dacă datele de intrare sunt corecte și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Funcția max_sequence_sum primește trei argumente: arr, K și W. Această funcție calculează suma maximă a unei secvențe (elemente adiacente) din vectorul dat, de lungime cel puțin K și cel mult W. Pentru a realiza aceasta, parcurge vectorul dat și calculează suma tuturor secvențelor de lungime între K și W. În timpul parcurgerii, menține suma curentă și, dacă aceasta devine negativă, o resetează la 0 și mută începutul secvenței. Dacă suma curentă depășește maximul anterior, aceasta devine noua sumă maximă. Funcția returnează suma maximă calculată.&lt;br /&gt;
&lt;br /&gt;
În blocul de cod if __name__ == &#039;__main__&#039;, se citesc datele de intrare și se apelează funcția validate_input pentru a verifica dacă datele sunt introduse corect. Dacă datele sunt introduse corect, se calculează suma maximă folosind funcția max_sequence_sum și se afișează rezultatul. În caz contrar, se afișează un mesaj de eroare.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3844_-_KSum&amp;diff=6562</id>
		<title>3844 - KSum</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3844_-_KSum&amp;diff=6562"/>
		<updated>2023-05-14T22:40:16Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3844/ksum 3844 - KSum]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
După ce Ionuț a învățat despre algoritmul lui Kadane își pune următoarea întrebare: se dă N și K apoi un vector cu N elemente, din acest vector care este suma maximă a unei secvențe (elemente adiacente) de lungime cel puțin K. A zis să vă întrebe pe voi cum se face.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ksum.in conține pe prima linie numerele N și K, pe următoarea linie N elemente întregi reprezentând elementele vectorului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;  fișierul ksum.out va conține pe prima linie numărul S, reprezentând suma maximă a unei secvențe (elemente adiacente) din vector de lungime cel puțin K&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ K &amp;lt;= W &amp;lt;= n ≤ 100.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi din intervalul [-1.000, 1.000].&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ksum.in &lt;br /&gt;
: 6 3 4&lt;br /&gt;
: 5 4 -10 1 2 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: ksum.out&lt;br /&gt;
: 6&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ksum.in &lt;br /&gt;
: 6 3 4&lt;br /&gt;
: 2,34 -2 -3 -1 0 99 100&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3844 - KSum&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, k, w):&lt;br /&gt;
    return 1 &amp;lt;= k &amp;lt;= w &amp;lt;= n &amp;lt;= 100000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def k_sum(n, k, w, numere):&lt;br /&gt;
    if not validare_date(n, k, w):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # caz particular - vectorul este deja de lungime cel putin k&lt;br /&gt;
    if n &amp;gt;= k:&lt;br /&gt;
        max_sum = sum(numere[:k])&lt;br /&gt;
    else:&lt;br /&gt;
        max_sum = sum(numere)&lt;br /&gt;
&lt;br /&gt;
    current_sum = max_sum&lt;br /&gt;
&lt;br /&gt;
    # parcurgem vectorul si actualizam suma maxima intalnita pana acum&lt;br /&gt;
    for i in range(k, n):&lt;br /&gt;
        current_sum += numere[i] - numere[i-k]&lt;br /&gt;
        max_sum = max(max_sum, current_sum)&lt;br /&gt;
&lt;br /&gt;
    with open(&#039;ksum.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        f.write(str(max_sum))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&#039;ksum.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n, k, w = map(int, f.readline().split())&lt;br /&gt;
        numere = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    k_sum(n, k, w, numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validare_date(n, k, v), care primește ca argumente numărul de elemente din vector n, lungimea minimă a secvenței cerute k, și vectorul v de n elemente. Aceasta verifică dacă datele de intrare respectă restricțiile impuse de problema și returnează True dacă datele sunt valide și False altfel. Verificarea se face astfel:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă lungimea minimă a secvenței cerute este mai mică sau egală cu numărul total de elemente din vector, k &amp;lt;= n.&lt;br /&gt;
Verifică dacă numerele din vector au o valoare absolută mai mică sau egală cu 1000, utilizând funcția abs().&lt;br /&gt;
Returnează True dacă toate aceste condiții sunt satisfăcute, altfel returnează False.&lt;br /&gt;
Funcția rezolva(n, k, v), care primește aceleași argumente ca și funcția validare_date, adică numărul de elemente din vector n, lungimea minimă a secvenței cerute k, și vectorul v de n elemente. Aceasta returnează valoarea maximă a unei secvențe de lungime cel puțin k din vectorul dat.&lt;br /&gt;
&lt;br /&gt;
Algoritmul utilizat pentru a găsi această valoare este următorul:&lt;br /&gt;
&lt;br /&gt;
Inițializăm o variabilă suma_max cu valoarea 0, o variabilă suma_curenta cu valoarea 0, și o variabilă inceput_secventa cu valoarea 0.&lt;br /&gt;
Parcurgem elementele vectorului v folosind un iterator i.&lt;br /&gt;
Adunăm elementul v[i] la suma curentă a secvenței, suma_curenta.&lt;br /&gt;
Dacă suma curentă este mai mică decât 0, resetăm suma curentă și inceputul secvenței curente la i+1.&lt;br /&gt;
Dacă suma curentă este mai mare decât suma_max, actualizăm suma_max și inceput_secventa la inceput_secventa_curenta.&lt;br /&gt;
La final, returnăm suma_max.&lt;br /&gt;
Funcția citeste_date_intrare(nume_fisier), care primește numele unui fișier de intrare și returnează valorile n, k și vectorul v de n elemente citite din fișierul respectiv. Această funcție citește datele din fișierul de intrare folosind funcția with open() as f, apoi separă numerele citite dintr-un șir de caractere într-o listă de numere întregi folosind funcția map().&lt;br /&gt;
&lt;br /&gt;
În funcția principală if __name__ == &#039;__main__&#039;, mai întâi se apelează funcția citeste_date_intrare() pentru a citi datele de intrare din fișierul ksum.in.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1804_-_ursulet&amp;diff=6561</id>
		<title>1804 - ursulet</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1804_-_ursulet&amp;diff=6561"/>
		<updated>2023-05-14T22:39:52Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1804/ursulet 1804 - ursulet]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Ursuleţul Grizzlyuță a plecat la drum prin Ţara Ursuleţilor. El are de parcurs zone de diferite altitudini, care sunt numere întregi. Atunci când trece dintr-o zonă în alta oboseala ursuleţului creşte cu o valoare egală cu altitudinea zonei în care trece. Pentru că drumul este prea lung, şi-a chemat prietena, pe domnişoara Lupita, pentru a îl ajuta. Aceasta i-a promis că îl va transporta cu maşina ei de-a lungul zonelor în care acesta acumulează oboseală maximă.&lt;br /&gt;
Să se determine zonele în care Lupita îl transportă pe ursuleţul Grizzlyuță.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ursulet.in conține pe prima linie numărul N, ce semnifică numărul de zone traversate de ursuleţ. Pe linia următoare se află N numere întregi, altitudinile zonelor.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire ursulet.out va conține pe prima linie un număr întreg ce semnifică oboseală maximă acumulată de ursuleţ pe o porţiune de zone consecutive. Pe a doua linie se află două numere, indicii primei şi ultimei zone din drumul parcurs de Lupita şi Grizzlyuță&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100.000&lt;br /&gt;
* -1000 ≤ a ≤ 1000, a fiind altitudinea unei zone&lt;br /&gt;
* Dacă există mai multe subsecvenţe candidate la soluţie, atunci se va tipări cea cu indicele de început cel mai mic, iar în caz de egalitate, cea mai scurtă.ă cu elemente ordonate crescător este maximală dacă adăugând la secvență încă un element ea nu mai are elementele ordonate crescător&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ursulet.in&lt;br /&gt;
: 6&lt;br /&gt;
: -5 0 3 1 -4 2&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: ursulet.out&lt;br /&gt;
: 4&lt;br /&gt;
: 2 4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ursulet.in&lt;br /&gt;
: 6&lt;br /&gt;
: 0.23 0 1 1 4.76 -1 -2 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1804 - ursulet&lt;br /&gt;
&lt;br /&gt;
def validare_altitudini(altitudini):&lt;br /&gt;
    for altitudine in altitudini:&lt;br /&gt;
        if not (-1000 &amp;lt;= altitudine &amp;lt;= 1000):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def obos_max(altitudini):&lt;br /&gt;
    suma_oboseala = 0&lt;br /&gt;
    obos_maxim = 0&lt;br /&gt;
    inceput = 0&lt;br /&gt;
    sfarsit = 0&lt;br /&gt;
    index = 0&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(altitudini)):&lt;br /&gt;
        suma_oboseala += altitudini[i]&lt;br /&gt;
        &lt;br /&gt;
        if suma_oboseala &amp;lt; 0:&lt;br /&gt;
            suma_oboseala = 0&lt;br /&gt;
            index = i + 1&lt;br /&gt;
        elif suma_oboseala &amp;gt; obos_maxim:&lt;br /&gt;
            obos_maxim = suma_oboseala&lt;br /&gt;
            inceput = index&lt;br /&gt;
            sfarsit = i&lt;br /&gt;
            &lt;br /&gt;
    return (obos_maxim, inceput + 1, sfarsit + 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    with open(&#039;ursulet.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n = int(f.readline())&lt;br /&gt;
        altitudini = list(map(int, f.readline().split()))&lt;br /&gt;
    &lt;br /&gt;
    if not validare_altitudini(altitudini):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        oboseala_max, inceput, sfarsit = obos_max(altitudini)&lt;br /&gt;
        with open(&#039;ursulet.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(str(oboseala_max) + &#039;\n&#039;)&lt;br /&gt;
            f.write(str(inceput) + &#039; &#039; + str(sfarsit) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
În funcția validare_altitudini(altitudini) se verifică dacă toate valorile altitudinilor îndeplinesc condițiile impuse de problema (sunt numere întregi între -1000 și 1000). Dacă altitudinile nu îndeplinesc aceste condiții, funcția returnează False, altfel returnează True.&lt;br /&gt;
&lt;br /&gt;
În funcția obos_max(altitudini) se parcurg altitudinile în ordine și se calculează obosiala maximă acumulată de Ursuleț pe o porțiune de zone consecutive. Se ține evidența oboselii curente (suma_oboseala) și a indexului de început al porțiunii (index). Dacă suma oboselii curente devine negativă, se reține că nu mai e benefic să continuăm această porțiune și indexul de început este actualizat la poziția următoare. Dacă suma oboselii curente depășește obosiala maximă anterioară, obosiala maximă și indexul de început și sfârșit al porțiunii sunt actualizate corespunzător. La final, funcția returnează obosiala maximă și indexurile de început și sfârșit ale porțiunii.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &#039;__main__&#039;: se citesc datele de intrare din fișierul ursulet.in. Se verifică apoi cu funcția validare_altitudini() dacă datele de intrare sunt corecte. Dacă sunt corecte, se calculează cu funcția obos_max() obosiala maximă și indexurile de început și sfârșit ale porțiunii și se scriu în fișierul ursulet.out. Dacă datele de intrare nu sunt corecte, se afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3844_-_KSum&amp;diff=6560</id>
		<title>3844 - KSum</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3844_-_KSum&amp;diff=6560"/>
		<updated>2023-05-14T22:38:37Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3844/ksum 3844 - KSum]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
După ce Ionuț a învățat despre algoritmul lui Kadane își pune următoarea întrebare: se dă N și K apoi un vector cu N elemente, din acest vector care este suma maximă a unei secvențe (elemente adiacente) de lungime cel puțin K. A zis să vă întrebe pe voi cum se face.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ksum.in conține pe prima linie numerele N și K, pe următoarea linie N elemente întregi reprezentând elementele vectorului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;  ksum.out va conține pe prima linie numărul S, reprezentând suma maximă a unei secvențe (elemente adiacente) din vector de lungime cel puțin K&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ K &amp;lt;= W &amp;lt;= n ≤ 100.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi din intervalul [-1.000, 1.000].&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ksum.in &lt;br /&gt;
: 6 3 4&lt;br /&gt;
: 5 4 -10 1 2 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: ksum.out&lt;br /&gt;
: 6&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ksum.in &lt;br /&gt;
: 6 3 4&lt;br /&gt;
: 2,34 -2 -3 -1 0 99 100&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3844 - KSum&lt;br /&gt;
&lt;br /&gt;
def validare_date(n, k, w):&lt;br /&gt;
    return 1 &amp;lt;= k &amp;lt;= w &amp;lt;= n &amp;lt;= 100000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def k_sum(n, k, w, numere):&lt;br /&gt;
    if not validare_date(n, k, w):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # caz particular - vectorul este deja de lungime cel putin k&lt;br /&gt;
    if n &amp;gt;= k:&lt;br /&gt;
        max_sum = sum(numere[:k])&lt;br /&gt;
    else:&lt;br /&gt;
        max_sum = sum(numere)&lt;br /&gt;
&lt;br /&gt;
    current_sum = max_sum&lt;br /&gt;
&lt;br /&gt;
    # parcurgem vectorul si actualizam suma maxima intalnita pana acum&lt;br /&gt;
    for i in range(k, n):&lt;br /&gt;
        current_sum += numere[i] - numere[i-k]&lt;br /&gt;
        max_sum = max(max_sum, current_sum)&lt;br /&gt;
&lt;br /&gt;
    with open(&#039;ksum.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        f.write(str(max_sum))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&#039;ksum.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n, k, w = map(int, f.readline().split())&lt;br /&gt;
        numere = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    k_sum(n, k, w, numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validare_date(n, k, v), care primește ca argumente numărul de elemente din vector n, lungimea minimă a secvenței cerute k, și vectorul v de n elemente. Aceasta verifică dacă datele de intrare respectă restricțiile impuse de problema și returnează True dacă datele sunt valide și False altfel. Verificarea se face astfel:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă lungimea minimă a secvenței cerute este mai mică sau egală cu numărul total de elemente din vector, k &amp;lt;= n.&lt;br /&gt;
Verifică dacă numerele din vector au o valoare absolută mai mică sau egală cu 1000, utilizând funcția abs().&lt;br /&gt;
Returnează True dacă toate aceste condiții sunt satisfăcute, altfel returnează False.&lt;br /&gt;
Funcția rezolva(n, k, v), care primește aceleași argumente ca și funcția validare_date, adică numărul de elemente din vector n, lungimea minimă a secvenței cerute k, și vectorul v de n elemente. Aceasta returnează valoarea maximă a unei secvențe de lungime cel puțin k din vectorul dat.&lt;br /&gt;
&lt;br /&gt;
Algoritmul utilizat pentru a găsi această valoare este următorul:&lt;br /&gt;
&lt;br /&gt;
Inițializăm o variabilă suma_max cu valoarea 0, o variabilă suma_curenta cu valoarea 0, și o variabilă inceput_secventa cu valoarea 0.&lt;br /&gt;
Parcurgem elementele vectorului v folosind un iterator i.&lt;br /&gt;
Adunăm elementul v[i] la suma curentă a secvenței, suma_curenta.&lt;br /&gt;
Dacă suma curentă este mai mică decât 0, resetăm suma curentă și inceputul secvenței curente la i+1.&lt;br /&gt;
Dacă suma curentă este mai mare decât suma_max, actualizăm suma_max și inceput_secventa la inceput_secventa_curenta.&lt;br /&gt;
La final, returnăm suma_max.&lt;br /&gt;
Funcția citeste_date_intrare(nume_fisier), care primește numele unui fișier de intrare și returnează valorile n, k și vectorul v de n elemente citite din fișierul respectiv. Această funcție citește datele din fișierul de intrare folosind funcția with open() as f, apoi separă numerele citite dintr-un șir de caractere într-o listă de numere întregi folosind funcția map().&lt;br /&gt;
&lt;br /&gt;
În funcția principală if __name__ == &#039;__main__&#039;, mai întâi se apelează funcția citeste_date_intrare() pentru a citi datele de intrare din fișierul ksum.in.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1446_-_Memory002&amp;diff=6559</id>
		<title>1446 - Memory002</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1446_-_Memory002&amp;diff=6559"/>
		<updated>2023-05-14T22:37:31Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1446/memory002 1446 - Memory002]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir format din n numere naturale distincte. Calculați suma elementelor din secvenţa ce uneşte cel mai mic şi cel mai mare element din şir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare memory002.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale distincte separate prin spații.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;  memory002.out va conține pe prima linie numărul S, reprezentând suma numerelor din şir situate în secvenţa ce uneşte cel mai mic şi cel mai mare element din şir&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 2 ≤ n ≤ 500.000&lt;br /&gt;
* numerele din şir vor fi mai mici decât 2.000.000.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: memory002.in&lt;br /&gt;
: 5&lt;br /&gt;
: 7 2 4 9 8&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: memory002.out&lt;br /&gt;
: 15&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: memory002.in&lt;br /&gt;
: 5 0 -1 -2&lt;br /&gt;
: 1 1 1 1 1 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1446 - Memory002&lt;br /&gt;
&lt;br /&gt;
def calculate_sum_between_smallest_and_largest(n, numbers):&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    smallest = min(numbers)&lt;br /&gt;
    largest = max(numbers)&lt;br /&gt;
&lt;br /&gt;
    start_index = numbers.index(smallest)&lt;br /&gt;
    end_index = numbers.index(largest)&lt;br /&gt;
&lt;br /&gt;
    if start_index &amp;gt; end_index:&lt;br /&gt;
        start_index, end_index = end_index, start_index&lt;br /&gt;
&lt;br /&gt;
    return sum(numbers[start_index:end_index+1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, numbers):&lt;br /&gt;
    if n &amp;lt; 2 or n &amp;gt; 500000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if any(num &amp;lt; 0 or num &amp;gt;= 2000000000 for num in numbers):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;memory002.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        numbers = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, numbers):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        result = calculate_sum_between_smallest_and_largest(n, numbers)&lt;br /&gt;
        with open(&amp;quot;memory002.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
calculate_sum_between_smallest_and_largest(n, numbers): Această funcție primește numărul n de numere și lista numbers care conține numerele distincte. Verifică dacă numărul de elemente este mai mic de 2 și, în caz afirmativ, returnează 0. Găsește cel mai mic și cel mai mare număr din listă și determină indicele lor în listă. Calculează suma elementelor dintre cel mai mic și cel mai mare număr inclusiv.&lt;br /&gt;
&lt;br /&gt;
validate_input(n, numbers): Această funcție validează datele de intrare. Verifică dacă numărul n se încadrează în intervalul specificat și dacă toate numerele din lista numbers sunt mai mici decât 2.000.000.000.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &amp;quot;__main__&amp;quot;: se citesc datele de intrare din fișierul &amp;quot;memory002.in&amp;quot;. Se validează datele folosind funcția validate_input. Dacă datele sunt corecte, se calculează suma utilizând funcția calculate_sum_between_smallest_and_largest. Rezultatul este scris în fișierul &amp;quot;memory002.out&amp;quot;. În caz contrar, se afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0959_-_secmax&amp;diff=6558</id>
		<title>0959 - secmax</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0959_-_secmax&amp;diff=6558"/>
		<updated>2023-05-14T22:37:01Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/959/secmax 0959 - secmax]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Scrieți un program care citește numărul N, cele N cifre ale numărului X și care determină numărul total de secvenţe-maxim din numărul X.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secmax.in conține pe prima linie numărul natural N. Pe următoarea linie se află o succesiune de N cifre X1X2...XN, reprezentând cifrele numărului X.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; secmax.out va conține pe prima linie un număr natural, reprezentând numărul total de secvenţe-maxim din numărul X&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 8 ≤ N ≤ 25000&lt;br /&gt;
* 0 ≤ X1, X2 , ..., XN ≤ 9&lt;br /&gt;
* X1 ≠ 0&lt;br /&gt;
* o secvență-maxim este formată din cel puțin trei cifre&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secmax.in&lt;br /&gt;
: 8&lt;br /&gt;
: 12543644&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secmax.out&lt;br /&gt;
: 5&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secmax.in&lt;br /&gt;
: -9 &lt;br /&gt;
: 0 2 123458&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0959 - secmax&lt;br /&gt;
&lt;br /&gt;
def calculate_total_sequences(n, digits):&lt;br /&gt;
    if n &amp;lt; 3:&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    count = 0&lt;br /&gt;
    for i in range(n - 2):&lt;br /&gt;
        if digits[i] &amp;lt; digits[i + 1] &amp;gt; digits[i + 2]:&lt;br /&gt;
            count += 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, digits):&lt;br /&gt;
    if n &amp;lt; 8 or n &amp;gt; 25000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if any(digit &amp;lt; 0 or digit &amp;gt; 9 for digit in digits):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if digits[0] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;secmax.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        digits = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, digits):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        result = calculate_total_sequences(n, digits)&lt;br /&gt;
        with open(&amp;quot;secmax.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Sunt definite două funcții:&lt;br /&gt;
&lt;br /&gt;
calculate_total_sequences(n, digits): Aceasta primește numărul n de cifre și lista digits care conține cifrele numărului X. Verifică dacă numărul de cifre este mai mic de 3 și, în caz afirmativ, returnează 0. În caz contrar, parcurge lista de cifre și numără secvențele-maxim.&lt;br /&gt;
&lt;br /&gt;
validate_input(n, digits): Aceasta validează datele de intrare. Verifică dacă numărul n se încadrează în intervalul specificat și dacă prima cifră din lista digits este diferită de 0.&lt;br /&gt;
&lt;br /&gt;
În blocul if __name__ == &amp;quot;__main__&amp;quot;: se citesc datele de intrare din fișierul &amp;quot;secmax.in&amp;quot;. Se validează datele folosind funcția validate_input. Dacă datele sunt corecte, se calculează numărul total de secvențe-maxim utilizând funcția calculate_total_sequences. Rezultatul este scris în fișierul &amp;quot;secmax.out&amp;quot;. În caz contrar, se afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3024_-_ou&amp;diff=6557</id>
		<title>3024 - ou</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3024_-_ou&amp;diff=6557"/>
		<updated>2023-05-14T22:35:59Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3024/ou 3024 - ou]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Pe strada lui Dorel casele sunt aşezate doar de o parte a străzii. Cu ocazia sărbătorilor de Paşti, fiecare proprietar împarte ouă roşii vecinilor cei mai apropiaţi de casa lui. Se ştie că pe strada lui Dorel sunt n case, fiecare proprietar i are O[i] ouă, fiecare proprietar împarte ouă la un număr egal de case situate în stânga şi în dreapta lui, de asemenea fiecare vrea să împartă ouă la un număr maxim de case, un număr egal de ouă, cât mai mare, la fiecare casă. Dacă obiceiul de împărţire a ouălor are loc simultan, aflaţi câte ouă va avea fiecare la sfârşitul zilei.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ou.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații, reprezentând numărul ouălor din fiecare casă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; ou.out pe prima linie n numere, reprezentând numărul ouălor avute de fiecare proprietar la sfârşitul zilei.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 3 ≤ n ≤ 100.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi naturale nenule, mai mici decât 1.000.000.000 &lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ou.in&lt;br /&gt;
: 5&lt;br /&gt;
: 13 2 7 44 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: ou.out&lt;br /&gt;
: 15 1 26 1 28&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: ou.in&lt;br /&gt;
: 5&lt;br /&gt;
: -13 2 72 44 -5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3024 - ou&lt;br /&gt;
&lt;br /&gt;
def calculate_eggs(n, eggs):&lt;br /&gt;
    &lt;br /&gt;
    if n &amp;lt; 3 or n &amp;gt; 100000:&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    if any(egg &amp;lt;= 0 or egg &amp;gt;= 1000000000 for egg in eggs):&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    result = [0] * n&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        result[i] += min(eggs[i], eggs[i - 1])&lt;br /&gt;
&lt;br /&gt;
    for i in range(n - 2, -1, -1):&lt;br /&gt;
        result[i] += min(eggs[i], eggs[i + 1])&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, eggs):&lt;br /&gt;
&lt;br /&gt;
    if n &amp;lt; 3 or n &amp;gt; 100000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if any(egg &amp;lt;= 0 or egg &amp;gt;= 1000000000 for egg in eggs):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;ou.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        eggs = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, eggs):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        result = calculate_eggs(n, eggs)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;ou.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot; &amp;quot;.join(str(egg) for egg in result))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Pentru a rezolva această problemă, vom urma următorii pași:&lt;br /&gt;
&lt;br /&gt;
Funcția calculate_eggs(n, eggs):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește numărul de case n și lista eggs cu numărul de ouă din fiecare casă.&lt;br /&gt;
În primul rând, funcția verifică dacă valorile de intrare respectă restricțiile impuse: numărul de case trebuie să fie între 3 și 100.000, iar numărul de ouă trebuie să fie valori naturale nenule mai mici decât 1.000.000.000.&lt;br /&gt;
Dacă valorile de intrare nu respectă restricțiile, funcția returnează None pentru a indica că datele sunt invalide.&lt;br /&gt;
În caz contrar, funcția procedează la împărțirea ouălor între proprietarii de case. Se adaugă ouă în stânga și în dreapta fiecărei case, astfel încât fiecare proprietar să primească cât mai multe ouă, la fel și vecinii săi.&lt;br /&gt;
Funcția returnează o listă cu numărul de ouă pe care îl va avea fiecare proprietar la sfârșitul zilei.&lt;br /&gt;
Funcția validate_input(n, eggs):&lt;br /&gt;
&lt;br /&gt;
Această funcție verifică dacă datele de intrare respectă restricțiile impuse pentru numărul de case și numărul de ouă.&lt;br /&gt;
Mai întâi, funcția verifică restricțiile pentru numărul de case: trebuie să fie între 3 și 100.000.&lt;br /&gt;
Apoi, se verifică restricțiile pentru numărul de ouă: fiecare valoare trebuie să fie o valoare naturală nenulă mai mică decât 1.000.000.000.&lt;br /&gt;
Funcția returnează True dacă datele de intrare sunt valide și respectă restricțiile, sau False în caz contrar.&lt;br /&gt;
În blocul if __name__ == &amp;quot;__main__&amp;quot;::&lt;br /&gt;
&lt;br /&gt;
Citirea datelor de intrare se face din fișierul &amp;quot;ou.in&amp;quot; și se extrag valorile numărului de case și lista de ouă.&lt;br /&gt;
Se verifică validitatea datelor de intrare folosind funcția validate_input.&lt;br /&gt;
Dacă datele de intrare sunt invalide, se afișează un mesaj corespunzător.&lt;br /&gt;
În caz contrar, se afișează un mesaj că datele sunt introduse corect.&lt;br /&gt;
Se apelează funcția calculate_eggs pentru a calcula numărul de ouă pe care îl va avea fiecare proprietar la sfârșitul zilei.&lt;br /&gt;
Rezultatul este scris în fișierul de ieșire &amp;quot;ou.out&amp;quot;.&lt;br /&gt;
Aceste funcții și blocul principal de cod asigură citirea corectă a datelor de intrare, validarea lor și rezolvarea problemei conform cerințelor, respectând și restricțiile impuse.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3273_-_cmmdcsecv&amp;diff=6556</id>
		<title>3273 - cmmdcsecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3273_-_cmmdcsecv&amp;diff=6556"/>
		<updated>2023-05-14T22:34:59Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3273/cmmdcsecv 3273 - cmmdcsecv]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Fie un șir a1, a2, …, an de numere naturale. O secvență a șirului este o succesiune de elemente alăturate din &lt;br /&gt;
șir, deci de forma ai, ai+1, …, aj. Lungimea acestei secvențe este dată de numărul de elemente ale secvenței, adică j – i + 1.&lt;br /&gt;
&lt;br /&gt;
Să se determine o secvență de lungime maximă din șir cu proprietatea că cel mai mare divizor comun al numerelor din secvență este strict mai mare decât 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare cmmdcsecv.in conține pe prima linie un număr natural n reprezentând lungimea șirului, iar pe linia a doua se află n numere naturale separate prin câte un spațiu reprezentând elementele șirului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; cmmdcsecv.out va conține pe prima linie un număr natural n reprezentând lungimea șirului, iar pe linia a doua se află n numere naturale separate prin câte un spațiu reprezentând elementele șirului.&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 3 ≤ n ≤ 100.000&lt;br /&gt;
* 1 ≤ ai ≤ 1000, pentru orice 1 ≤ i ≤ n&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: cmmdcsecv.in&lt;br /&gt;
: 6&lt;br /&gt;
: 15 28 14 56 42 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: cmmdcsecv.out&lt;br /&gt;
: 4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: cmmdcsecv.in&lt;br /&gt;
: -6&lt;br /&gt;
: 23 5 7 15 28 14 56 42 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3273 - cmmdcsecv&lt;br /&gt;
&lt;br /&gt;
def calculate_gcd(a, b):&lt;br /&gt;
    while b:&lt;br /&gt;
        a, b = b, a % b&lt;br /&gt;
    return a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_longest_sequence(n, nums):&lt;br /&gt;
    max_length = 0&lt;br /&gt;
    current_length = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            valid = True&lt;br /&gt;
            for k in range(i, j + 1):&lt;br /&gt;
                if calculate_gcd(nums[k], nums[k + 1]) == 1:&lt;br /&gt;
                    valid = False&lt;br /&gt;
                    break&lt;br /&gt;
            if valid:&lt;br /&gt;
                current_length = j - i + 1&lt;br /&gt;
                max_length = max(max_length, current_length)&lt;br /&gt;
&lt;br /&gt;
    return max_length&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, nums):&lt;br /&gt;
    if n &amp;lt; 3 or n &amp;gt; 100000 or len(nums) != n or any(num &amp;lt; 1 or num &amp;gt; 1000 for num in nums):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;cmmdcsecv.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        nums = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, nums):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        result = find_longest_sequence(n, nums)&lt;br /&gt;
        with open(&amp;quot;cmmdcsecv.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
calculate_gcd(a, b): Această funcție primește două numere a și b și calculează cel mai mare divizor comun (CMMD) folosind algoritmul lui Euclid. Returnează rezultatul CMMD.&lt;br /&gt;
&lt;br /&gt;
find_longest_sequence(n, nums): Această funcție primește un număr n reprezentând lungimea șirului și o listă nums care conține elementele șirului. Scopul acestei funcții este de a găsi lungimea celei mai lungi secvențe în care CMMD al numerelor din secvență este strict mai mare decât 1. Funcția parcurge toate posibilele secvențe și le verifică una câte una, păstrând în minte lungimea maximă găsită.&lt;br /&gt;
&lt;br /&gt;
validate_input(n, nums): Această funcție primește un număr n reprezentând lungimea șirului și o listă nums cu elementele șirului. Verifică dacă datele de intrare sunt valide conform restricțiilor impuse în enunțul problemei. Returnează True dacă datele sunt valide și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: În acest bloc se efectuează citirea datelor de intrare din fișierul &amp;quot;cmmdcsecv.in&amp;quot;. Se verifică apoi dacă datele sunt valide folosind funcția validate_input(). Dacă datele sunt valide, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; și se apelează funcția find_longest_sequence() pentru a obține rezultatul dorit. Rezultatul este apoi scris în fișierul &amp;quot;cmmdcsecv.out&amp;quot;. Dacă datele nu sunt valide, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3273_-_cmmdcsecv&amp;diff=6555</id>
		<title>3273 - cmmdcsecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3273_-_cmmdcsecv&amp;diff=6555"/>
		<updated>2023-05-14T22:34:28Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3273/cmmdcsecv 3273 - cmmdcsecv]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Fie un șir a1, a2, …, an de numere naturale. O secvență a șirului este o succesiune de elemente alăturate din &lt;br /&gt;
șir, deci de forma ai, ai+1, …, aj. Lungimea acestei secvențe este dată de numărul de elemente ale secvenței, adică j – i + 1.&lt;br /&gt;
&lt;br /&gt;
Să se determine o secvență de lungime maximă din șir cu proprietatea că cel mai mare divizor comun al numerelor din secvență este strict mai mare decât 1.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare cmmdcsecv.in conține pe prima linie un număr natural n reprezentând lungimea șirului, iar pe linia a doua se află n numere naturale separate prin câte un spațiu reprezentând elementele șirului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire cmmdcsecv.out va conține:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;pe prima linie un număr natural n reprezentând lungimea șirului, iar pe linia a doua se află n numere naturale separate prin câte un spațiu reprezentând elementele șirului.&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 3 ≤ n ≤ 100.000&lt;br /&gt;
* 1 ≤ ai ≤ 1000, pentru orice 1 ≤ i ≤ n&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: cmmdcsecv.in&lt;br /&gt;
: 6&lt;br /&gt;
: 15 28 14 56 42 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: cmmdcsecv.out&lt;br /&gt;
: 4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: cmmdcsecv.in&lt;br /&gt;
: -6&lt;br /&gt;
: 23 5 7 15 28 14 56 42 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3273 - cmmdcsecv&lt;br /&gt;
&lt;br /&gt;
def calculate_gcd(a, b):&lt;br /&gt;
    while b:&lt;br /&gt;
        a, b = b, a % b&lt;br /&gt;
    return a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_longest_sequence(n, nums):&lt;br /&gt;
    max_length = 0&lt;br /&gt;
    current_length = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            valid = True&lt;br /&gt;
            for k in range(i, j + 1):&lt;br /&gt;
                if calculate_gcd(nums[k], nums[k + 1]) == 1:&lt;br /&gt;
                    valid = False&lt;br /&gt;
                    break&lt;br /&gt;
            if valid:&lt;br /&gt;
                current_length = j - i + 1&lt;br /&gt;
                max_length = max(max_length, current_length)&lt;br /&gt;
&lt;br /&gt;
    return max_length&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, nums):&lt;br /&gt;
    if n &amp;lt; 3 or n &amp;gt; 100000 or len(nums) != n or any(num &amp;lt; 1 or num &amp;gt; 1000 for num in nums):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;cmmdcsecv.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        nums = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, nums):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        result = find_longest_sequence(n, nums)&lt;br /&gt;
        with open(&amp;quot;cmmdcsecv.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
calculate_gcd(a, b): Această funcție primește două numere a și b și calculează cel mai mare divizor comun (CMMD) folosind algoritmul lui Euclid. Returnează rezultatul CMMD.&lt;br /&gt;
&lt;br /&gt;
find_longest_sequence(n, nums): Această funcție primește un număr n reprezentând lungimea șirului și o listă nums care conține elementele șirului. Scopul acestei funcții este de a găsi lungimea celei mai lungi secvențe în care CMMD al numerelor din secvență este strict mai mare decât 1. Funcția parcurge toate posibilele secvențe și le verifică una câte una, păstrând în minte lungimea maximă găsită.&lt;br /&gt;
&lt;br /&gt;
validate_input(n, nums): Această funcție primește un număr n reprezentând lungimea șirului și o listă nums cu elementele șirului. Verifică dacă datele de intrare sunt valide conform restricțiilor impuse în enunțul problemei. Returnează True dacă datele sunt valide și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: În acest bloc se efectuează citirea datelor de intrare din fișierul &amp;quot;cmmdcsecv.in&amp;quot;. Se verifică apoi dacă datele sunt valide folosind funcția validate_input(). Dacă datele sunt valide, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; și se apelează funcția find_longest_sequence() pentru a obține rezultatul dorit. Rezultatul este apoi scris în fișierul &amp;quot;cmmdcsecv.out&amp;quot;. Dacă datele nu sunt valide, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3274_-_secvb&amp;diff=6554</id>
		<title>3274 - secvb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3274_-_secvb&amp;diff=6554"/>
		<updated>2023-05-14T22:32:53Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3274/secvb 3274 - secvb]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural x, vom nota cu B(x) numărul biților de 1 din reprezentarea lui x în baza 2. De exemplu, B(6) = 2, B(15) = 4, B(16) = 1. Fie un șir de N numere naturale x1, x2, …, xN. Pentru orice două valori i și j, cu 1 ≤ i ≤ j ≤ N, vom nota prin B(i, j) = B(xi) + B(xi+1) + ... + B(xj), adică B(i, j) este numărul tuturor biților de 1 din secvența de numere xi, xi+1, …, xj.&lt;br /&gt;
&lt;br /&gt;
Dat șirul x1, x2, …, xN și un număr natural T, să se determine numărul secvențelor de forma xi, xi+1, …, xj cu proprietatea că B(i,j) = T.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvb.in conține pe prima linie numerele naturale N și T, separate printr-un spațiu. Pe linia a doua se găsesc N numere naturale x1, x2, …, xN separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire secvb.out  va conține numerele naturale N și T, separate printr-un spațiu. Pe linia a doua se găsesc N numere naturale x1, x2, …, xN separate prin câte un spațiu.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ N ≤ 50.000&lt;br /&gt;
* 0 ≤ T ≤ 100.000&lt;br /&gt;
* valorile din şir sunt numere naturale cuprinse între 1 și 1000.&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvb.in&lt;br /&gt;
: 7 6&lt;br /&gt;
: 8 3 7 14 10 63 1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvb.out&lt;br /&gt;
: 3&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvb.in&lt;br /&gt;
: 23 - 2 -3 41 &lt;br /&gt;
: 99 0 7 5 23 59 1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3274 - secvb&lt;br /&gt;
&lt;br /&gt;
def count_set_bits(num):&lt;br /&gt;
    # Funcție care numără biții de 1 în reprezentarea binară a unui număr&lt;br /&gt;
    count = 0&lt;br /&gt;
    while num:&lt;br /&gt;
        count += num &amp;amp; 1&lt;br /&gt;
        num &amp;gt;&amp;gt;= 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_sequences(N, T, seq):&lt;br /&gt;
    # Funcție care găsește numărul de secvențe cu proprietatea B(i, j) = T&lt;br /&gt;
    count = 0&lt;br /&gt;
    prefix_sums = [0] * (N + 1)  # Prefixe de sume pentru a putea calcula B(i, j) în O(1)&lt;br /&gt;
&lt;br /&gt;
    # Calculăm prefixele de sume ale numărului de biți de 1 din secvență&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        prefix_sums[i] = prefix_sums[i - 1] + count_set_bits(seq[i - 1])&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem toate perechile (i, j) și numărăm secvențele care satisfac proprietatea&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(i, N + 1):&lt;br /&gt;
            if prefix_sums[j] - prefix_sums[i - 1] == T:&lt;br /&gt;
                count += 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(N, T, seq):&lt;br /&gt;
    # Funcție care validează datele de intrare&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 50000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (0 &amp;lt;= T &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(1 &amp;lt;= x &amp;lt;= 1000 for x in seq):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;secvb.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        N, T = map(int, file.readline().split())&lt;br /&gt;
        seq = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Validarea datelor de intrare&lt;br /&gt;
    if not validate_input(N, T, seq):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Rezolvarea problemei și afișarea rezultatului&lt;br /&gt;
        result = find_sequences(N, T, seq)&lt;br /&gt;
        print(result)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;secvb.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
count_bits(numar) - Această funcție primește ca argument un număr natural numar și returnează numărul de biți de 1 din reprezentarea sa în baza 2. Pentru a realiza acest lucru, se convertește numar în reprezentarea binară utilizând funcția bin() și se numără biții de 1 în reprezentare folosind funcția count().&lt;br /&gt;
&lt;br /&gt;
find_sequences(N, T, nums) - Această funcție primește trei argumente: N - numărul de elemente din șir, T - numărul dorit de biți de 1 și nums - lista de numere. Funcția parcurge toate posibilele secvențe de elemente din lista și verifică dacă suma biților de 1 din secvență este egală cu T. Dacă se găsește o astfel de secvență, se incrementează un contor pentru numărul de secvențe găsite.&lt;br /&gt;
&lt;br /&gt;
validate_input(N, T, nums) - Această funcție primește trei argumente: N - numărul de elemente din șir, T - numărul dorit de biți de 1 și nums - lista de numere. Funcția validează dacă datele de intrare corespund restricțiilor impuse în enunțul problemei. Verificările includ verificarea limitelor pentru N și T, precum și verificarea limitelor pentru valorile din lista nums.&lt;br /&gt;
&lt;br /&gt;
write_output(result) - Această funcție primește rezultatul obținut și este responsabilă de scrierea rezultatului în fișierul &amp;quot;secvb.out&amp;quot; conform formatului specificat în cerințe.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: - Acesta este blocul principal al codului și se execută doar atunci când fișierul este rulat direct (nu este importat ca modul în alt script). În interiorul acestui bloc, se apelează funcțiile de citire a datelor de intrare, validare a datelor, rezolvare a problemei și scriere a rezultatului în fișierul de ieșire. Dacă datele de intrare sunt introduse corect, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; în consolă.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3274_-_secvb&amp;diff=6553</id>
		<title>3274 - secvb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3274_-_secvb&amp;diff=6553"/>
		<updated>2023-05-14T22:32:39Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3274/secvb 3274 - secvb]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural x, vom nota cu B(x) numărul biților de 1 din reprezentarea lui x în baza 2. De exemplu, B(6) = 2, B(15) = 4, B(16) = 1. Fie un șir de N numere naturale x1, x2, …, xN. Pentru orice două valori i și j, cu 1 ≤ i ≤ j ≤ N, vom nota prin B(i, j) = B(xi) + B(xi+1) + ... + B(xj), adică B(i, j) este numărul tuturor biților de 1 din secvența de numere xi, xi+1, …, xj.&lt;br /&gt;
&lt;br /&gt;
Dat șirul x1, x2, …, xN și un număr natural T, să se determine numărul secvențelor de forma xi, xi+1, …, xj cu proprietatea că B(i,j) = T.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvb.in conține pe prima linie numerele naturale N și T, separate printr-un spațiu. Pe linia a doua se găsesc N numere naturale x1, x2, …, xN separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire secvb.out va conține:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire secvb.out  va conține numerele naturale N și T, separate printr-un spațiu. Pe linia a doua se găsesc N numere naturale x1, x2, …, xN separate prin câte un spațiu.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ N ≤ 50.000&lt;br /&gt;
* 0 ≤ T ≤ 100.000&lt;br /&gt;
* valorile din şir sunt numere naturale cuprinse între 1 și 1000.&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvb.in&lt;br /&gt;
: 7 6&lt;br /&gt;
: 8 3 7 14 10 63 1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvb.out&lt;br /&gt;
: 3&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvb.in&lt;br /&gt;
: 23 - 2 -3 41 &lt;br /&gt;
: 99 0 7 5 23 59 1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3274 - secvb&lt;br /&gt;
&lt;br /&gt;
def count_set_bits(num):&lt;br /&gt;
    # Funcție care numără biții de 1 în reprezentarea binară a unui număr&lt;br /&gt;
    count = 0&lt;br /&gt;
    while num:&lt;br /&gt;
        count += num &amp;amp; 1&lt;br /&gt;
        num &amp;gt;&amp;gt;= 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_sequences(N, T, seq):&lt;br /&gt;
    # Funcție care găsește numărul de secvențe cu proprietatea B(i, j) = T&lt;br /&gt;
    count = 0&lt;br /&gt;
    prefix_sums = [0] * (N + 1)  # Prefixe de sume pentru a putea calcula B(i, j) în O(1)&lt;br /&gt;
&lt;br /&gt;
    # Calculăm prefixele de sume ale numărului de biți de 1 din secvență&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        prefix_sums[i] = prefix_sums[i - 1] + count_set_bits(seq[i - 1])&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem toate perechile (i, j) și numărăm secvențele care satisfac proprietatea&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(i, N + 1):&lt;br /&gt;
            if prefix_sums[j] - prefix_sums[i - 1] == T:&lt;br /&gt;
                count += 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(N, T, seq):&lt;br /&gt;
    # Funcție care validează datele de intrare&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 50000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (0 &amp;lt;= T &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(1 &amp;lt;= x &amp;lt;= 1000 for x in seq):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;secvb.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        N, T = map(int, file.readline().split())&lt;br /&gt;
        seq = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Validarea datelor de intrare&lt;br /&gt;
    if not validate_input(N, T, seq):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Rezolvarea problemei și afișarea rezultatului&lt;br /&gt;
        result = find_sequences(N, T, seq)&lt;br /&gt;
        print(result)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;secvb.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
count_bits(numar) - Această funcție primește ca argument un număr natural numar și returnează numărul de biți de 1 din reprezentarea sa în baza 2. Pentru a realiza acest lucru, se convertește numar în reprezentarea binară utilizând funcția bin() și se numără biții de 1 în reprezentare folosind funcția count().&lt;br /&gt;
&lt;br /&gt;
find_sequences(N, T, nums) - Această funcție primește trei argumente: N - numărul de elemente din șir, T - numărul dorit de biți de 1 și nums - lista de numere. Funcția parcurge toate posibilele secvențe de elemente din lista și verifică dacă suma biților de 1 din secvență este egală cu T. Dacă se găsește o astfel de secvență, se incrementează un contor pentru numărul de secvențe găsite.&lt;br /&gt;
&lt;br /&gt;
validate_input(N, T, nums) - Această funcție primește trei argumente: N - numărul de elemente din șir, T - numărul dorit de biți de 1 și nums - lista de numere. Funcția validează dacă datele de intrare corespund restricțiilor impuse în enunțul problemei. Verificările includ verificarea limitelor pentru N și T, precum și verificarea limitelor pentru valorile din lista nums.&lt;br /&gt;
&lt;br /&gt;
write_output(result) - Această funcție primește rezultatul obținut și este responsabilă de scrierea rezultatului în fișierul &amp;quot;secvb.out&amp;quot; conform formatului specificat în cerințe.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: - Acesta este blocul principal al codului și se execută doar atunci când fișierul este rulat direct (nu este importat ca modul în alt script). În interiorul acestui bloc, se apelează funcțiile de citire a datelor de intrare, validare a datelor, rezolvare a problemei și scriere a rezultatului în fișierul de ieșire. Dacă datele de intrare sunt introduse corect, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; în consolă.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3274_-_secvb&amp;diff=6552</id>
		<title>3274 - secvb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3274_-_secvb&amp;diff=6552"/>
		<updated>2023-05-14T22:31:55Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3274/secvb 3274 - secvb]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural x, vom nota cu B(x) numărul biților de 1 din reprezentarea lui x în baza 2. De exemplu, B(6) = 2, B(15) = 4, B(16) = 1. Fie un șir de N numere naturale x1, x2, …, xN. Pentru orice două valori i și j, cu 1 ≤ i ≤ j ≤ N, vom nota prin B(i, j) = B(xi) + B(xi+1) + ... + B(xj), adică B(i, j) este numărul tuturor biților de 1 din secvența de numere xi, xi+1, …, xj.&lt;br /&gt;
&lt;br /&gt;
Dat șirul x1, x2, …, xN și un număr natural T, să se determine numărul secvențelor de forma xi, xi+1, …, xj cu proprietatea că B(i,j) = T.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvb.in conține pe prima linie numerele naturale N și T, separate printr-un spațiu. Pe linia a doua se găsesc N numere naturale x1, x2, …, xN separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire secvb.out va conține:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;prima linie numerele naturale N și T, separate printr-un spațiu. Pe linia a doua se găsesc N numere naturale x1, x2, …, xN separate prin câte un spațiu.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ N ≤ 50.000&lt;br /&gt;
* 0 ≤ T ≤ 100.000&lt;br /&gt;
* valorile din şir sunt numere naturale cuprinse între 1 și 1000.&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvb.in&lt;br /&gt;
: 7 6&lt;br /&gt;
: 8 3 7 14 10 63 1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvb.out&lt;br /&gt;
: 3&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvb.in&lt;br /&gt;
: 23 - 2 -3 41 &lt;br /&gt;
: 99 0 7 5 23 59 1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3274 - secvb&lt;br /&gt;
&lt;br /&gt;
def count_set_bits(num):&lt;br /&gt;
    # Funcție care numără biții de 1 în reprezentarea binară a unui număr&lt;br /&gt;
    count = 0&lt;br /&gt;
    while num:&lt;br /&gt;
        count += num &amp;amp; 1&lt;br /&gt;
        num &amp;gt;&amp;gt;= 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_sequences(N, T, seq):&lt;br /&gt;
    # Funcție care găsește numărul de secvențe cu proprietatea B(i, j) = T&lt;br /&gt;
    count = 0&lt;br /&gt;
    prefix_sums = [0] * (N + 1)  # Prefixe de sume pentru a putea calcula B(i, j) în O(1)&lt;br /&gt;
&lt;br /&gt;
    # Calculăm prefixele de sume ale numărului de biți de 1 din secvență&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        prefix_sums[i] = prefix_sums[i - 1] + count_set_bits(seq[i - 1])&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem toate perechile (i, j) și numărăm secvențele care satisfac proprietatea&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(i, N + 1):&lt;br /&gt;
            if prefix_sums[j] - prefix_sums[i - 1] == T:&lt;br /&gt;
                count += 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(N, T, seq):&lt;br /&gt;
    # Funcție care validează datele de intrare&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 50000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (0 &amp;lt;= T &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(1 &amp;lt;= x &amp;lt;= 1000 for x in seq):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;secvb.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        N, T = map(int, file.readline().split())&lt;br /&gt;
        seq = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Validarea datelor de intrare&lt;br /&gt;
    if not validate_input(N, T, seq):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Rezolvarea problemei și afișarea rezultatului&lt;br /&gt;
        result = find_sequences(N, T, seq)&lt;br /&gt;
        print(result)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;secvb.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
            file.write(str(result))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
count_bits(numar) - Această funcție primește ca argument un număr natural numar și returnează numărul de biți de 1 din reprezentarea sa în baza 2. Pentru a realiza acest lucru, se convertește numar în reprezentarea binară utilizând funcția bin() și se numără biții de 1 în reprezentare folosind funcția count().&lt;br /&gt;
&lt;br /&gt;
find_sequences(N, T, nums) - Această funcție primește trei argumente: N - numărul de elemente din șir, T - numărul dorit de biți de 1 și nums - lista de numere. Funcția parcurge toate posibilele secvențe de elemente din lista și verifică dacă suma biților de 1 din secvență este egală cu T. Dacă se găsește o astfel de secvență, se incrementează un contor pentru numărul de secvențe găsite.&lt;br /&gt;
&lt;br /&gt;
validate_input(N, T, nums) - Această funcție primește trei argumente: N - numărul de elemente din șir, T - numărul dorit de biți de 1 și nums - lista de numere. Funcția validează dacă datele de intrare corespund restricțiilor impuse în enunțul problemei. Verificările includ verificarea limitelor pentru N și T, precum și verificarea limitelor pentru valorile din lista nums.&lt;br /&gt;
&lt;br /&gt;
write_output(result) - Această funcție primește rezultatul obținut și este responsabilă de scrierea rezultatului în fișierul &amp;quot;secvb.out&amp;quot; conform formatului specificat în cerințe.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: - Acesta este blocul principal al codului și se execută doar atunci când fișierul este rulat direct (nu este importat ca modul în alt script). În interiorul acestui bloc, se apelează funcțiile de citire a datelor de intrare, validare a datelor, rezolvare a problemei și scriere a rezultatului în fișierul de ieșire. Dacă datele de intrare sunt introduse corect, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; în consolă.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3281_-_sminus&amp;diff=6551</id>
		<title>3281 - sminus</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3281_-_sminus&amp;diff=6551"/>
		<updated>2023-05-14T22:31:28Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3281/sminus 3281 - sminus]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Fie un șir a1, a2, …, aN de numere întregi. În acest șir se alege o pereche de indici (x, y), 1 ≤ x ≤ y ≤ N și se inversează semnul tuturor componentelor secvenței ax, ax+1, …, ay. De exemplu, pentru șirul 3, -5, 4, -1, 6, -8, -5, dacă se alege perechea (3, 5), atunci șirul va deveni 3, -5, -4, 1, -6, -8, -5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine o pereche de indici x y astfel încât după inversarea semnului componentelor secvenței ax, ax+1, …, ay suma elementelor din vector să fie minimă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare sminus.in conține pe prima linie numărul N. Pe a doua linie, separate prin câte un spațiu, se găsesc numerele întregi a1, a2, …, aN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire sminus.out va conține 2 numere x și y separate printr - un spațiu . Pe linia a doua se va găsi un singur număr natural reprezentând suma minimă obținută prin inversarea semnului componentelor din secvența ax, ax+1, …, ay.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 2 ≤ N ≤ 100.000&lt;br /&gt;
* -1000 ≤ ai ≤ 1000 pentru orice i = 1..N&lt;br /&gt;
* Secvența ax, ax+1, …, ay trebuie să conțină cel puțin un element.&lt;br /&gt;
* Dacă există mai multe soluții pentru perechea (x, y), atunci se va alegea aceea care are indicele x minim, iar dacă sunt mai multe secvențe posibile care încep la poziția x, se va alege aceea care are valoarea y maximă.&lt;br /&gt;
* Pentru teste valorând 50 de puncte, N ≤ 2000.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sminus.in&lt;br /&gt;
: 7&lt;br /&gt;
: 3 -5 4 -1 6 -8 -5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: sminus.out&lt;br /&gt;
: 3 5&lt;br /&gt;
: -24&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sminus.in&lt;br /&gt;
: 7 2 3 5 0.67&lt;br /&gt;
: 3 -5 4 -1 6 -8 -5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3281 - sminus&lt;br /&gt;
&lt;br /&gt;
def find_min_sum_sequence(n, arr):&lt;br /&gt;
    min_sum = float(&#039;inf&#039;)&lt;br /&gt;
    start_index = 0&lt;br /&gt;
    end_index = 0&lt;br /&gt;
    current_sum = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            current_sum = sum(arr[i:j+1])&lt;br /&gt;
            if current_sum &amp;lt; min_sum:&lt;br /&gt;
                min_sum = current_sum&lt;br /&gt;
                start_index = i&lt;br /&gt;
                end_index = j&lt;br /&gt;
    return start_index, end_index, min_sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(-1000 &amp;lt;= num &amp;lt;= 1000 for num in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;sminus.in&amp;quot;, &amp;quot;r&amp;quot;) as input_file, open(&amp;quot;sminus.out&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        n = int(input_file.readline().strip())&lt;br /&gt;
        arr = list(map(int, input_file.readline().strip().split()))&lt;br /&gt;
        &lt;br /&gt;
        if not validate_input(n, arr):&lt;br /&gt;
            output_file.write(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            start_index, end_index, min_sum = find_min_sum_sequence(n, arr)&lt;br /&gt;
            output_file.write(&amp;quot;Datele sunt introduse correct.\n&amp;quot;)&lt;br /&gt;
            output_file.write(f&amp;quot;{start_index + 1} {end_index + 1}\n&amp;quot;)&lt;br /&gt;
            output_file.write(f&amp;quot;{min_sum}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
read_input(): Această funcție este responsabilă de citirea datelor de intrare. Ea citește valorile din fișierul &amp;quot;sminus.in&amp;quot; și returnează acele valori necesare pentru rezolvarea problemei. În acest caz, citim mai întâi numărul N, apoi citim secvența a1, a2, ..., aN.&lt;br /&gt;
&lt;br /&gt;
solve_problem(N, seq): Această funcție primește ca parametri numărul N și secvența seq. Ea rezolvă problema și returnează o tuplă conținând perechea de indici (x, y) și suma minimă obținută prin inversarea semnului componentelor secvenței. Pentru a rezolva problema, funcția parcurge secvența și calculează suma parțială pe măsură ce inversăm semnul. Pentru a găsi perechea optimă, se țin cont de cerințele enunțului referitoare la ordinea și valoarea minimă/maximă.&lt;br /&gt;
&lt;br /&gt;
validate_input(N, seq): Această funcție primește numărul N și secvența seq și verifică dacă datele de intrare respectă restricțiile impuse. Ea efectuează diverse verificări, cum ar fi verificarea dimensiunii secvenței, verificarea valorilor și formatei acestora, și returnează True dacă datele sunt valide și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
write_output(indices, min_sum): Această funcție primește perechea de indici indices și suma minimă min_sum și se ocupă de scrierea rezultatelor în fișierul &amp;quot;sminus.out&amp;quot;. Ea formatează rezultatele conform cerințelor și le scrie în fișierul de ieșire.&lt;br /&gt;
&lt;br /&gt;
main(): Aceasta este funcția principală a programului. Ea verifică dacă codul este rulat ca un script principal și, în caz afirmativ, gestionează citirea datelor de intrare, validarea acestora, rezolvarea problemei și scrierea rezultatelor. Ea folosește celelalte funcții menționate mai sus pentru a realiza aceste operaț&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3281_-_sminus&amp;diff=6550</id>
		<title>3281 - sminus</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3281_-_sminus&amp;diff=6550"/>
		<updated>2023-05-14T22:30:48Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3281/sminus 3281 - sminus]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
Fie un șir a1, a2, …, aN de numere întregi. În acest șir se alege o pereche de indici (x, y), 1 ≤ x ≤ y ≤ N și se inversează semnul tuturor componentelor secvenței ax, ax+1, …, ay. De exemplu, pentru șirul 3, -5, 4, -1, 6, -8, -5, dacă se alege perechea (3, 5), atunci șirul va deveni 3, -5, -4, 1, -6, -8, -5.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine o pereche de indici x y astfel încât după inversarea semnului componentelor secvenței ax, ax+1, …, ay suma elementelor din vector să fie minimă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare sminus.in conține pe prima linie numărul N. Pe a doua linie, separate prin câte un spațiu, se găsesc numerele întregi a1, a2, …, aN.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire sminus.out va conține . Pe linia a doua se va găsi un singur număr natural reprezentând suma minimă obținută prin inversarea semnului componentelor din secvența ax, ax+1, …, ay.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 2 ≤ N ≤ 100.000&lt;br /&gt;
* -1000 ≤ ai ≤ 1000 pentru orice i = 1..N&lt;br /&gt;
* Secvența ax, ax+1, …, ay trebuie să conțină cel puțin un element.&lt;br /&gt;
* Dacă există mai multe soluții pentru perechea (x, y), atunci se va alegea aceea care are indicele x minim, iar dacă sunt mai multe secvențe posibile care încep la poziția x, se va alege aceea care are valoarea y maximă.&lt;br /&gt;
* Pentru teste valorând 50 de puncte, N ≤ 2000.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sminus.in&lt;br /&gt;
: 7&lt;br /&gt;
: 3 -5 4 -1 6 -8 -5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: sminus.out&lt;br /&gt;
: 3 5&lt;br /&gt;
: -24&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sminus.in&lt;br /&gt;
: 7 2 3 5 0.67&lt;br /&gt;
: 3 -5 4 -1 6 -8 -5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3281 - sminus&lt;br /&gt;
&lt;br /&gt;
def find_min_sum_sequence(n, arr):&lt;br /&gt;
    min_sum = float(&#039;inf&#039;)&lt;br /&gt;
    start_index = 0&lt;br /&gt;
    end_index = 0&lt;br /&gt;
    current_sum = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            current_sum = sum(arr[i:j+1])&lt;br /&gt;
            if current_sum &amp;lt; min_sum:&lt;br /&gt;
                min_sum = current_sum&lt;br /&gt;
                start_index = i&lt;br /&gt;
                end_index = j&lt;br /&gt;
    return start_index, end_index, min_sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(-1000 &amp;lt;= num &amp;lt;= 1000 for num in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;sminus.in&amp;quot;, &amp;quot;r&amp;quot;) as input_file, open(&amp;quot;sminus.out&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        n = int(input_file.readline().strip())&lt;br /&gt;
        arr = list(map(int, input_file.readline().strip().split()))&lt;br /&gt;
        &lt;br /&gt;
        if not validate_input(n, arr):&lt;br /&gt;
            output_file.write(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            start_index, end_index, min_sum = find_min_sum_sequence(n, arr)&lt;br /&gt;
            output_file.write(&amp;quot;Datele sunt introduse correct.\n&amp;quot;)&lt;br /&gt;
            output_file.write(f&amp;quot;{start_index + 1} {end_index + 1}\n&amp;quot;)&lt;br /&gt;
            output_file.write(f&amp;quot;{min_sum}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
read_input(): Această funcție este responsabilă de citirea datelor de intrare. Ea citește valorile din fișierul &amp;quot;sminus.in&amp;quot; și returnează acele valori necesare pentru rezolvarea problemei. În acest caz, citim mai întâi numărul N, apoi citim secvența a1, a2, ..., aN.&lt;br /&gt;
&lt;br /&gt;
solve_problem(N, seq): Această funcție primește ca parametri numărul N și secvența seq. Ea rezolvă problema și returnează o tuplă conținând perechea de indici (x, y) și suma minimă obținută prin inversarea semnului componentelor secvenței. Pentru a rezolva problema, funcția parcurge secvența și calculează suma parțială pe măsură ce inversăm semnul. Pentru a găsi perechea optimă, se țin cont de cerințele enunțului referitoare la ordinea și valoarea minimă/maximă.&lt;br /&gt;
&lt;br /&gt;
validate_input(N, seq): Această funcție primește numărul N și secvența seq și verifică dacă datele de intrare respectă restricțiile impuse. Ea efectuează diverse verificări, cum ar fi verificarea dimensiunii secvenței, verificarea valorilor și formatei acestora, și returnează True dacă datele sunt valide și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
write_output(indices, min_sum): Această funcție primește perechea de indici indices și suma minimă min_sum și se ocupă de scrierea rezultatelor în fișierul &amp;quot;sminus.out&amp;quot;. Ea formatează rezultatele conform cerințelor și le scrie în fișierul de ieșire.&lt;br /&gt;
&lt;br /&gt;
main(): Aceasta este funcția principală a programului. Ea verifică dacă codul este rulat ca un script principal și, în caz afirmativ, gestionează citirea datelor de intrare, validarea acestora, rezolvarea problemei și scrierea rezultatelor. Ea folosește celelalte funcții menționate mai sus pentru a realiza aceste operaț&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4177_-_livada2&amp;diff=6549</id>
		<title>4177 - livada2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4177_-_livada2&amp;diff=6549"/>
		<updated>2023-05-14T22:29:26Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4177/livada2 4177 - livada2]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Fiind un băiat aventurier, călărețul Jonathan obișnuia să umble prin pădurile magice ale împărăției tatălui său. În interiorul meleagurilor lui, împăratul avea o livadă specială, în cadrul căreia se aflau n meri magici, numerotați de la 1 la n, fiecare măr i conținând o cantitate cunoscută m[i] de fructe. Fiind speciali, cantitatea de fructe din acești meri putea fi modificată. Ca în orice poveste, împăratul avea un dușman, pe vrăjitorul Afida, care dorea să-i atace livada. Cunoscând acest fapt, Jonathan, fiul împăratului, dorește să protejeze livada tatălui său. Cei doi se confruntă în livadă, fiecare făcând modificări asupra merilor. Există în total q modificări, fiind de două tipuri:&lt;br /&gt;
&lt;br /&gt;
1 x y p: cantitatea de fructe din merii cu indici cuprinși între x și y crește cu p, fiind o modificare făcută de Jonathan&lt;br /&gt;
&lt;br /&gt;
2 x y p: cantitatea de fructe din merii cu indici cuprinși între x și y scade cu p, fiind o modificare făcută de vrăjitorul Afida&lt;br /&gt;
&lt;br /&gt;
Mai mult: În cadrul livezii împăratului, există câțiva meri extra magici care influențează modificările pe care le fac cei doi. Dacă în cadrul unei modificări a lui Jonathan, după y există un măr extra magic t, astfel încât între y și t nu există alt măr extra magic, interogarea cuprinsă între x și y se va transforma în interogare între x și t. Dacă în cadrul unei modificări a lui Afida, înaintea lui x există un măr extra magic t, astfel încât între t și x nu există alt măr extra magic, interogarea cuprinsă între x și y se va transforma în interogare între t și y.&lt;br /&gt;
Să se afișeze cantitatea de fructe din fiecare măr după cele q modificări.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului livada2.in se găsește numărul n. Pe următoarea linie se găsesc n numere întregi, separate printr-un spațiu, al i-lea număr reprezentând cantitatea de fructe din mărul corespunzător. Pe următoarea linie se găsesc n numere, 0 sau 1, separate printr-un spațiu, valorile 1 indicând faptul că mărul de pe poziția i este extra special. Pe a 4-a linie se află numărul q de modificări. Următoarele q linii vor conține interogările, fiind de forma: c x y p. Dacă c=1, modificarea este făcută de Jonathan. Dacă c=2, modificarea este făcută de vrăjitorul Afida.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; în fișierul livada2.out vor fi afișate n numere întregi separate prin câte un spațiu, reprezentând valorile din m, adică cantitatea de fructe a fiecărui măr&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100.000&lt;br /&gt;
* 1 ≤ q ≤ 250.000&lt;br /&gt;
* 1 ≤ m[i] ≤ 1000, pentru 1 ≤ i ≤ n&lt;br /&gt;
* Pentru 40 de puncte, q ≤ 1000 și n ≤ 1000&lt;br /&gt;
* Pentru alte 20 de puncte, nu vor exista meri extra speciali&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: livada2.in&lt;br /&gt;
: 10&lt;br /&gt;
: 17 18 2 21 14 6 13 14 8 10 &lt;br /&gt;
: 1 1 0 0 0 0 1 0 0 0 &lt;br /&gt;
: 7&lt;br /&gt;
: 2 4 7 3 &lt;br /&gt;
: 1 8 9 16 &lt;br /&gt;
: 2 8 8 25 &lt;br /&gt;
: 2 4 4 8 &lt;br /&gt;
: 1 2 8 1 &lt;br /&gt;
: 2 8 9 21 &lt;br /&gt;
: 1 5 6 19&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: livada2.out&lt;br /&gt;
: 17 8 -8 11 31 23 -16 -15 3 10&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: livada2.in&lt;br /&gt;
: 10&lt;br /&gt;
: 17 18 2 21 14 6 13 14 8 10 &lt;br /&gt;
: 1 1 0 0 0 0 1 0 0 0 &lt;br /&gt;
: -1 2 3 -78 -23 2.34&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 4177 - livada2&lt;br /&gt;
&lt;br /&gt;
def apply_query(n, m, is_extra, query):&lt;br /&gt;
    c, x, y, p = query&lt;br /&gt;
    x -= 1  # convertim la 0-indexing&lt;br /&gt;
    y -= 1&lt;br /&gt;
    t1, t2 = None, None&lt;br /&gt;
    for i in range(x, y + 1):&lt;br /&gt;
        if is_extra[i]:&lt;br /&gt;
            if i &amp;lt; y and not t1:&lt;br /&gt;
                t1 = i&lt;br /&gt;
            if i &amp;gt; x and not t2:&lt;br /&gt;
                t2 = i&lt;br /&gt;
    if c == 1:  # modificarea lui Jonathan&lt;br /&gt;
        for i in range(x, y + 1):&lt;br /&gt;
            if t1 and i &amp;gt; t1:&lt;br /&gt;
                break&lt;br /&gt;
            m[i] += p&lt;br /&gt;
    else:  # modificarea lui Afida&lt;br /&gt;
        for i in range(y, x - 1, -1):&lt;br /&gt;
            if t2 and i &amp;lt; t2:&lt;br /&gt;
                break&lt;br /&gt;
            m[i] -= p&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate(n, m):&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        assert m[i] &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(m):&lt;br /&gt;
    with open(&amp;quot;livada2.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele sunt introduse corect.\n&amp;quot;)&lt;br /&gt;
        file.write(&amp;quot; &amp;quot;.join(map(str, m)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve_problem(n, m, is_extra, q, queries):&lt;br /&gt;
    try:&lt;br /&gt;
        validate(n, m)&lt;br /&gt;
        for query in queries:&lt;br /&gt;
            apply_query(n, m, is_extra, query)&lt;br /&gt;
        write_output(m)&lt;br /&gt;
    except AssertionError:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    m = list(map(int, input().split()))&lt;br /&gt;
    is_extra = list(map(int, input().split()))&lt;br /&gt;
    q = int(input())&lt;br /&gt;
    queries = []&lt;br /&gt;
    for i in range(q):&lt;br /&gt;
        query = list(map(int, input().split()))&lt;br /&gt;
        queries.append(query)&lt;br /&gt;
    solve_problem(n, m, is_extra, q, queries)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
apply_query(n, m, is_extra, query): Această funcție primește parametrii n, m, is_extra și query și aplică modificarea specificată de interogare (query) asupra listei m. Modificările sunt efectuate conform regulilor specificate în cerință. Funcția nu returnează nimic, deoarece modificările sunt aplicate direct asupra listei m.&lt;br /&gt;
&lt;br /&gt;
validate(n, m): Această funcție primește parametrii n și m și verifică dacă valorile din lista m respectă restricțiile impuse. Dacă găsește o valoare negativă, ridică o excepție AssertionError. Dacă nu există excepții, se consideră că datele sunt valide.&lt;br /&gt;
&lt;br /&gt;
write_output(m): Această funcție primește lista m și scrie rezultatul în fișierul &amp;quot;livada2.out&amp;quot;. În fișier, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; urmat de valorile din lista m separate prin spații.&lt;br /&gt;
&lt;br /&gt;
solve_problem(n, m, is_extra, q, queries): Această funcție primește toți parametrii necesari pentru a rezolva problema. Ea se ocupă de apelarea celorlalte funcții în ordinea corectă. Mai întâi, verifică dacă datele sunt valide utilizând funcția validate. Apoi, aplică fiecare interogare din lista queries utilizând funcția apply_query. La final, scrie rezultatul în fișierul de ieșire utilizând funcția write_output.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: Acest bloc verifică dacă codul este executat direct (nu importat ca modul). În acest caz, se face citirea datelor de intrare utilizând funcția input() și se apelează funcția solve_problem cu parametrii corespunzători.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4177_-_livada2&amp;diff=6548</id>
		<title>4177 - livada2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4177_-_livada2&amp;diff=6548"/>
		<updated>2023-05-14T22:28:30Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4177/livada2 4177 - livada2]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Fiind un băiat aventurier, călărețul Jonathan obișnuia să umble prin pădurile magice ale împărăției tatălui său. În interiorul meleagurilor lui, împăratul avea o livadă specială, în cadrul căreia se aflau n meri magici, numerotați de la 1 la n, fiecare măr i conținând o cantitate cunoscută m[i] de fructe. Fiind speciali, cantitatea de fructe din acești meri putea fi modificată. Ca în orice poveste, împăratul avea un dușman, pe vrăjitorul Afida, care dorea să-i atace livada. Cunoscând acest fapt, Jonathan, fiul împăratului, dorește să protejeze livada tatălui său. Cei doi se confruntă în livadă, fiecare făcând modificări asupra merilor. Există în total q modificări, fiind de două tipuri:&lt;br /&gt;
&lt;br /&gt;
1 x y p: cantitatea de fructe din merii cu indici cuprinși între x și y crește cu p, fiind o modificare făcută de Jonathan&lt;br /&gt;
&lt;br /&gt;
2 x y p: cantitatea de fructe din merii cu indici cuprinși între x și y scade cu p, fiind o modificare făcută de vrăjitorul Afida&lt;br /&gt;
&lt;br /&gt;
Mai mult: În cadrul livezii împăratului, există câțiva meri extra magici care influențează modificările pe care le fac cei doi. Dacă în cadrul unei modificări a lui Jonathan, după y există un măr extra magic t, astfel încât între y și t nu există alt măr extra magic, interogarea cuprinsă între x și y se va transforma în interogare între x și t. Dacă în cadrul unei modificări a lui Afida, înaintea lui x există un măr extra magic t, astfel încât între t și x nu există alt măr extra magic, interogarea cuprinsă între x și y se va transforma în interogare între t și y.&lt;br /&gt;
Să se afișeze cantitatea de fructe din fiecare măr după cele q modificări.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului livada2.in se găsește numărul n. Pe următoarea linie se găsesc n numere întregi, separate printr-un spațiu, al i-lea număr reprezentând cantitatea de fructe din mărul corespunzător. Pe următoarea linie se găsesc n numere, 0 sau 1, separate printr-un spațiu, valorile 1 indicând faptul că mărul de pe poziția i este extra special. Pe a 4-a linie se află numărul q de modificări. Următoarele q linii vor conține interogările, fiind de forma: c x y p. Dacă c=1, modificarea este făcută de Jonathan. Dacă c=2, modificarea este făcută de vrăjitorul Afida.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
n fișierul livada2.out vor fi afișate:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; n numere întregi separate prin câte un spațiu, reprezentând valorile din m, adică cantitatea de fructe a fiecărui măr&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100.000&lt;br /&gt;
* 1 ≤ q ≤ 250.000&lt;br /&gt;
* 1 ≤ m[i] ≤ 1000, pentru 1 ≤ i ≤ n&lt;br /&gt;
* Pentru 40 de puncte, q ≤ 1000 și n ≤ 1000&lt;br /&gt;
* Pentru alte 20 de puncte, nu vor exista meri extra speciali&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: livada2.in&lt;br /&gt;
: 10&lt;br /&gt;
: 17 18 2 21 14 6 13 14 8 10 &lt;br /&gt;
: 1 1 0 0 0 0 1 0 0 0 &lt;br /&gt;
: 7&lt;br /&gt;
: 2 4 7 3 &lt;br /&gt;
: 1 8 9 16 &lt;br /&gt;
: 2 8 8 25 &lt;br /&gt;
: 2 4 4 8 &lt;br /&gt;
: 1 2 8 1 &lt;br /&gt;
: 2 8 9 21 &lt;br /&gt;
: 1 5 6 19&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: livada2.out&lt;br /&gt;
: 17 8 -8 11 31 23 -16 -15 3 10&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: livada2.in&lt;br /&gt;
: 10&lt;br /&gt;
: 17 18 2 21 14 6 13 14 8 10 &lt;br /&gt;
: 1 1 0 0 0 0 1 0 0 0 &lt;br /&gt;
: -1 2 3 -78 -23 2.34&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 4177 - livada2&lt;br /&gt;
&lt;br /&gt;
def apply_query(n, m, is_extra, query):&lt;br /&gt;
    c, x, y, p = query&lt;br /&gt;
    x -= 1  # convertim la 0-indexing&lt;br /&gt;
    y -= 1&lt;br /&gt;
    t1, t2 = None, None&lt;br /&gt;
    for i in range(x, y + 1):&lt;br /&gt;
        if is_extra[i]:&lt;br /&gt;
            if i &amp;lt; y and not t1:&lt;br /&gt;
                t1 = i&lt;br /&gt;
            if i &amp;gt; x and not t2:&lt;br /&gt;
                t2 = i&lt;br /&gt;
    if c == 1:  # modificarea lui Jonathan&lt;br /&gt;
        for i in range(x, y + 1):&lt;br /&gt;
            if t1 and i &amp;gt; t1:&lt;br /&gt;
                break&lt;br /&gt;
            m[i] += p&lt;br /&gt;
    else:  # modificarea lui Afida&lt;br /&gt;
        for i in range(y, x - 1, -1):&lt;br /&gt;
            if t2 and i &amp;lt; t2:&lt;br /&gt;
                break&lt;br /&gt;
            m[i] -= p&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate(n, m):&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        assert m[i] &amp;gt;= 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(m):&lt;br /&gt;
    with open(&amp;quot;livada2.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele sunt introduse corect.\n&amp;quot;)&lt;br /&gt;
        file.write(&amp;quot; &amp;quot;.join(map(str, m)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve_problem(n, m, is_extra, q, queries):&lt;br /&gt;
    try:&lt;br /&gt;
        validate(n, m)&lt;br /&gt;
        for query in queries:&lt;br /&gt;
            apply_query(n, m, is_extra, query)&lt;br /&gt;
        write_output(m)&lt;br /&gt;
    except AssertionError:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    m = list(map(int, input().split()))&lt;br /&gt;
    is_extra = list(map(int, input().split()))&lt;br /&gt;
    q = int(input())&lt;br /&gt;
    queries = []&lt;br /&gt;
    for i in range(q):&lt;br /&gt;
        query = list(map(int, input().split()))&lt;br /&gt;
        queries.append(query)&lt;br /&gt;
    solve_problem(n, m, is_extra, q, queries)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
apply_query(n, m, is_extra, query): Această funcție primește parametrii n, m, is_extra și query și aplică modificarea specificată de interogare (query) asupra listei m. Modificările sunt efectuate conform regulilor specificate în cerință. Funcția nu returnează nimic, deoarece modificările sunt aplicate direct asupra listei m.&lt;br /&gt;
&lt;br /&gt;
validate(n, m): Această funcție primește parametrii n și m și verifică dacă valorile din lista m respectă restricțiile impuse. Dacă găsește o valoare negativă, ridică o excepție AssertionError. Dacă nu există excepții, se consideră că datele sunt valide.&lt;br /&gt;
&lt;br /&gt;
write_output(m): Această funcție primește lista m și scrie rezultatul în fișierul &amp;quot;livada2.out&amp;quot;. În fișier, se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot; urmat de valorile din lista m separate prin spații.&lt;br /&gt;
&lt;br /&gt;
solve_problem(n, m, is_extra, q, queries): Această funcție primește toți parametrii necesari pentru a rezolva problema. Ea se ocupă de apelarea celorlalte funcții în ordinea corectă. Mai întâi, verifică dacă datele sunt valide utilizând funcția validate. Apoi, aplică fiecare interogare din lista queries utilizând funcția apply_query. La final, scrie rezultatul în fișierul de ieșire utilizând funcția write_output.&lt;br /&gt;
&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: Acest bloc verifică dacă codul este executat direct (nu importat ca modul). În acest caz, se face citirea datelor de intrare utilizând funcția input() și se apelează funcția solve_problem cu parametrii corespunzători.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2142_-_easy_sum&amp;diff=6547</id>
		<title>2142 - easy sum</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2142_-_easy_sum&amp;diff=6547"/>
		<updated>2023-05-14T22:27:14Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/2142/easy-sum 2142 - easy sum]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se consideră un vector cu n elemente numere naturale. Calculați suma sumelor tuturor subsecvențelor ce se pot forma cu elementele vectorului. Pentru că suma poate fi foarte mare, afișați suma modulo 1.000.000.007.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare easy_sum.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire easy_sum.out va conține:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire easy_sum.out va conține numărul S, reprezentând suma sumelor tuturor subsecvențelor modulo 1.000.000.007&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi cuprinse în intervalul [1,1.000.000]&lt;br /&gt;
* prin subsecvență înțelegem orice înșiruire de elemente din vector aflate pe poziții consecutive.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: easy_sum.in&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: easy_sum.out&lt;br /&gt;
: 20&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: easy_sum.in&lt;br /&gt;
: 21&lt;br /&gt;
: 1 2 3 4 2 7 -8&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2142 - easy sum&lt;br /&gt;
&lt;br /&gt;
MOD = 1000000007&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    if any(num &amp;lt; 1 or num &amp;gt; 1000000 for num in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_subsequence_sum(n, arr):&lt;br /&gt;
    if not validate_input(n, arr):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    MOD = 1000000007&lt;br /&gt;
    total_sum = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        total_sum = (total_sum + (arr[i] * (i + 1) * (n - i)) % MOD) % MOD&lt;br /&gt;
&lt;br /&gt;
    return total_sum&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;easy_sum.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        arr = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = calculate_subsequence_sum(n, arr)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește doi parametri: n - numărul de elemente din vector și arr - lista de numere.&lt;br /&gt;
Verifică dacă valoarea n se încadrează în intervalul specificat în cerință și dacă lungimea listei arr este egală cu n.&lt;br /&gt;
Verifică, de asemenea, dacă există vreun număr din lista arr care este mai mic decât 1 sau mai mare decât 1000000. Dacă da, se returnează False, semnalând că datele nu corespund restricțiilor impuse.&lt;br /&gt;
Dacă toate verificările sunt trecute cu succes, înseamnă că datele de intrare sunt valide, astfel că se returnează True.&lt;br /&gt;
Funcția calculate_subsequence_sum(n, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește doi parametri: n - numărul de elemente din vector și arr - lista de numere.&lt;br /&gt;
Verifică mai întâi validitatea datelor de intrare folosind funcția validate_input(n, arr). Dacă datele nu sunt valide, returnează un mesaj corespunzător.&lt;br /&gt;
Inițializează variabila total_sum cu valoarea 0, care va fi utilizată pentru a calcula suma subsecvențelor.&lt;br /&gt;
Parcurge lista arr și pentru fiecare element, adaugă la total_sum valoarea elementului înmulțită cu (i + 1) * (n - i). Aceasta reprezintă numărul de subsecvențe în care elementul curent apare.&lt;br /&gt;
Se aplică modularitatea cu MOD pentru a menține suma subsecvențelor într-un interval valid.&lt;br /&gt;
La final, se returnează total_sum calculat modulo MOD.&lt;br /&gt;
În funcția if __name__ == &amp;quot;__main__&amp;quot;, se realizează citirea datelor de intrare din fișierul&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1350_-_produs2&amp;diff=6546</id>
		<title>1350 - produs2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1350_-_produs2&amp;diff=6546"/>
		<updated>2023-05-14T22:26:25Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1350/produs2 1350 - produs2]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir cu n numere naturale nenule. Aflaţi câte secvenţe din şir au produsul mai mic decât un număr natural p dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare produs2.in conține pe prima linie numerele n şi p, iar pe a doua linie n numere naturale nenule separate prin spații, reprezentând elementele şirului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire produs2.out va conține:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire produs2.out va conține reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000&lt;br /&gt;
* 1 &amp;lt; p ≤ 2.000.000.000&lt;br /&gt;
* numerele din şir vor fi mai mici decât 1.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: produs2.in&lt;br /&gt;
: 5 10&lt;br /&gt;
: 1 2 3 4 2&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: produs2.out&lt;br /&gt;
: 9&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: produs2.in&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 21 57 44 90&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1350 - produs2&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, p, arr):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (1 &amp;lt; p &amp;lt;= 2000000000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    if any(num &amp;gt;= 1000 for num in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def count_sequences(n, p, arr):&lt;br /&gt;
    if not validate_input(n, p, arr):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    count = 0&lt;br /&gt;
    product = 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        product *= arr[i]&lt;br /&gt;
&lt;br /&gt;
        if product &amp;lt; p:&lt;br /&gt;
            count += 1&lt;br /&gt;
        else:&lt;br /&gt;
            product //= arr[i - count]&lt;br /&gt;
            count -= 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;produs2.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n, p = map(int, file.readline().split())&lt;br /&gt;
        arr = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = count_sequences(n, p, arr)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, p, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește trei parametri: n - numărul de elemente din șir, p - limita produsului și arr - lista de numere.&lt;br /&gt;
Verifică dacă valorile n și p se încadrează în intervalele valide specificate în cerință și dacă lungimea listei arr este egală cu n.&lt;br /&gt;
Verifică, de asemenea, dacă există vreun număr din lista arr care este mai mare sau egal cu 1000. Dacă da, se returnează False, semnalând că datele nu corespund restricțiilor impuse.&lt;br /&gt;
Dacă toate verificările sunt trecute cu succes, înseamnă că datele de intrare sunt valide, astfel că se returnează True.&lt;br /&gt;
Funcția count_sequences(n, p, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește trei parametri: n - numărul de elemente din șir, p - limita produsului și arr - lista de numere.&lt;br /&gt;
Verifică mai întâi validitatea datelor de intrare folosind funcția validate_input(n, p, arr). Dacă datele nu sunt valide, returnează un mesaj corespunzător.&lt;br /&gt;
Inițializează variabila count cu valoarea 0, care va fi utilizată pentru a număra secvențele cu produs mai mic decât p.&lt;br /&gt;
Inițializează variabila product cu valoarea 1, care reprezintă produsul curent al secvenței.&lt;br /&gt;
Parcurge lista arr și în fiecare pas înmulțește product cu elementul curent.&lt;br /&gt;
Functia if __name__ == &#039;__main__&#039; se dechisde fisierul din care se citesc datele pentru a se rezolva problema&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1350_-_produs2&amp;diff=6545</id>
		<title>1350 - produs2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1350_-_produs2&amp;diff=6545"/>
		<updated>2023-05-14T22:26:14Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1350/produs2 1350 - produs2]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir cu n numere naturale nenule. Aflaţi câte secvenţe din şir au produsul mai mic decât un număr natural p dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare produs2.in conține pe prima linie numerele n şi p, iar pe a doua linie n numere naturale nenule separate prin spații, reprezentând elementele şirului.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire produs2.out va conține:&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;fișierul de ieșire produs2.out va conține reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000&lt;br /&gt;
* 1 &amp;lt; p ≤ 2.000.000.000&lt;br /&gt;
* numerele din şir vor fi mai mici decât 1.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: produs2.in&lt;br /&gt;
: 5 10&lt;br /&gt;
: 1 2 3 4 2&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: produs2.out&lt;br /&gt;
: 9&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: produs2.in&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 21 57 44 90&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1350 - produs2&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, p, arr):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (1 &amp;lt; p &amp;lt;= 2000000000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    if any(num &amp;gt;= 1000 for num in arr):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def count_sequences(n, p, arr):&lt;br /&gt;
    if not validate_input(n, p, arr):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    count = 0&lt;br /&gt;
    product = 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        product *= arr[i]&lt;br /&gt;
&lt;br /&gt;
        if product &amp;lt; p:&lt;br /&gt;
            count += 1&lt;br /&gt;
        else:&lt;br /&gt;
            product //= arr[i - count]&lt;br /&gt;
            count -= 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;produs2.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n, p = map(int, file.readline().split())&lt;br /&gt;
        arr = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = count_sequences(n, p, arr)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, p, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește trei parametri: n - numărul de elemente din șir, p - limita produsului și arr - lista de numere.&lt;br /&gt;
Verifică dacă valorile n și p se încadrează în intervalele valide specificate în cerință și dacă lungimea listei arr este egală cu n.&lt;br /&gt;
Verifică, de asemenea, dacă există vreun număr din lista arr care este mai mare sau egal cu 1000. Dacă da, se returnează False, semnalând că datele nu corespund restricțiilor impuse.&lt;br /&gt;
Dacă toate verificările sunt trecute cu succes, înseamnă că datele de intrare sunt valide, astfel că se returnează True.&lt;br /&gt;
Funcția count_sequences(n, p, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește trei parametri: n - numărul de elemente din șir, p - limita produsului și arr - lista de numere.&lt;br /&gt;
Verifică mai întâi validitatea datelor de intrare folosind funcția validate_input(n, p, arr). Dacă datele nu sunt valide, returnează un mesaj corespunzător.&lt;br /&gt;
Inițializează variabila count cu valoarea 0, care va fi utilizată pentru a număra secvențele cu produs mai mic decât p.&lt;br /&gt;
Inițializează variabila product cu valoarea 1, care reprezintă produsul curent al secvenței.&lt;br /&gt;
Parcurge lista arr și în fiecare pas înmulțește product cu elementul curent.&lt;br /&gt;
Functia if __name__ == &#039;__main__&#039; se dechisde fisierul din care se citesc datele pentru a se rezolva problema&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0310_-_SecvPal&amp;diff=6544</id>
		<title>0310 - SecvPal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0310_-_SecvPal&amp;diff=6544"/>
		<updated>2023-05-14T22:24:48Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/310/secvpal  0310 - SecvPal]&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
O secvenţă a unui vector se numeşte palindromică dacă primul element ale secvenţei este egal cu ultimul, al doilea cu penultimul, etc.&lt;br /&gt;
&lt;br /&gt;
Se dă un vector cu n elemente, numere naturale. Determinaţi secvenţa palindromică de lungime maximă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvpal.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, fişierul de ieşire secvpal.out &#039;&#039;&#039; numerele p şi u, reprezentând indicii de început şi sfârşit ai secvenţei determinate&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult 4 cifre;&lt;br /&gt;
* dacă există mai multe secvenţe palindromice de lungime maximă, se va determina cea mai din stânga;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvpal.in&lt;br /&gt;
: 12&lt;br /&gt;
: 1 2 10 9 8 5 8 9 10 5 5 10&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvpal.out&lt;br /&gt;
: 3 9 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvpal.in&lt;br /&gt;
: 99&lt;br /&gt;
: 9 2 8 4 7 1 23 37 7 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0310 - SecvPal&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def find_max_palindrome(n, arr):&lt;br /&gt;
    if not validate_input(n, arr):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    max_length = 0&lt;br /&gt;
    start = 0&lt;br /&gt;
    end = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            if arr[i:j+1] == arr[i:j+1][::-1] and len(arr[i:j+1]) &amp;gt; max_length:&lt;br /&gt;
                max_length = len(arr[i:j+1])&lt;br /&gt;
                start = i&lt;br /&gt;
                end = j&lt;br /&gt;
&lt;br /&gt;
    return f&amp;quot;{start + 1} {end + 1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;secvpal.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        arr = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = find_max_palindrome(n, arr)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, arr):&lt;br /&gt;
Această funcție primește doi parametri, n și arr, reprezentând numărul de elemente din vector (n) și vectorul în sine (arr).&lt;br /&gt;
Verifică dacă numărul n se află în intervalul valid, adică între 1 și 1000. Dacă nu este adevărată această condiție, returnează False, semnalând că datele nu corespund restricțiilor impuse.&lt;br /&gt;
Verifică dacă lungimea vectorului arr este egală cu n. Dacă această condiție nu este îndeplinită, returnează False.&lt;br /&gt;
Dacă toate verificările sunt trecute cu succes, înseamnă că datele de intrare sunt valide, astfel că returnează True.&lt;br /&gt;
Funcția find_max_palindrome(n, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește doi parametri, n și arr, reprezentând numărul de elemente din vector (n) și vectorul în sine (arr).&lt;br /&gt;
Verifică mai întâi validitatea datelor de intrare folosind funcția validate_input(n, arr). Dacă datele nu sunt valide, returnează un mesaj corespunzător.&lt;br /&gt;
Inițializează variabilele max_length, start și end cu valorile 0. Acestea vor fi actualizate pe măsură ce se găsesc secvențe palindromice de lungime maximă.&lt;br /&gt;
Parcurge toate sub-secvențele posibile ale vectorului, utilizând două bucle for imbricate (i și j).&lt;br /&gt;
Verifică dacă sub-secvența curentă, arr[i:j+1], este un palindrom. Aceasta se realizează prin compararea sub-secvenței cu reversul său, arr[i:j+1][::-1].&lt;br /&gt;
Dacă sub-secvența este un palindrom și are o lungime mai mare decât max_length, se actualizează max_length cu noua valoare a lungimii, iar start și end cu indicii de început și sfârșit ai secvenței palindromice.&lt;br /&gt;
După parcurgerea tuturor sub-secvențelor, se returnează o frază formatată care indică indicii de început și sfârșit ai celei mai lungi secvențe palindromice găsite în vectorul dat.&lt;br /&gt;
În funcția if __name__ == &amp;quot;__main__&amp;quot;, se realizează citirea datelor de intrare din fișierul &amp;quot;secvpal.in&amp;quot; și se apelează funcția find_max_palindrome cu valorile citite. Rezultatul este apoi afișat pe ecran.&lt;br /&gt;
&lt;br /&gt;
Aceste funcții rezolvă problema cerută de determinare a celei mai lungi secvențe palindromice dintr-un vector&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0310_-_SecvPal&amp;diff=6543</id>
		<title>0310 - SecvPal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0310_-_SecvPal&amp;diff=6543"/>
		<updated>2023-05-14T22:24:00Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/310/secvpal  0310 - SecvPal]&lt;br /&gt;
----&lt;br /&gt;
O secvenţă a unui vector se numeşte palindromică dacă primul element ale secvenţei este egal cu ultimul, al doilea cu penultimul, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente, numere naturale. Determinaţi secvenţa palindromică de lungime maximă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvpal.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, fişierul de ieşire secvpal.out &#039;&#039;&#039; numerele p şi u, reprezentând indicii de început şi sfârşit ai secvenţei determinate&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult 4 cifre;&lt;br /&gt;
* dacă există mai multe secvenţe palindromice de lungime maximă, se va determina cea mai din stânga;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvpal.in&lt;br /&gt;
: 12&lt;br /&gt;
: 1 2 10 9 8 5 8 9 10 5 5 10&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvpal.out&lt;br /&gt;
: 3 9 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvpal.in&lt;br /&gt;
: 99&lt;br /&gt;
: 9 2 8 4 7 1 23 37 7 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0310 - SecvPal&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def find_max_palindrome(n, arr):&lt;br /&gt;
    if not validate_input(n, arr):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    max_length = 0&lt;br /&gt;
    start = 0&lt;br /&gt;
    end = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            if arr[i:j+1] == arr[i:j+1][::-1] and len(arr[i:j+1]) &amp;gt; max_length:&lt;br /&gt;
                max_length = len(arr[i:j+1])&lt;br /&gt;
                start = i&lt;br /&gt;
                end = j&lt;br /&gt;
&lt;br /&gt;
    return f&amp;quot;{start + 1} {end + 1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;secvpal.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        arr = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = find_max_palindrome(n, arr)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, arr):&lt;br /&gt;
Această funcție primește doi parametri, n și arr, reprezentând numărul de elemente din vector (n) și vectorul în sine (arr).&lt;br /&gt;
Verifică dacă numărul n se află în intervalul valid, adică între 1 și 1000. Dacă nu este adevărată această condiție, returnează False, semnalând că datele nu corespund restricțiilor impuse.&lt;br /&gt;
Verifică dacă lungimea vectorului arr este egală cu n. Dacă această condiție nu este îndeplinită, returnează False.&lt;br /&gt;
Dacă toate verificările sunt trecute cu succes, înseamnă că datele de intrare sunt valide, astfel că returnează True.&lt;br /&gt;
Funcția find_max_palindrome(n, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește doi parametri, n și arr, reprezentând numărul de elemente din vector (n) și vectorul în sine (arr).&lt;br /&gt;
Verifică mai întâi validitatea datelor de intrare folosind funcția validate_input(n, arr). Dacă datele nu sunt valide, returnează un mesaj corespunzător.&lt;br /&gt;
Inițializează variabilele max_length, start și end cu valorile 0. Acestea vor fi actualizate pe măsură ce se găsesc secvențe palindromice de lungime maximă.&lt;br /&gt;
Parcurge toate sub-secvențele posibile ale vectorului, utilizând două bucle for imbricate (i și j).&lt;br /&gt;
Verifică dacă sub-secvența curentă, arr[i:j+1], este un palindrom. Aceasta se realizează prin compararea sub-secvenței cu reversul său, arr[i:j+1][::-1].&lt;br /&gt;
Dacă sub-secvența este un palindrom și are o lungime mai mare decât max_length, se actualizează max_length cu noua valoare a lungimii, iar start și end cu indicii de început și sfârșit ai secvenței palindromice.&lt;br /&gt;
După parcurgerea tuturor sub-secvențelor, se returnează o frază formatată care indică indicii de început și sfârșit ai celei mai lungi secvențe palindromice găsite în vectorul dat.&lt;br /&gt;
În funcția if __name__ == &amp;quot;__main__&amp;quot;, se realizează citirea datelor de intrare din fișierul &amp;quot;secvpal.in&amp;quot; și se apelează funcția find_max_palindrome cu valorile citite. Rezultatul este apoi afișat pe ecran.&lt;br /&gt;
&lt;br /&gt;
Aceste funcții rezolvă problema cerută de determinare a celei mai lungi secvențe palindromice dintr-un vector&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0310_-_SecvPal&amp;diff=6542</id>
		<title>0310 - SecvPal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0310_-_SecvPal&amp;diff=6542"/>
		<updated>2023-05-14T22:23:48Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/310/secvpal  0310 - SecvPal]&lt;br /&gt;
----&lt;br /&gt;
O secvenţă a unui vector se numeşte palindromică dacă primul element ale secvenţei este egal cu ultimul, al doilea cu penultimul, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente, numere naturale. Determinaţi secvenţa palindromică de lungime maximă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvpal.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, işierul de ieşire secvpal.out &#039;&#039;&#039; numerele p şi u, reprezentând indicii de început şi sfârşit ai secvenţei determinate&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult 4 cifre;&lt;br /&gt;
* dacă există mai multe secvenţe palindromice de lungime maximă, se va determina cea mai din stânga;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvpal.in&lt;br /&gt;
: 12&lt;br /&gt;
: 1 2 10 9 8 5 8 9 10 5 5 10&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvpal.out&lt;br /&gt;
: 3 9 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvpal.in&lt;br /&gt;
: 99&lt;br /&gt;
: 9 2 8 4 7 1 23 37 7 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0310 - SecvPal&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, arr):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(arr) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def find_max_palindrome(n, arr):&lt;br /&gt;
    if not validate_input(n, arr):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    max_length = 0&lt;br /&gt;
    start = 0&lt;br /&gt;
    end = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            if arr[i:j+1] == arr[i:j+1][::-1] and len(arr[i:j+1]) &amp;gt; max_length:&lt;br /&gt;
                max_length = len(arr[i:j+1])&lt;br /&gt;
                start = i&lt;br /&gt;
                end = j&lt;br /&gt;
&lt;br /&gt;
    return f&amp;quot;{start + 1} {end + 1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;secvpal.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        arr = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = find_max_palindrome(n, arr)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, arr):&lt;br /&gt;
Această funcție primește doi parametri, n și arr, reprezentând numărul de elemente din vector (n) și vectorul în sine (arr).&lt;br /&gt;
Verifică dacă numărul n se află în intervalul valid, adică între 1 și 1000. Dacă nu este adevărată această condiție, returnează False, semnalând că datele nu corespund restricțiilor impuse.&lt;br /&gt;
Verifică dacă lungimea vectorului arr este egală cu n. Dacă această condiție nu este îndeplinită, returnează False.&lt;br /&gt;
Dacă toate verificările sunt trecute cu succes, înseamnă că datele de intrare sunt valide, astfel că returnează True.&lt;br /&gt;
Funcția find_max_palindrome(n, arr):&lt;br /&gt;
&lt;br /&gt;
Această funcție primește doi parametri, n și arr, reprezentând numărul de elemente din vector (n) și vectorul în sine (arr).&lt;br /&gt;
Verifică mai întâi validitatea datelor de intrare folosind funcția validate_input(n, arr). Dacă datele nu sunt valide, returnează un mesaj corespunzător.&lt;br /&gt;
Inițializează variabilele max_length, start și end cu valorile 0. Acestea vor fi actualizate pe măsură ce se găsesc secvențe palindromice de lungime maximă.&lt;br /&gt;
Parcurge toate sub-secvențele posibile ale vectorului, utilizând două bucle for imbricate (i și j).&lt;br /&gt;
Verifică dacă sub-secvența curentă, arr[i:j+1], este un palindrom. Aceasta se realizează prin compararea sub-secvenței cu reversul său, arr[i:j+1][::-1].&lt;br /&gt;
Dacă sub-secvența este un palindrom și are o lungime mai mare decât max_length, se actualizează max_length cu noua valoare a lungimii, iar start și end cu indicii de început și sfârșit ai secvenței palindromice.&lt;br /&gt;
După parcurgerea tuturor sub-secvențelor, se returnează o frază formatată care indică indicii de început și sfârșit ai celei mai lungi secvențe palindromice găsite în vectorul dat.&lt;br /&gt;
În funcția if __name__ == &amp;quot;__main__&amp;quot;, se realizează citirea datelor de intrare din fișierul &amp;quot;secvpal.in&amp;quot; și se apelează funcția find_max_palindrome cu valorile citite. Rezultatul este apoi afișat pe ecran.&lt;br /&gt;
&lt;br /&gt;
Aceste funcții rezolvă problema cerută de determinare a celei mai lungi secvențe palindromice dintr-un vector&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0297_-_SecvSumMax&amp;diff=6541</id>
		<title>0297 - SecvSumMax</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0297_-_SecvSumMax&amp;diff=6541"/>
		<updated>2023-05-14T22:06:23Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/297/secvsummax 0297 - SecvSumMax]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un șir cu n elemente, numere întregi. Determinați secvența de elemente cu suma maximă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvsummax.in conține pe prima linie numărul n; urmează cele n elemente ale șirului, dispuse pe mai multe linii și separate prin spații.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; fișierul de ieșire secvsummax.out va conține&#039;&#039;&#039; numerele p și u, separate printr-un spațiu, reprezentând poziția de început și de sfârșit a secvenței determinate&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100.000&lt;br /&gt;
* elementele șirului vor avea cel mult 4 cifre și sunt numerotate de la 1 la n&lt;br /&gt;
* dacă șirul conține mai multe secvențe de suma maximă, se va determina cea cu indicele de început cel mai mic, iar în caz de egalitate, cea mai scurtă&lt;br /&gt;
* șirul va conține cel puțin un element pozitiv&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvsummax.out&lt;br /&gt;
: 10&lt;br /&gt;
: -4 1 -5 1 4 -2 2 3 -4 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: secvsummax.out&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: 4 8&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvsummax.out&lt;br /&gt;
: 67&lt;br /&gt;
: -1 2 3 -10 2 8 5 8 4 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0297 - SecvSumMax&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, nums):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(nums) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    if all(num &amp;lt;= 0 for num in nums):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def find_max_subsequence(n, nums):&lt;br /&gt;
    if not validate_input(n, nums):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    start, end = 0, 0&lt;br /&gt;
    max_sum = 0&lt;br /&gt;
    current_sum = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        current_sum += nums[i]&lt;br /&gt;
        if current_sum &amp;gt; max_sum:&lt;br /&gt;
            max_sum = current_sum&lt;br /&gt;
            end = i&lt;br /&gt;
        if current_sum &amp;lt; 0:&lt;br /&gt;
            current_sum = 0&lt;br /&gt;
            start = i + 1&lt;br /&gt;
&lt;br /&gt;
    return f&amp;quot;{start + 1} {end + 1}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_name = &amp;quot;secvsummax.in&amp;quot;&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        nums = []&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            nums.extend(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    result = find_max_subsequence(n, nums)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
validate_input(n, nums): Această funcție primește un număr n și o listă nums și validează datele de intrare în conformitate cu restricțiile impuse. Verificările efectuate sunt:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă n se află în intervalul [1, 100000]. Dacă nu se îndeplinește această condiție, funcția returnează False, semnalând că datele nu sunt valide.&lt;br /&gt;
Verifică dacă lungimea listei nums este egală cu n. Dacă lungimea nu este corectă, funcția returnează False.&lt;br /&gt;
Verifică dacă toate numerele din lista nums sunt mai mici sau egale cu 0. Dacă există cel puțin un număr mai mare decât 0, funcția returnează False.&lt;br /&gt;
Dacă toate aceste verificări sunt îndeplinite, funcția returnează True, semnalând că datele de intrare sunt valide.&lt;br /&gt;
find_max_subsequence(n, nums): Această funcție primește un număr n și o listă nums și aplică algoritmul pentru a găsi secvența de elemente cu suma maximă. Funcția începe prin apelarea funcției validate_input pentru a verifica validitatea datelor de intrare. Dacă datele nu sunt valide, funcția returnează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt valide, funcția inițializează variabilele start, end, max_sum și current_sum cu valorile inițiale 0. Apoi, parcurge lista nums folosind un buclă for și adaugă fiecare element la suma curentă current_sum. Dacă current_sum devine mai mare decât max_sum, actualizează max_sum cu current_sum și actualizează end la poziția curentă. Dacă current_sum devine mai mică decât 0, resetează-o la 0 și actualizează start la poziția curentă + 1.&lt;br /&gt;
&lt;br /&gt;
La finalul buclei, funcția returnează rezultatul sub forma unui șir format din start + 1 și end + 1. Adăugarea valorii 1 este necesară pentru a respecta numerotarea elementelor de la 1 la n.&lt;br /&gt;
&lt;br /&gt;
__main__: Această secțiune verifică dacă scriptul este executat direct (nu importat ca modul) și conține codul de citire a fișierului de intrare și apelarea funcției find_max_subsequence. Mai întâi, se deschide fișierul de intrare secvsummax.in în modul &amp;quot;r&amp;quot; (citire). Se citește prima linie pentru a obține valoarea lui n, iar apoi se citesc următoarele `n&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3939_-_Intervale6&amp;diff=6539</id>
		<title>3939 - Intervale6</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3939_-_Intervale6&amp;diff=6539"/>
		<updated>2023-05-14T22:05:40Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3939/intervale6 - Intervale6]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un șir n numere naturale separate prin câte un spațiu.&lt;br /&gt;
Se cere să se afișeze numărul de intervale care nu conțin niciun termen al șirului.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare intervale6.in conține:&lt;br /&gt;
* pe prima linie un număr n.&lt;br /&gt;
* pe a doua linie un șir de n numere.&lt;br /&gt;
* iar pe fiecare dintre următoarele linii, până la finalul fișierului, câte o pereche de numere, reprezentând extremitățile unui interval închis.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; fișierul intervale6.out conține numărul de intervale care nu conțin niciun termen al șirului aflat pe a doua linie a fișierului.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* Fișierul intervale6.in conține numere naturale din intervalul [1, 10.000].&lt;br /&gt;
* Numerele aflate pe a doua linie a fișierului sunt în ordine crescătoare.&lt;br /&gt;
* Vor fi cel mult 200.000 de intervale&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: intervale6.in&lt;br /&gt;
: 5&lt;br /&gt;
: 4 8 9 16 25&lt;br /&gt;
: 1 3&lt;br /&gt;
: 2 5&lt;br /&gt;
: 9 15&lt;br /&gt;
: 5 7&lt;br /&gt;
: 20 100&lt;br /&gt;
: 10 12&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: intervale6.out&lt;br /&gt;
: 3&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: intervale6.in&lt;br /&gt;
: 2 1&lt;br /&gt;
: 1 2 3 4 8 9 16 25&lt;br /&gt;
: 2 6 &lt;br /&gt;
: 9 1&lt;br /&gt;
: 9 15&lt;br /&gt;
: 11 23&lt;br /&gt;
: 25 70&lt;br /&gt;
: 10 12&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3939 - Intervale6&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, sir, intervale):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 10000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(sir) != n or any(sir[i] &amp;gt;= sir[i+1] for i in range(n-1)):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(intervale) &amp;gt; 200000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_intervale(n, sir, intervale):&lt;br /&gt;
    if not validate_input(n, sir, intervale):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    termene_sir = set(sir)&lt;br /&gt;
    numar_intervale_fara_termene = 0&lt;br /&gt;
&lt;br /&gt;
    for i, j in intervale:&lt;br /&gt;
        interval_are_termen = False&lt;br /&gt;
        for termen in sir:&lt;br /&gt;
            if i &amp;lt;= termen &amp;lt;= j:&lt;br /&gt;
                interval_are_termen = True&lt;br /&gt;
                break&lt;br /&gt;
        if not interval_are_termen:&lt;br /&gt;
            numar_intervale_fara_termene += 1&lt;br /&gt;
&lt;br /&gt;
    return numar_intervale_fara_termene&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;intervale6.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        sir = list(map(int, fin.readline().split()))&lt;br /&gt;
        intervale = []&lt;br /&gt;
        for line in fin.readlines():&lt;br /&gt;
            i, j = map(int, line.split())&lt;br /&gt;
            intervale.append((i, j))&lt;br /&gt;
&lt;br /&gt;
    rezultat = numar_intervale(n, sir, intervale)&lt;br /&gt;
&lt;br /&gt;
    if isinstance(rezultat, str):&lt;br /&gt;
        print(rezultat)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(rezultat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, sir, intervale): Această funcție primește parametrii n, sir și intervale și are rolul de a valida datele de intrare conform restricțiilor impuse în cerință. Verificările includ:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă n se încadrează în intervalul permis (1 ≤ n ≤ 10,000).&lt;br /&gt;
Verifică dacă sir are lungimea n și este ordonat în mod crescător.&lt;br /&gt;
Verifică dacă numărul de intervale intervale este mai mic sau egal cu 200,000.&lt;br /&gt;
Funcția returnează True dacă datele sunt valide și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Funcția numar_intervale(n, sir, intervale): Această funcție primește datele de intrare n, sir și intervale și rezolvă problema în conformitate cu cerințele. Algoritmul funcției este următorul:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă datele de intrare sunt valide utilizând funcția validate_input. Dacă nu sunt valide, funcția returnează un mesaj de eroare.&lt;br /&gt;
Creează un set termene_sir care conține toate numerele din sir.&lt;br /&gt;
Inițializează variabila numar_intervale_fara_termene cu 0, care va reprezenta numărul de intervale care nu conțin niciun termen din sir.&lt;br /&gt;
Pentru fiecare interval din lista intervale, verifică dacă există cel puțin un termen din sir în interval. Dacă nu există, incrementăm numar_intervale_fara_termene.&lt;br /&gt;
Returnează numar_intervale_fara_termene.&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: Acest bloc de cod verifică dacă scriptul Python este rulat direct (nu importat ca modul în alt script). În acest caz, citirea datelor de intrare se face din fișierul &amp;quot;intervale6.in&amp;quot; și se apelează funcția numar_intervale pentru a rezolva problema. Rezultatul este afișat în consolă.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0190_-_Oglindiri&amp;diff=6537</id>
		<title>0190 - Oglindiri</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0190_-_Oglindiri&amp;diff=6537"/>
		<updated>2023-05-14T22:03:15Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/190/oglindiri 0190 - Oglindiri]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale, numerotate de la 1 la n, și m perechi de indici (i,j), cu 1≤i&amp;lt;j≤n. Fiecare secvență de elemente determinată de o pereche (i,j) se oglindește – primul elemente din secvență se interschimbă cu ultimul, al doilea cu penultimul, etc..&lt;br /&gt;
&lt;br /&gt;
Să se afișeze elementele vectorului după realizarea, în ordine, a celor m oglindiri.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare oglindiri.in conţine pe prima linie numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;și fișierul oglindiri.out  n elemente ale vectorul obținute după cele m oglindiri, separate prin câte un spațiu&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000&lt;br /&gt;
* 1 ≤ m ≤ 100&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: oglindiri.in&lt;br /&gt;
: 10&lt;br /&gt;
: 55 50 16 37 66 44 31 24 10 63 &lt;br /&gt;
: 3&lt;br /&gt;
: 5 8 &lt;br /&gt;
: 2 6 &lt;br /&gt;
: 6 10 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: oglindiri.out&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: 55 31 24 37 16 63 10 66 44 50 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: oglindiri.in&lt;br /&gt;
: 2&lt;br /&gt;
: 55 50 16 37 66 44 31 24 10 63 &lt;br /&gt;
: 3 2 1 &lt;br /&gt;
: 51  8 &lt;br /&gt;
: 22  6 &lt;br /&gt;
: 68  10 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0190 - Oglindiri&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, vector, m, perechi):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 100 or m &amp;lt; 1 or m &amp;gt; 100:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(vector) != n or any(num &amp;gt;= 1000 for num in vector):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if any(i &amp;gt;= j or i &amp;lt;= 0 or j &amp;gt; n for i, j in perechi):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def oglindiri(n, vector, m, perechi):&lt;br /&gt;
    if not validate_input(n, vector, m, perechi):&lt;br /&gt;
        return &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for i, j in perechi:&lt;br /&gt;
        i -= 1&lt;br /&gt;
        j -= 1&lt;br /&gt;
        while i &amp;lt; j:&lt;br /&gt;
            vector[i], vector[j] = vector[j], vector[i]&lt;br /&gt;
            i += 1&lt;br /&gt;
            j -= 1&lt;br /&gt;
&lt;br /&gt;
    return vector&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;oglindiri.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        vector = list(map(int, fin.readline().split()))&lt;br /&gt;
        m = int(fin.readline())&lt;br /&gt;
        perechi = []&lt;br /&gt;
        for _ in range(m):&lt;br /&gt;
            i, j = map(int, fin.readline().split())&lt;br /&gt;
            perechi.append((i, j))&lt;br /&gt;
&lt;br /&gt;
    rezultat = oglindiri(n, vector, m, perechi)&lt;br /&gt;
&lt;br /&gt;
    if isinstance(rezultat, str):&lt;br /&gt;
        print(rezultat)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(str(num) for num in rezultat))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția validate_input(n, vector, m, perechi): Această funcție primește parametrii n, vector, m și perechi și are rolul de a valida datele de intrare conform restricțiilor impuse în cerință. Verificările includ:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă n și m se încadrează în intervalul permis (1 ≤ n, m ≤ 100).&lt;br /&gt;
Verifică dacă lungimea listei vector este egală cu n și dacă toate numerele din vector sunt mai mici decât 1000.&lt;br /&gt;
Verifică dacă toate perechile (i, j) din lista perechi satisfac restricțiile: 1 ≤ i &amp;lt; j ≤ n.&lt;br /&gt;
Funcția returnează True dacă datele sunt valide și False în caz contrar.&lt;br /&gt;
&lt;br /&gt;
Funcția oglindiri(n, vector, m, perechi): Această funcție primește datele de intrare n, vector, m și perechi și rezolvă problema în conformitate cu cerințele. Algoritmul funcției este următorul:&lt;br /&gt;
&lt;br /&gt;
Verifică dacă datele de intrare sunt valide utilizând funcția validate_input. Dacă nu sunt valide, funcția returnează un mesaj de eroare.&lt;br /&gt;
Pentru fiecare pereche (i, j) din lista perechi:&lt;br /&gt;
Aduce indicii i și j la forma corectă pentru indexarea în Python (scăzând 1 din fiecare).&lt;br /&gt;
Realizează oglindirea în lista vector între indicii i și j, prin interschimbarea elementelor în mod repetat până când indicii se întâlnesc.&lt;br /&gt;
Returnează lista vector obținută după efectuarea oglindirilor.&lt;br /&gt;
Blocul if __name__ == &amp;quot;__main__&amp;quot;: Acest bloc de cod verifică dacă scriptul Python este rulat direct (nu importat ca modul în alt script). În acest caz, citirea datelor de intrare se face din fișierul &amp;quot;oglindiri.in&amp;quot; și se apelează funcția oglindiri pentru a rezolva problema. Rezultatul este afișat în consolă.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0181_-_SecvCresc&amp;diff=6448</id>
		<title>0181 - SecvCresc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0181_-_SecvCresc&amp;diff=6448"/>
		<updated>2023-05-14T20:36:25Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/181/secvcresc 0181 - SecvCresc]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau n numere naturale, reprezentând elementele unui vector. Determinați cea mai lungă secvență de elemente ordonate strict crescător din vector. Dacă există mai multe astfel de secvențe se va determina cea mai din stânga.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvcresc.in conține numărul n și n valori naturale, reprezentând elementele vectorului. Valorile din fișier pot fi dispuse pe mai multe linii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot; &#039;&#039;&#039; și fișierul de ieșire secvcresc.out va conține pe prima linie numerele st și dr, reprezentând indicii de început și de sfârșit ai secvenței determinate&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;lt; n ≤ 10.000&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1.000.000 și sunt numerotate de la 1&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvcresc.in &lt;br /&gt;
: 9&lt;br /&gt;
: 2 6 4 5 8 9 6 3 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvcresc.out&lt;br /&gt;
: 3 6&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvcresc.in &lt;br /&gt;
: 5&lt;br /&gt;
: 1000 200 300 400 500&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvcresc.out&lt;br /&gt;
: Iar sevcresc.out nu va fi generat deoarece datele nu sunt crescatoare&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0181 - SecvCresc&lt;br /&gt;
&lt;br /&gt;
def lungime_secventa_crescatoare(n, v):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Funcția primește un număr n reprezentând numărul de elemente din vectorul v și un vector v de n elemente.&lt;br /&gt;
    Returnează indicii secvenței maxime ordonate crescător din vectorul v.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    st = dr = 0&lt;br /&gt;
    max_len = 0&lt;br /&gt;
    len_curenta = 1&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        if v[i] &amp;gt; v[i-1]:&lt;br /&gt;
            len_curenta += 1&lt;br /&gt;
        else:&lt;br /&gt;
            if len_curenta &amp;gt; max_len:&lt;br /&gt;
                max_len = len_curenta&lt;br /&gt;
                st = i - max_len&lt;br /&gt;
                dr = i - 1&lt;br /&gt;
            len_curenta = 1&lt;br /&gt;
    if len_curenta &amp;gt; max_len:&lt;br /&gt;
        max_len = len_curenta&lt;br /&gt;
        st = n - max_len&lt;br /&gt;
        dr = n - 1&lt;br /&gt;
    return st+1, dr+1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;secvcresc.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            v = []&lt;br /&gt;
            for _ in range(n):&lt;br /&gt;
                v += list(map(int, f.readline().split()))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
        if n &amp;gt; 0 and n &amp;lt;= 10000 and all(elem &amp;lt; 1000000 for elem in v):&lt;br /&gt;
            st, dr = lungime_secventa_crescatoare(n, v)&lt;br /&gt;
            print(&#039;Datele sunt introduse corect.&#039;)&lt;br /&gt;
            with open(&#039;secvcresc.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
                f.write(str(st) + &#039; &#039; + str(dr) + &#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Funcția lungime_secventa_crescatoare primește un număr n reprezentând numărul de elemente din vectorul v și un vector v de n elemente și returnează indicii secvenței maxime ordonate crescător din vectorul v.&lt;br /&gt;
În funcția principală if __name__ == &#039;__main__&#039;::&lt;br /&gt;
Se încearcă deschiderea fișierului de intrare &#039;secvcresc.in&#039; și citirea datelor din el.&lt;br /&gt;
Dacă fișierul nu poate fi deschis, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
Dacă datele sunt corect introduse (numărul de elemente n este între 1 și 10000 și toate elementele vectorului v sunt mai mici decât 1000000), se calculează indicii secvenței maxime ordonate crescător și se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot;.&lt;br /&gt;
Dacă datele nu corespund restricțiilor impuse, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
Indicii secvenței maxime ordonate crescător sunt scriși în fișierul de ieșire &#039;secvcresc.out&#039;.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0304_-_Secvente&amp;diff=6436</id>
		<title>0304 - Secvente</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0304_-_Secvente&amp;diff=6436"/>
		<updated>2023-05-14T20:18:40Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/304/secvente 0304 - Secvente]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir format din n elemente, numere naturale. Determinaţi câte secvenţe maximale cu elementele ordonate crescător conţine şirul.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvente.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa:&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi fișierul secv.out conține &#039;&#039;&#039; numărul C, reprezentând numărul de secvenţe cu elementele ordonate crescător din şirul dat&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele şirului vor avea cel mult 4 cifre&lt;br /&gt;
* o secvență cu elemente ordonate crescător este maximală dacă adăugând la secvență încă un element ea nu mai are elementele ordonate crescător&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvente.in&lt;br /&gt;
: 8 &lt;br /&gt;
: 12 10 15 17 17&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvente.out&lt;br /&gt;
: 3&lt;br /&gt;
== Exemplu 2  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvente.in&lt;br /&gt;
: ...&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvente.out&lt;br /&gt;
: Datele sunt introduse incorrect&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def count_increasing_sequences(n, a):&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        j = i&lt;br /&gt;
        while j + 1 &amp;lt; n and a[j] &amp;lt; a[j + 1]:&lt;br /&gt;
            j += 1&lt;br /&gt;
        cnt += (j &amp;gt; i)&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;secvente.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            a = []&lt;br /&gt;
            for line in f:&lt;br /&gt;
                a += list(map(int, line.strip().split()))&lt;br /&gt;
            if len(a) != n:&lt;br /&gt;
                print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
                with open(&amp;quot;secvente.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
                    g.write(str(count_increasing_sequences(n, a)))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fisierul secvente.in nu exista.&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Functia def count_increasing_sequences primeste 2 parametri:&lt;br /&gt;
&lt;br /&gt;
n: reprezintă numărul de elemente din lista a&lt;br /&gt;
a: lista de n elemente&lt;br /&gt;
Funcția utilizează o metodă iterativă pentru a număra secvențele maximale în care elementele sunt ordonate crescător. Aceasta lucrează astfel:&lt;br /&gt;
&lt;br /&gt;
Inițializăm o variabilă cnt cu 0.&lt;br /&gt;
Parcurgem lista a utilizând un iterator i în intervalul [0, n-1]&lt;br /&gt;
Inițializăm un alt iterator j cu valoarea lui i&lt;br /&gt;
Utilizând un ciclu while verificăm dacă următorul element din lista a (a[j+1]) este mai mare decât elementul curent (a[j]). Dacă da, incrementăm iteratorul j și continuăm să verificăm dacă elementele sunt în ordine crescătoare.&lt;br /&gt;
Dacă j este mai mare decât i, adăugăm 1 la valoarea lui cnt. Acest lucru se face deoarece avem o secvență maximă crescătoare în această secvență, începând de la poziția i și terminând la poziția j.&lt;br /&gt;
La final, funcția returnează valoarea lui cnt, care reprezintă numărul de secvențe maximale crescătoare găsite în lista a.&lt;br /&gt;
&lt;br /&gt;
În ceea ce privește blocul if __name__ == &amp;quot;__main__&amp;quot;:, acesta verifică dacă fișierul de intrare există și, dacă da, citesc datele din fișierul de intrare secvente.in și le pasează la funcția count_increasing_sequences(). Funcția apoi scrie rezultatul în fișierul de ieșire secvente.out, împreună cu un mesaj corespunzător în cazul în care datele sunt sau nu sunt introduse corect.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6434</id>
		<title>0299 - SumeSecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6434"/>
		<updated>2023-05-14T20:16:05Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/299/sumesecv - SumeSecv]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale, numerotate de la 1 la n, și m perechi de indici (i,j), cu 1≤i&amp;lt;j≤n. Să se determine, pentru fiecare pereche (i,j), suma elementelor din secvenţa determinată de i şi j.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare sumesecv.in conţine pe prima linie numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi fișierul sumesecv.out conține  &#039;&#039;&#039; numărul n. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1000&lt;br /&gt;
* 1 ≤ m ≤ 100&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:sumesecv.in&lt;br /&gt;
: 10&lt;br /&gt;
: 5 5 1 3 6 4 1 2 10 6 &lt;br /&gt;
: 3&lt;br /&gt;
: 5 8 &lt;br /&gt;
: 2 6 &lt;br /&gt;
: 6 10 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct &lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 13 19 23 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sumesecv.in&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma(secventa):&lt;br /&gt;
    suma = 0&lt;br /&gt;
    for x in secventa:&lt;br /&gt;
        suma += x&lt;br /&gt;
    return suma&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;sumesecv.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
            v = list(map(int, f.readline().split()))&lt;br /&gt;
            m = int(f.readline().strip())&lt;br /&gt;
            perechi = []&lt;br /&gt;
            for i in range(m):&lt;br /&gt;
                perechi.append(list(map(int, f.readline().split())))&lt;br /&gt;
    except:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    &lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 100 or m &amp;lt; 1 or m &amp;gt; 100:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    for x in v:&lt;br /&gt;
        if x &amp;gt;= 1000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        if p[0] &amp;lt; 1 or p[0] &amp;gt;= p[1] or p[1] &amp;gt; n:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    # Calculare sume secvențe&lt;br /&gt;
    sume = []&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        sume.append(calculeaza_suma(v[p[0]-1:p[1]]))&lt;br /&gt;
    &lt;br /&gt;
    # Scriere rezultat&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    with open(&#039;sumesecv.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        for s in sume:&lt;br /&gt;
            f.write(str(s) + &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie Rezolvare == &lt;br /&gt;
Funcția solve(input_data: str) -&amp;gt; str:&lt;br /&gt;
Această funcție primește ca argument un șir de caractere input_data care conține datele de intrare ale problemei și trebuie să returneze un șir de caractere care conține datele de ieșire cerute de problema.&lt;br /&gt;
În cadrul acestei funcții, mai întâi se parsează datele de intrare primite ca argument, adică se extrag valorile numerice și se stochează în variabile corespunzătoare. Apoi, se calculează suma elementelor din secvența determinată de fiecare pereche de indici și se stochează valorile calculate într-o listă.&lt;br /&gt;
La final, se construiește șirul de caractere de ieșire prin concatenarea string-urilor corespunzătoare valorilor calculate și se returnează acest șir de caractere.&lt;br /&gt;
&lt;br /&gt;
Funcția main():&lt;br /&gt;
Această funcție este folosită pentru a verifica dacă datele de intrare sunt introduse corect. În cazul în care datele sunt introduse corect, se apelează funcția solve(input_data: str) -&amp;gt; str pentru a calcula rezultatul și a afișa datele de ieșire. În caz contrar, se afișează un mesaj de eroare pe ecran. Această funcție primește datele de intrare de la utilizator prin intermediul funcției input().&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6432</id>
		<title>0299 - SumeSecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6432"/>
		<updated>2023-05-14T20:14:19Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/299/sumesecv - SumeSecv]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale, numerotate de la 1 la n, și m perechi de indici (i,j), cu 1≤i&amp;lt;j≤n. Să se determine, pentru fiecare pereche (i,j), suma elementelor din secvenţa determinată de i şi j.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare sumesecv.in conţine pe prima linie numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi fișierul sumesecv.out  &#039;&#039;&#039; numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1000&lt;br /&gt;
* 1 ≤ m ≤ 100&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:sumesecv.in&lt;br /&gt;
: 10&lt;br /&gt;
: 5 5 1 3 6 4 1 2 10 6 &lt;br /&gt;
: 3&lt;br /&gt;
: 5 8 &lt;br /&gt;
: 2 6 &lt;br /&gt;
: 6 10 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct &lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 13 19 23 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sumesecv.in&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma(secventa):&lt;br /&gt;
    suma = 0&lt;br /&gt;
    for x in secventa:&lt;br /&gt;
        suma += x&lt;br /&gt;
    return suma&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;sumesecv.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
            v = list(map(int, f.readline().split()))&lt;br /&gt;
            m = int(f.readline().strip())&lt;br /&gt;
            perechi = []&lt;br /&gt;
            for i in range(m):&lt;br /&gt;
                perechi.append(list(map(int, f.readline().split())))&lt;br /&gt;
    except:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    &lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 100 or m &amp;lt; 1 or m &amp;gt; 100:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    for x in v:&lt;br /&gt;
        if x &amp;gt;= 1000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        if p[0] &amp;lt; 1 or p[0] &amp;gt;= p[1] or p[1] &amp;gt; n:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    # Calculare sume secvențe&lt;br /&gt;
    sume = []&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        sume.append(calculeaza_suma(v[p[0]-1:p[1]]))&lt;br /&gt;
    &lt;br /&gt;
    # Scriere rezultat&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    with open(&#039;sumesecv.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        for s in sume:&lt;br /&gt;
            f.write(str(s) + &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie Rezolvare == &lt;br /&gt;
Funcția solve(input_data: str) -&amp;gt; str:&lt;br /&gt;
Această funcție primește ca argument un șir de caractere input_data care conține datele de intrare ale problemei și trebuie să returneze un șir de caractere care conține datele de ieșire cerute de problema.&lt;br /&gt;
În cadrul acestei funcții, mai întâi se parsează datele de intrare primite ca argument, adică se extrag valorile numerice și se stochează în variabile corespunzătoare. Apoi, se calculează suma elementelor din secvența determinată de fiecare pereche de indici și se stochează valorile calculate într-o listă.&lt;br /&gt;
La final, se construiește șirul de caractere de ieșire prin concatenarea string-urilor corespunzătoare valorilor calculate și se returnează acest șir de caractere.&lt;br /&gt;
&lt;br /&gt;
Funcția main():&lt;br /&gt;
Această funcție este folosită pentru a verifica dacă datele de intrare sunt introduse corect. În cazul în care datele sunt introduse corect, se apelează funcția solve(input_data: str) -&amp;gt; str pentru a calcula rezultatul și a afișa datele de ieșire. În caz contrar, se afișează un mesaj de eroare pe ecran. Această funcție primește datele de intrare de la utilizator prin intermediul funcției input().&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6430</id>
		<title>0299 - SumeSecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6430"/>
		<updated>2023-05-14T20:13:48Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/299/sumesecv - SumeSecv]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale, numerotate de la 1 la n, și m perechi de indici (i,j), cu 1≤i&amp;lt;j≤n. Să se determine, pentru fiecare pereche (i,j), suma elementelor din secvenţa determinată de i şi j.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare sumesecv.in conţine pe prima linie numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi fișierul  &#039;&#039;&#039; numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1000&lt;br /&gt;
* 1 ≤ m ≤ 100&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:sumesecv.in&lt;br /&gt;
: 10&lt;br /&gt;
: 5 5 1 3 6 4 1 2 10 6 &lt;br /&gt;
: 3&lt;br /&gt;
: 5 8 &lt;br /&gt;
: 2 6 &lt;br /&gt;
: 6 10 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct &lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 13 19 23 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sumesecv.in&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma(secventa):&lt;br /&gt;
    suma = 0&lt;br /&gt;
    for x in secventa:&lt;br /&gt;
        suma += x&lt;br /&gt;
    return suma&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;sumesecv.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
            v = list(map(int, f.readline().split()))&lt;br /&gt;
            m = int(f.readline().strip())&lt;br /&gt;
            perechi = []&lt;br /&gt;
            for i in range(m):&lt;br /&gt;
                perechi.append(list(map(int, f.readline().split())))&lt;br /&gt;
    except:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    &lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 100 or m &amp;lt; 1 or m &amp;gt; 100:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    for x in v:&lt;br /&gt;
        if x &amp;gt;= 1000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        if p[0] &amp;lt; 1 or p[0] &amp;gt;= p[1] or p[1] &amp;gt; n:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    # Calculare sume secvențe&lt;br /&gt;
    sume = []&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        sume.append(calculeaza_suma(v[p[0]-1:p[1]]))&lt;br /&gt;
    &lt;br /&gt;
    # Scriere rezultat&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    with open(&#039;sumesecv.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        for s in sume:&lt;br /&gt;
            f.write(str(s) + &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie Rezolvare == &lt;br /&gt;
Funcția solve(input_data: str) -&amp;gt; str:&lt;br /&gt;
Această funcție primește ca argument un șir de caractere input_data care conține datele de intrare ale problemei și trebuie să returneze un șir de caractere care conține datele de ieșire cerute de problema.&lt;br /&gt;
În cadrul acestei funcții, mai întâi se parsează datele de intrare primite ca argument, adică se extrag valorile numerice și se stochează în variabile corespunzătoare. Apoi, se calculează suma elementelor din secvența determinată de fiecare pereche de indici și se stochează valorile calculate într-o listă.&lt;br /&gt;
La final, se construiește șirul de caractere de ieșire prin concatenarea string-urilor corespunzătoare valorilor calculate și se returnează acest șir de caractere.&lt;br /&gt;
&lt;br /&gt;
Funcția main():&lt;br /&gt;
Această funcție este folosită pentru a verifica dacă datele de intrare sunt introduse corect. În cazul în care datele sunt introduse corect, se apelează funcția solve(input_data: str) -&amp;gt; str pentru a calcula rezultatul și a afișa datele de ieșire. În caz contrar, se afișează un mesaj de eroare pe ecran. Această funcție primește datele de intrare de la utilizator prin intermediul funcției input().&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1839_-_Memory006&amp;diff=6429</id>
		<title>1839 - Memory006</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1839_-_Memory006&amp;diff=6429"/>
		<updated>2023-05-14T20:12:33Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1839/memory006 - Memory006]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir format din n numere naturale nenule. Să se afle numărul secvenţelor din şir care au produsul elementelor egal cu 2k, unde k este un număr natural dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare memory006.in conține pe prima linie numerele n şi k, iar pe a doua linie n numere naturale nenule, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi fișierul memory006.out va conține &#039;&#039;&#039;numărul S, reprezentând numărul secvenţelor din şir care au produsul elementelor egal cu 2k.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 500.000&lt;br /&gt;
* 1 ≤ k ≤ 10.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mari decât 1 şi mai mici decât 10^18&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: memory006.in&lt;br /&gt;
: 5 3&lt;br /&gt;
: 7 4 2 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct &lt;br /&gt;
: memory006.out&lt;br /&gt;
: 2&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: memory006.in&lt;br /&gt;
: 5 15000&lt;br /&gt;
: 7 4 2 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: memory006.out&lt;br /&gt;
: Datele nu corespund restricțiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1839 - Memory006&lt;br /&gt;
&lt;br /&gt;
def count_subarrays(n, k, arr):&lt;br /&gt;
    count = 0&lt;br /&gt;
    prod = 1&lt;br /&gt;
    left = 0&lt;br /&gt;
    &lt;br /&gt;
    for right in range(n):&lt;br /&gt;
        prod *= arr[right]&lt;br /&gt;
        &lt;br /&gt;
        while prod &amp;gt; (2 ** 64) / 2 ** k:&lt;br /&gt;
            prod //= arr[left]&lt;br /&gt;
            left += 1&lt;br /&gt;
        &lt;br /&gt;
        if prod == 2 ** k:&lt;br /&gt;
            count += right - left + 1&lt;br /&gt;
    &lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    with open(&#039;memory006.in&#039;, &#039;r&#039;) as f_in:&lt;br /&gt;
        n, k = map(int, f_in.readline().split())&lt;br /&gt;
        arr = list(map(int, f_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if max(arr) &amp;gt; 10 ** 18 or min(arr) &amp;lt; 1 or k &amp;gt; 10000 or n &amp;gt; 500000:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(count_subarrays(n, k, arr))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția count_subarrays primește ca argumente lungimea șirului n, numărul natural k și șirul de numere naturale nenule arr. Returnează numărul de subșiruri ale șirului arr care au produsul elementelor egal cu 2^k.&lt;br /&gt;
&lt;br /&gt;
În cadrul funcției, inițializăm count la 0, prod la 1 și left la 0. Parcurgem șirul arr cu un indice right și actualizăm prod înmulțind cu fiecare element arr[right]. În timp ce prod depășește o anumită valoare calculată cu ajutorul lui k, actualizăm prod împărțind cu elementele de la începutul subșirului până când prod este mai mic sau egal cu acea valoare.&lt;br /&gt;
&lt;br /&gt;
Dacă prod este egal cu 2^k, incrementăm count cu numărul de elemente din subșirul curent.&lt;br /&gt;
&lt;br /&gt;
În funcția main, citim datele de intrare din fișierul memory006.in și verificăm dacă acestea corespund restricțiilor impuse în enunțul problemei. Dacă datele sunt valide, apelăm funcția count_subarrays și afișăm rezultatul. Dacă datele nu sunt valide, afișăm un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3357_-_beta&amp;diff=6428</id>
		<title>3357 - beta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3357_-_beta&amp;diff=6428"/>
		<updated>2023-05-14T20:11:27Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3357/beta3357 - beta]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un număr natural n despre care se cunoaște că este putere de 2. Considerăm inițial șirul numerelor naturale de la 1 la n așezate în ordine crescătoare. Notăm cu A acest șir. Pornind de la acesta, se construiește un nou șir (să îl notăm cu B) astfel: Primele n elemente ale lui B sunt chiar elementele șirului A în aceeași ordine. Următoarele n/2 elemente ale lui B sunt ultimele n/2 elemente ale lui A dar scrise în ordine inversă (descrescător). Următoarele n/4 elemente ale lui B sunt ultimele n/4 elemente ale lui A scrise în ordine crescătoare, următoarele n/8 elemente ale lui B sunt ultimele n/8 elemente ale lui A scrise în ordine descrescătoare, și tot așa, cu fiecare putere de 2 (notată p) ce apare la numitor, luăm ultimele n/p elemente din A și le adăugăm la finalul lui B alternând ordinea de parcurgere, de la o putere la alta conform modului descris mai sus. Se mai să un număr poz. Se cere determinarea numărului de pe poziția poz din șirul B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul beta.in conține pe prima linie numerele naturale n și poz separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
 &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi &#039;&#039;&#039; fișierul beta.out va conține valoarea cerută. Dacă șirul B are mai puțin de poz elemente se va scrie în fișier -1.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000.000&lt;br /&gt;
* n se dă putere de 2&lt;br /&gt;
* 1 ≤ poz ≤ 2.000.000.000&lt;br /&gt;
* Pentru 55 de puncte avem n ≤ 100.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: beta.in&lt;br /&gt;
: 8 13&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: beta.out&lt;br /&gt;
: 7&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: beta.in&lt;br /&gt;
: 8 25&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: beta.out&lt;br /&gt;
: -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3357 - beta&lt;br /&gt;
def calc_b(n, k):&lt;br /&gt;
    b = list(range(1, n+1))&lt;br /&gt;
    p = n&lt;br /&gt;
    while p &amp;gt; 1:&lt;br /&gt;
        p //= 2&lt;br /&gt;
        q = n // p&lt;br /&gt;
        r = n % p&lt;br /&gt;
        if r == 0:&lt;br /&gt;
            r = p&lt;br /&gt;
            q -= 1&lt;br /&gt;
        start = n - q*p + 1&lt;br /&gt;
        end = start + r - 1&lt;br /&gt;
        if q % 2 == 1:&lt;br /&gt;
            b.extend(reversed(range(start, end+1)))&lt;br /&gt;
        else:&lt;br /&gt;
            b.extend(range(start, end+1))&lt;br /&gt;
    return b&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    with open(&#039;beta.in&#039;, &#039;r&#039;) as f_in, open(&#039;beta.out&#039;, &#039;w&#039;) as f_out:&lt;br /&gt;
        n, k = map(int, f_in.readline().split())&lt;br /&gt;
        b = calc_b(n, k)&lt;br /&gt;
        if k &amp;lt;= len(b):&lt;br /&gt;
            f_out.write(f&#039;Datele sunt introduse corect.\n{b[k-1]}\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            f_out.write(&#039;-1\n&#039;)&lt;br /&gt;
            print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Codul începe prin citirea datelor de intrare din fișierul &amp;quot;beta.in&amp;quot;. Se citesc numărul natural &amp;quot;n&amp;quot; și poziția &amp;quot;pos&amp;quot;. Apoi, se verifică dacă datele introduse sunt corecte, adică &amp;quot;n&amp;quot; trebuie să fie o putere a lui 2 și &amp;quot;pos&amp;quot; trebuie să fie mai mic sau egal cu numărul total de elemente din șirul &amp;quot;B&amp;quot;. Dacă datele nu sunt corecte, se scrie în fișierul &amp;quot;beta.out&amp;quot; valoarea -1.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se apelează funcția &amp;quot;generate_sequence&amp;quot; care generează șirul &amp;quot;B&amp;quot;. Funcția primește ca parametri numărul &amp;quot;n&amp;quot; și șirul &amp;quot;A&amp;quot; format din numerele naturale de la 1 la &amp;quot;n&amp;quot; așezate în ordine crescătoare. &lt;br /&gt;
&lt;br /&gt;
În implementarea acestei funcții, se initializează șirul &amp;quot;B&amp;quot; cu prima jumătate a șirului &amp;quot;A&amp;quot; și se parcurge șirul &amp;quot;A&amp;quot; de la jumătatea sa până la sfârșitul său. Pentru fiecare subșir de dimensiune &amp;quot;n/2^i&amp;quot; se adaugă ultimele &amp;quot;n/2^i&amp;quot; elemente din șirul &amp;quot;A&amp;quot; la finalul șirului &amp;quot;B&amp;quot; în ordinea descrisă de cerință (alternând ordinea de parcurgere de la o putere la alta).&lt;br /&gt;
&lt;br /&gt;
În cele din urmă, se scrie în fișierul &amp;quot;beta.out&amp;quot; valoarea din șirul &amp;quot;B&amp;quot; de pe poziția &amp;quot;pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;main&amp;quot; este apelată doar pentru a verifica corectitudinea datelor introduse și a afișa mesajul corespunzător în fișierul &amp;quot;beta.out&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3357_-_beta&amp;diff=6427</id>
		<title>3357 - beta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3357_-_beta&amp;diff=6427"/>
		<updated>2023-05-14T20:11:07Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3357/beta3357 - beta]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un număr natural n despre care se cunoaște că este putere de 2. Considerăm inițial șirul numerelor naturale de la 1 la n așezate în ordine crescătoare. Notăm cu A acest șir. Pornind de la acesta, se construiește un nou șir (să îl notăm cu B) astfel: Primele n elemente ale lui B sunt chiar elementele șirului A în aceeași ordine. Următoarele n/2 elemente ale lui B sunt ultimele n/2 elemente ale lui A dar scrise în ordine inversă (descrescător). Următoarele n/4 elemente ale lui B sunt ultimele n/4 elemente ale lui A scrise în ordine crescătoare, următoarele n/8 elemente ale lui B sunt ultimele n/8 elemente ale lui A scrise în ordine descrescătoare, și tot așa, cu fiecare putere de 2 (notată p) ce apare la numitor, luăm ultimele n/p elemente din A și le adăugăm la finalul lui B alternând ordinea de parcurgere, de la o putere la alta conform modului descris mai sus. Se mai să un număr poz. Se cere determinarea numărului de pe poziția poz din șirul B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul beta.in conține pe prima linie numerele naturale n și poz separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
 &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; fișierul beta.out va conține valoarea cerută. Dacă șirul B are mai puțin de poz elemente se va scrie în fișier -1.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000.000&lt;br /&gt;
* n se dă putere de 2&lt;br /&gt;
* 1 ≤ poz ≤ 2.000.000.000&lt;br /&gt;
* Pentru 55 de puncte avem n ≤ 100.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: beta.in&lt;br /&gt;
: 8 13&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: beta.out&lt;br /&gt;
: 7&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: beta.in&lt;br /&gt;
: 8 25&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: beta.out&lt;br /&gt;
: -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3357 - beta&lt;br /&gt;
def calc_b(n, k):&lt;br /&gt;
    b = list(range(1, n+1))&lt;br /&gt;
    p = n&lt;br /&gt;
    while p &amp;gt; 1:&lt;br /&gt;
        p //= 2&lt;br /&gt;
        q = n // p&lt;br /&gt;
        r = n % p&lt;br /&gt;
        if r == 0:&lt;br /&gt;
            r = p&lt;br /&gt;
            q -= 1&lt;br /&gt;
        start = n - q*p + 1&lt;br /&gt;
        end = start + r - 1&lt;br /&gt;
        if q % 2 == 1:&lt;br /&gt;
            b.extend(reversed(range(start, end+1)))&lt;br /&gt;
        else:&lt;br /&gt;
            b.extend(range(start, end+1))&lt;br /&gt;
    return b&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    with open(&#039;beta.in&#039;, &#039;r&#039;) as f_in, open(&#039;beta.out&#039;, &#039;w&#039;) as f_out:&lt;br /&gt;
        n, k = map(int, f_in.readline().split())&lt;br /&gt;
        b = calc_b(n, k)&lt;br /&gt;
        if k &amp;lt;= len(b):&lt;br /&gt;
            f_out.write(f&#039;Datele sunt introduse corect.\n{b[k-1]}\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            f_out.write(&#039;-1\n&#039;)&lt;br /&gt;
            print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Codul începe prin citirea datelor de intrare din fișierul &amp;quot;beta.in&amp;quot;. Se citesc numărul natural &amp;quot;n&amp;quot; și poziția &amp;quot;pos&amp;quot;. Apoi, se verifică dacă datele introduse sunt corecte, adică &amp;quot;n&amp;quot; trebuie să fie o putere a lui 2 și &amp;quot;pos&amp;quot; trebuie să fie mai mic sau egal cu numărul total de elemente din șirul &amp;quot;B&amp;quot;. Dacă datele nu sunt corecte, se scrie în fișierul &amp;quot;beta.out&amp;quot; valoarea -1.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se apelează funcția &amp;quot;generate_sequence&amp;quot; care generează șirul &amp;quot;B&amp;quot;. Funcția primește ca parametri numărul &amp;quot;n&amp;quot; și șirul &amp;quot;A&amp;quot; format din numerele naturale de la 1 la &amp;quot;n&amp;quot; așezate în ordine crescătoare. &lt;br /&gt;
&lt;br /&gt;
În implementarea acestei funcții, se initializează șirul &amp;quot;B&amp;quot; cu prima jumătate a șirului &amp;quot;A&amp;quot; și se parcurge șirul &amp;quot;A&amp;quot; de la jumătatea sa până la sfârșitul său. Pentru fiecare subșir de dimensiune &amp;quot;n/2^i&amp;quot; se adaugă ultimele &amp;quot;n/2^i&amp;quot; elemente din șirul &amp;quot;A&amp;quot; la finalul șirului &amp;quot;B&amp;quot; în ordinea descrisă de cerință (alternând ordinea de parcurgere de la o putere la alta).&lt;br /&gt;
&lt;br /&gt;
În cele din urmă, se scrie în fișierul &amp;quot;beta.out&amp;quot; valoarea din șirul &amp;quot;B&amp;quot; de pe poziția &amp;quot;pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;main&amp;quot; este apelată doar pentru a verifica corectitudinea datelor introduse și a afișa mesajul corespunzător în fișierul &amp;quot;beta.out&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3357_-_beta&amp;diff=6426</id>
		<title>3357 - beta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3357_-_beta&amp;diff=6426"/>
		<updated>2023-05-14T20:10:27Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/3357/beta3357 - beta]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un număr natural n despre care se cunoaște că este putere de 2. Considerăm inițial șirul numerelor naturale de la 1 la n așezate în ordine crescătoare. Notăm cu A acest șir. Pornind de la acesta, se construiește un nou șir (să îl notăm cu B) astfel: Primele n elemente ale lui B sunt chiar elementele șirului A în aceeași ordine. Următoarele n/2 elemente ale lui B sunt ultimele n/2 elemente ale lui A dar scrise în ordine inversă (descrescător). Următoarele n/4 elemente ale lui B sunt ultimele n/4 elemente ale lui A scrise în ordine crescătoare, următoarele n/8 elemente ale lui B sunt ultimele n/8 elemente ale lui A scrise în ordine descrescătoare, și tot așa, cu fiecare putere de 2 (notată p) ce apare la numitor, luăm ultimele n/p elemente din A și le adăugăm la finalul lui B alternând ordinea de parcurgere, de la o putere la alta conform modului descris mai sus. Se mai să un număr poz. Se cere determinarea numărului de pe poziția poz din șirul B.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul beta.in conține pe prima linie numerele naturale n și poz separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
 &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; &lt;br /&gt;
 va conține valoarea cerută. Dacă șirul B are mai puțin de poz elemente se va scrie în fișier -1.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000.000&lt;br /&gt;
* n se dă putere de 2&lt;br /&gt;
* 1 ≤ poz ≤ 2.000.000.000&lt;br /&gt;
* Pentru 55 de puncte avem n ≤ 100.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: beta.in&lt;br /&gt;
: 8 13&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: beta.out&lt;br /&gt;
: 7&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: beta.in&lt;br /&gt;
: 8 25&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: beta.out&lt;br /&gt;
: -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3357 - beta&lt;br /&gt;
def calc_b(n, k):&lt;br /&gt;
    b = list(range(1, n+1))&lt;br /&gt;
    p = n&lt;br /&gt;
    while p &amp;gt; 1:&lt;br /&gt;
        p //= 2&lt;br /&gt;
        q = n // p&lt;br /&gt;
        r = n % p&lt;br /&gt;
        if r == 0:&lt;br /&gt;
            r = p&lt;br /&gt;
            q -= 1&lt;br /&gt;
        start = n - q*p + 1&lt;br /&gt;
        end = start + r - 1&lt;br /&gt;
        if q % 2 == 1:&lt;br /&gt;
            b.extend(reversed(range(start, end+1)))&lt;br /&gt;
        else:&lt;br /&gt;
            b.extend(range(start, end+1))&lt;br /&gt;
    return b&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    with open(&#039;beta.in&#039;, &#039;r&#039;) as f_in, open(&#039;beta.out&#039;, &#039;w&#039;) as f_out:&lt;br /&gt;
        n, k = map(int, f_in.readline().split())&lt;br /&gt;
        b = calc_b(n, k)&lt;br /&gt;
        if k &amp;lt;= len(b):&lt;br /&gt;
            f_out.write(f&#039;Datele sunt introduse corect.\n{b[k-1]}\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            f_out.write(&#039;-1\n&#039;)&lt;br /&gt;
            print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Codul începe prin citirea datelor de intrare din fișierul &amp;quot;beta.in&amp;quot;. Se citesc numărul natural &amp;quot;n&amp;quot; și poziția &amp;quot;pos&amp;quot;. Apoi, se verifică dacă datele introduse sunt corecte, adică &amp;quot;n&amp;quot; trebuie să fie o putere a lui 2 și &amp;quot;pos&amp;quot; trebuie să fie mai mic sau egal cu numărul total de elemente din șirul &amp;quot;B&amp;quot;. Dacă datele nu sunt corecte, se scrie în fișierul &amp;quot;beta.out&amp;quot; valoarea -1.&lt;br /&gt;
&lt;br /&gt;
În caz contrar, se apelează funcția &amp;quot;generate_sequence&amp;quot; care generează șirul &amp;quot;B&amp;quot;. Funcția primește ca parametri numărul &amp;quot;n&amp;quot; și șirul &amp;quot;A&amp;quot; format din numerele naturale de la 1 la &amp;quot;n&amp;quot; așezate în ordine crescătoare. &lt;br /&gt;
&lt;br /&gt;
În implementarea acestei funcții, se initializează șirul &amp;quot;B&amp;quot; cu prima jumătate a șirului &amp;quot;A&amp;quot; și se parcurge șirul &amp;quot;A&amp;quot; de la jumătatea sa până la sfârșitul său. Pentru fiecare subșir de dimensiune &amp;quot;n/2^i&amp;quot; se adaugă ultimele &amp;quot;n/2^i&amp;quot; elemente din șirul &amp;quot;A&amp;quot; la finalul șirului &amp;quot;B&amp;quot; în ordinea descrisă de cerință (alternând ordinea de parcurgere de la o putere la alta).&lt;br /&gt;
&lt;br /&gt;
În cele din urmă, se scrie în fișierul &amp;quot;beta.out&amp;quot; valoarea din șirul &amp;quot;B&amp;quot; de pe poziția &amp;quot;pos&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Funcția &amp;quot;main&amp;quot; este apelată doar pentru a verifica corectitudinea datelor introduse și a afișa mesajul corespunzător în fișierul &amp;quot;beta.out&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1839_-_Memory006&amp;diff=6421</id>
		<title>1839 - Memory006</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1839_-_Memory006&amp;diff=6421"/>
		<updated>2023-05-14T20:08:38Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/1839/memory006 - Memory006]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir format din n numere naturale nenule. Să se afle numărul secvenţelor din şir care au produsul elementelor egal cu 2k, unde k este un număr natural dat.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare memory006.in conține pe prima linie numerele n şi k, iar pe a doua linie n numere naturale nenule, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;numărul S, reprezentând numărul secvenţelor din şir care au produsul elementelor egal cu 2k.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 500.000&lt;br /&gt;
* 1 ≤ k ≤ 10.000&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mari decât 1 şi mai mici decât 10^18&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: memory006.in&lt;br /&gt;
: 5 3&lt;br /&gt;
: 7 4 2 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct &lt;br /&gt;
: memory006.out&lt;br /&gt;
: 2&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: memory006.in&lt;br /&gt;
: 5 15000&lt;br /&gt;
: 7 4 2 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: memory006.out&lt;br /&gt;
: Datele nu corespund restricțiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1839 - Memory006&lt;br /&gt;
&lt;br /&gt;
def count_subarrays(n, k, arr):&lt;br /&gt;
    count = 0&lt;br /&gt;
    prod = 1&lt;br /&gt;
    left = 0&lt;br /&gt;
    &lt;br /&gt;
    for right in range(n):&lt;br /&gt;
        prod *= arr[right]&lt;br /&gt;
        &lt;br /&gt;
        while prod &amp;gt; (2 ** 64) / 2 ** k:&lt;br /&gt;
            prod //= arr[left]&lt;br /&gt;
            left += 1&lt;br /&gt;
        &lt;br /&gt;
        if prod == 2 ** k:&lt;br /&gt;
            count += right - left + 1&lt;br /&gt;
    &lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    with open(&#039;memory006.in&#039;, &#039;r&#039;) as f_in:&lt;br /&gt;
        n, k = map(int, f_in.readline().split())&lt;br /&gt;
        arr = list(map(int, f_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if max(arr) &amp;gt; 10 ** 18 or min(arr) &amp;lt; 1 or k &amp;gt; 10000 or n &amp;gt; 500000:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        print(count_subarrays(n, k, arr))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția count_subarrays primește ca argumente lungimea șirului n, numărul natural k și șirul de numere naturale nenule arr. Returnează numărul de subșiruri ale șirului arr care au produsul elementelor egal cu 2^k.&lt;br /&gt;
&lt;br /&gt;
În cadrul funcției, inițializăm count la 0, prod la 1 și left la 0. Parcurgem șirul arr cu un indice right și actualizăm prod înmulțind cu fiecare element arr[right]. În timp ce prod depășește o anumită valoare calculată cu ajutorul lui k, actualizăm prod împărțind cu elementele de la începutul subșirului până când prod este mai mic sau egal cu acea valoare.&lt;br /&gt;
&lt;br /&gt;
Dacă prod este egal cu 2^k, incrementăm count cu numărul de elemente din subșirul curent.&lt;br /&gt;
&lt;br /&gt;
În funcția main, citim datele de intrare din fișierul memory006.in și verificăm dacă acestea corespund restricțiilor impuse în enunțul problemei. Dacă datele sunt valide, apelăm funcția count_subarrays și afișăm rezultatul. Dacă datele nu sunt valide, afișăm un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6420</id>
		<title>0299 - SumeSecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0299_-_SumeSecv&amp;diff=6420"/>
		<updated>2023-05-14T20:07:14Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/299/sumesecv - SumeSecv]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale, numerotate de la 1 la n, și m perechi de indici (i,j), cu 1≤i&amp;lt;j≤n. Să se determine, pentru fiecare pereche (i,j), suma elementelor din secvenţa determinată de i şi j.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare sumesecv.in conţine pe prima linie numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; numărul n, iar pe a doua linie cele n elemente ale vectorului. Următoarea linie conține numărul m, iar următoarele m linii câte o pereche de indici i j&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1000&lt;br /&gt;
* 1 ≤ m ≤ 100&lt;br /&gt;
== Exemplu 1  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:sumesecv.in&lt;br /&gt;
: 10&lt;br /&gt;
: 5 5 1 3 6 4 1 2 10 6 &lt;br /&gt;
: 3&lt;br /&gt;
: 5 8 &lt;br /&gt;
: 2 6 &lt;br /&gt;
: 6 10 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct &lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 13 19 23 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: sumesecv.in&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: sumesecv.out&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
: 2&lt;br /&gt;
: 1 5&lt;br /&gt;
: 2 4&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def calculeaza_suma(secventa):&lt;br /&gt;
    suma = 0&lt;br /&gt;
    for x in secventa:&lt;br /&gt;
        suma += x&lt;br /&gt;
    return suma&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;sumesecv.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
            v = list(map(int, f.readline().split()))&lt;br /&gt;
            m = int(f.readline().strip())&lt;br /&gt;
            perechi = []&lt;br /&gt;
            for i in range(m):&lt;br /&gt;
                perechi.append(list(map(int, f.readline().split())))&lt;br /&gt;
    except:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    &lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 100 or m &amp;lt; 1 or m &amp;gt; 100:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
    for x in v:&lt;br /&gt;
        if x &amp;gt;= 1000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        if p[0] &amp;lt; 1 or p[0] &amp;gt;= p[1] or p[1] &amp;gt; n:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    # Calculare sume secvențe&lt;br /&gt;
    sume = []&lt;br /&gt;
    for p in perechi:&lt;br /&gt;
        sume.append(calculeaza_suma(v[p[0]-1:p[1]]))&lt;br /&gt;
    &lt;br /&gt;
    # Scriere rezultat&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    with open(&#039;sumesecv.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        for s in sume:&lt;br /&gt;
            f.write(str(s) + &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie Rezolvare == &lt;br /&gt;
Funcția solve(input_data: str) -&amp;gt; str:&lt;br /&gt;
Această funcție primește ca argument un șir de caractere input_data care conține datele de intrare ale problemei și trebuie să returneze un șir de caractere care conține datele de ieșire cerute de problema.&lt;br /&gt;
În cadrul acestei funcții, mai întâi se parsează datele de intrare primite ca argument, adică se extrag valorile numerice și se stochează în variabile corespunzătoare. Apoi, se calculează suma elementelor din secvența determinată de fiecare pereche de indici și se stochează valorile calculate într-o listă.&lt;br /&gt;
La final, se construiește șirul de caractere de ieșire prin concatenarea string-urilor corespunzătoare valorilor calculate și se returnează acest șir de caractere.&lt;br /&gt;
&lt;br /&gt;
Funcția main():&lt;br /&gt;
Această funcție este folosită pentru a verifica dacă datele de intrare sunt introduse corect. În cazul în care datele sunt introduse corect, se apelează funcția solve(input_data: str) -&amp;gt; str pentru a calcula rezultatul și a afișa datele de ieșire. În caz contrar, se afișează un mesaj de eroare pe ecran. Această funcție primește datele de intrare de la utilizator prin intermediul funcției input().&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0304_-_Secvente&amp;diff=6419</id>
		<title>0304 - Secvente</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0304_-_Secvente&amp;diff=6419"/>
		<updated>2023-05-14T20:05:52Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/304/secvente 0304 - Secvente]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir format din n elemente, numere naturale. Determinaţi câte secvenţe maximale cu elementele ordonate crescător conţine şirul.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvente.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa:&lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; numărul C, reprezentând numărul de secvenţe cu elementele ordonate crescător din şirul dat&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele şirului vor avea cel mult 4 cifre&lt;br /&gt;
* o secvență cu elemente ordonate crescător este maximală dacă adăugând la secvență încă un element ea nu mai are elementele ordonate crescător&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvente.in&lt;br /&gt;
: 8 &lt;br /&gt;
: 12 10 15 17 17&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvente.out&lt;br /&gt;
: 3&lt;br /&gt;
== Exemplu 2  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvente.in&lt;br /&gt;
: ...&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvente.out&lt;br /&gt;
: Datele sunt introduse incorrect&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def count_increasing_sequences(n, a):&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        j = i&lt;br /&gt;
        while j + 1 &amp;lt; n and a[j] &amp;lt; a[j + 1]:&lt;br /&gt;
            j += 1&lt;br /&gt;
        cnt += (j &amp;gt; i)&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;secvente.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            a = []&lt;br /&gt;
            for line in f:&lt;br /&gt;
                a += list(map(int, line.strip().split()))&lt;br /&gt;
            if len(a) != n:&lt;br /&gt;
                print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
                with open(&amp;quot;secvente.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
                    g.write(str(count_increasing_sequences(n, a)))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fisierul secvente.in nu exista.&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Functia def count_increasing_sequences primeste 2 parametri:&lt;br /&gt;
&lt;br /&gt;
n: reprezintă numărul de elemente din lista a&lt;br /&gt;
a: lista de n elemente&lt;br /&gt;
Funcția utilizează o metodă iterativă pentru a număra secvențele maximale în care elementele sunt ordonate crescător. Aceasta lucrează astfel:&lt;br /&gt;
&lt;br /&gt;
Inițializăm o variabilă cnt cu 0.&lt;br /&gt;
Parcurgem lista a utilizând un iterator i în intervalul [0, n-1]&lt;br /&gt;
Inițializăm un alt iterator j cu valoarea lui i&lt;br /&gt;
Utilizând un ciclu while verificăm dacă următorul element din lista a (a[j+1]) este mai mare decât elementul curent (a[j]). Dacă da, incrementăm iteratorul j și continuăm să verificăm dacă elementele sunt în ordine crescătoare.&lt;br /&gt;
Dacă j este mai mare decât i, adăugăm 1 la valoarea lui cnt. Acest lucru se face deoarece avem o secvență maximă crescătoare în această secvență, începând de la poziția i și terminând la poziția j.&lt;br /&gt;
La final, funcția returnează valoarea lui cnt, care reprezintă numărul de secvențe maximale crescătoare găsite în lista a.&lt;br /&gt;
&lt;br /&gt;
În ceea ce privește blocul if __name__ == &amp;quot;__main__&amp;quot;:, acesta verifică dacă fișierul de intrare există și, dacă da, citesc datele din fișierul de intrare secvente.in și le pasează la funcția count_increasing_sequences(). Funcția apoi scrie rezultatul în fișierul de ieșire secvente.out, împreună cu un mesaj corespunzător în cazul în care datele sunt sau nu sunt introduse corect.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0304_-_Secvente&amp;diff=6418</id>
		<title>0304 - Secvente</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0304_-_Secvente&amp;diff=6418"/>
		<updated>2023-05-14T20:04:40Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/304/secvente 0304 - Secvente]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un şir format din n elemente, numere naturale. Determinaţi câte secvenţe maximale cu elementele ordonate crescător conţine şirul.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvente.in conţine pe prima linie numărul n; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
 Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; numărul C, reprezentând numărul de secvenţe cu elementele ordonate crescător din şirul dat&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele şirului vor avea cel mult 4 cifre&lt;br /&gt;
* o secvență cu elemente ordonate crescător este maximală dacă adăugând la secvență încă un element ea nu mai are elementele ordonate crescător&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvente.in&lt;br /&gt;
: 8 &lt;br /&gt;
: 12 10 15 17 17&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvente.out&lt;br /&gt;
: 3&lt;br /&gt;
== Exemplu 2  ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvente.in&lt;br /&gt;
: ...&lt;br /&gt;
: 10 12 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvente.out&lt;br /&gt;
: Datele sunt introduse incorrect&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0304 - Secvente&lt;br /&gt;
&lt;br /&gt;
def count_increasing_sequences(n, a):&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        j = i&lt;br /&gt;
        while j + 1 &amp;lt; n and a[j] &amp;lt; a[j + 1]:&lt;br /&gt;
            j += 1&lt;br /&gt;
        cnt += (j &amp;gt; i)&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;secvente.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            a = []&lt;br /&gt;
            for line in f:&lt;br /&gt;
                a += list(map(int, line.strip().split()))&lt;br /&gt;
            if len(a) != n:&lt;br /&gt;
                print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
                with open(&amp;quot;secvente.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
                    g.write(str(count_increasing_sequences(n, a)))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fisierul secvente.in nu exista.&amp;quot;) &lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Functia def count_increasing_sequences primeste 2 parametri:&lt;br /&gt;
&lt;br /&gt;
n: reprezintă numărul de elemente din lista a&lt;br /&gt;
a: lista de n elemente&lt;br /&gt;
Funcția utilizează o metodă iterativă pentru a număra secvențele maximale în care elementele sunt ordonate crescător. Aceasta lucrează astfel:&lt;br /&gt;
&lt;br /&gt;
Inițializăm o variabilă cnt cu 0.&lt;br /&gt;
Parcurgem lista a utilizând un iterator i în intervalul [0, n-1]&lt;br /&gt;
Inițializăm un alt iterator j cu valoarea lui i&lt;br /&gt;
Utilizând un ciclu while verificăm dacă următorul element din lista a (a[j+1]) este mai mare decât elementul curent (a[j]). Dacă da, incrementăm iteratorul j și continuăm să verificăm dacă elementele sunt în ordine crescătoare.&lt;br /&gt;
Dacă j este mai mare decât i, adăugăm 1 la valoarea lui cnt. Acest lucru se face deoarece avem o secvență maximă crescătoare în această secvență, începând de la poziția i și terminând la poziția j.&lt;br /&gt;
La final, funcția returnează valoarea lui cnt, care reprezintă numărul de secvențe maximale crescătoare găsite în lista a.&lt;br /&gt;
&lt;br /&gt;
În ceea ce privește blocul if __name__ == &amp;quot;__main__&amp;quot;:, acesta verifică dacă fișierul de intrare există și, dacă da, citesc datele din fișierul de intrare secvente.in și le pasează la funcția count_increasing_sequences(). Funcția apoi scrie rezultatul în fișierul de ieșire secvente.out, împreună cu un mesaj corespunzător în cazul în care datele sunt sau nu sunt introduse corect.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0300_-_SumaInSecv&amp;diff=6415</id>
		<title>0300 - SumaInSecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0300_-_SumaInSecv&amp;diff=6415"/>
		<updated>2023-05-14T20:03:35Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4148/secv10 0300 - SumaInSecv]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector format din n elemente, numere naturale nenule, şi un număr natural S. Determinaţi, dacă există o secvenţă de elemente din şir cu suma elementelor egală cu S.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare sumainsecv.in conţine pe prima linie numerele n şi S; urmează cele n elemente ale vectorului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;și fișierul secv10.out va conține pe prima linie numerele lmax și c, reprezentând lungimea maximă a unei secvențe de elemente divizibile cu 10, respectiv numărul de secvențe de lungime maximă cu elemente divizibile cu 10&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele vectorului vor avea cel mult 4 cifre şi sunt numerotate de la 1 la n&lt;br /&gt;
* dacă vectorul nu conţine nici o secvenţă cu suma elementelor S, se va afişa 0 0&lt;br /&gt;
* dacă şirul conţine mai multe secvenţe cu suma elementelor egală cu S, se va determina cea mai din stânga&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secv10.in&lt;br /&gt;
: 8 32  &lt;br /&gt;
: 12 10 15 7 17 13 19 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: secv10.out&lt;br /&gt;
: 2 4 &lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secv10.in&lt;br /&gt;
: 0 32 &lt;br /&gt;
: &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secv10.out&lt;br /&gt;
: Datele nu sunt introduse correct&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0300 - SumaInSecv&lt;br /&gt;
&lt;br /&gt;
def secv_suma(n, S, v):&lt;br /&gt;
    dp = [[0 for j in range(n)] for i in range(n)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        dp[i][i] = v[i]&lt;br /&gt;
        for j in range(i+1, n):&lt;br /&gt;
            dp[i][j] = dp[i][j-1] + v[j]&lt;br /&gt;
&lt;br /&gt;
    lmax = c = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            if dp[i][j] == S:&lt;br /&gt;
                l = j-i+1&lt;br /&gt;
                if l &amp;gt; lmax:&lt;br /&gt;
                    lmax = l&lt;br /&gt;
                    c = 1&lt;br /&gt;
                elif l == lmax:&lt;br /&gt;
                    c += 1&lt;br /&gt;
&lt;br /&gt;
    if lmax == 0:&lt;br /&gt;
        print(&amp;quot;0 0&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(lmax, c)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;sumainsecv.in&amp;quot;) as f:&lt;br /&gt;
            n, S = map(int, f.readline().split())&lt;br /&gt;
            v = []&lt;br /&gt;
            for i in range(n):&lt;br /&gt;
                row = f.readline().split()&lt;br /&gt;
                if len(row) != 1:&lt;br /&gt;
                    raise ValueError(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
                v.append(int(row[0]))&lt;br /&gt;
            if i+1 != n:&lt;br /&gt;
                raise ValueError(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        secv_suma(n, S, v)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(e)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Funcția check_data este folosită pentru a verifica dacă datele de intrare sunt introduse corect și pentru a citi și valida datele din fișierul de intrare. Ea primește ca argumente numele fișierului de intrare și numărul de elemente din vectorul dat.&lt;br /&gt;
&lt;br /&gt;
Funcția find_seq primește ca argumente vectorul dat și suma S și are ca scop găsirea celei mai lungi secvențe de elemente divizibile cu 10 a cărei sumă este S, dar și numărul de astfel de secvențe. Ea determină mai întâi toate sub-secvențele posibile din vectorul dat, calculează suma elementelor acestora și verifică dacă sunt divizibile cu 10 și dacă sunt mai lungi decât cea mai lungă secvență de până acum. Dacă da, atunci acea secvență devine noua cea mai lungă secvență și numărul de secvențe devine 1, altfel, dacă secvența este la fel de lungă ca cea mai lungă secvență curentă, numărul de secvențe se incrementează. La final, funcția returnează lungimea celei mai lungi secvențe și numărul de secvențe de acea lungime.&lt;br /&gt;
&lt;br /&gt;
Funcția main este utilizată pentru a apela cele două funcții și pentru a afișa rezultatul găsit în fișierul de ieșire. Ea primește ca argumente numele fișierelor de intrare și de ieșire și începe prin a apela funcția check_data pentru a citi și valida datele din fișierul de intrare. Dacă datele sunt introduse corect, atunci funcția find_seq este apelată cu vectorul citit și suma S și se afișează rezultatul găsit în fișierul de ieșire. Dacă datele nu sunt introduse corect, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; în loc de a apela funcția find_seq.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4148_-_Secv10&amp;diff=6414</id>
		<title>4148 - Secv10</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4148_-_Secv10&amp;diff=6414"/>
		<updated>2023-05-14T20:02:56Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4148/secv10 4148 - Secv10]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau n numere naturale, reprezentând elementele unui vector. Determinați lungimea maximă a unei secvențe de elemente divizibile cu 10, precum și numărul de secvențe de lungime maximă cu elemente divizibile cu 10.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secv10.in conține numărul n și n valori naturale, reprezentând elementele vectorului.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
&lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;și fișierul secv10.out va conține pe prima linie numerele lmax și c, reprezentând lungimea maximă a unei secvențe de elemente divizibile cu 10, respectiv numărul de secvențe de lungime maximă cu elemente divizibile cu 10&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;lt; n ≤ 10.000&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1.000.000 și există cel puțin un element divizibil cu 10.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secv10.in&lt;br /&gt;
: 11&lt;br /&gt;
: 12 10 20 30 99 1000 1 20 500 600 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: secv10.out&lt;br /&gt;
: 3 2&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secv10.in&lt;br /&gt;
: 7&lt;br /&gt;
: 1 3 5 7 9 11 13 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secv10.out&lt;br /&gt;
: 0&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 4148 - Secv10&lt;br /&gt;
def secv10(n, v):&lt;br /&gt;
    # Inițializăm variabilele&lt;br /&gt;
    lmax = 0&lt;br /&gt;
    c = 0&lt;br /&gt;
    l = 0&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem vectorul&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if v[i] % 10 == 0:&lt;br /&gt;
            l += 1&lt;br /&gt;
            if l &amp;gt; lmax:&lt;br /&gt;
                lmax = l&lt;br /&gt;
                c = 1&lt;br /&gt;
            elif l == lmax:&lt;br /&gt;
                c += 1&lt;br /&gt;
        else:&lt;br /&gt;
            l = 0&lt;br /&gt;
&lt;br /&gt;
    return lmax, c&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Citim datele de intrare&lt;br /&gt;
    with open(&#039;secv10.in&#039;, &#039;r&#039;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        v = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm restricțiile&lt;br /&gt;
    if not (0 &amp;lt; n &amp;lt;= 10000 and any(x % 10 == 0 for x in v)):&lt;br /&gt;
        print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Calculăm rezultatul&lt;br /&gt;
        rez = secv10(n, v)&lt;br /&gt;
&lt;br /&gt;
        # Afisam rezultatul&lt;br /&gt;
        print(&#039;Datele sunt introduse corect.&#039;)&lt;br /&gt;
        print(rez[0], rez[1])&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Acesta începe prin a defini funcția secv10 care primește doi parametri: numărul de elemente din vectorul de intrare n și vectorul v în sine. Funcția calculează și returnează lungimea maximă a unei secvențe de elemente divizibile cu 10 și numărul de secvențe de lungime maximă cu elemente divizibile cu 10 din vectorul dat.&lt;br /&gt;
&lt;br /&gt;
Funcția este apoi apelată în blocul if __name__ == &#039;__main__&#039;: care începe prin a citi datele de intrare din fișierul secv10.in. Se verifică restricțiile și, dacă acestea sunt îndeplinite, se calculează rezultatul și se afișează pe ecran. În caz contrar, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0181_-_SecvCresc&amp;diff=6410</id>
		<title>0181 - SecvCresc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0181_-_SecvCresc&amp;diff=6410"/>
		<updated>2023-05-14T20:00:44Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/181/secvcresc 0181 - SecvCresc]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau n numere naturale, reprezentând elementele unui vector. Determinați cea mai lungă secvență de elemente ordonate strict crescător din vector. Dacă există mai multe astfel de secvențe se va determina cea mai din stânga.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvcresc.in conține numărul n și n valori naturale, reprezentând elementele vectorului. Valorile din fișier pot fi dispuse pe mai multe linii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
  Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot; &#039;&#039;&#039; și fișierul de ieșire secvcresc.out va conține pe prima linie numerele st și dr, reprezentând indicii de început și de sfârșit ai secvenței determinate&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;lt; n ≤ 10.000&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1.000.000 și sunt numerotate de la 1&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvcresc.in &lt;br /&gt;
: 9&lt;br /&gt;
: 2 6 4 5 8 9 6 3 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: secvcresc.out&lt;br /&gt;
: 3 6&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvcresc.in &lt;br /&gt;
: 5&lt;br /&gt;
: 1000 200 300 400 500&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvcresc.out&lt;br /&gt;
: Iar sevcresc.out nu va fi generat deoarece datele nu sunt crescatoare&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0181 - SecvCresc&lt;br /&gt;
&lt;br /&gt;
def lungime_secventa_crescatoare(n, v):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Funcția primește un număr n reprezentând numărul de elemente din vectorul v și un vector v de n elemente.&lt;br /&gt;
    Returnează indicii secvenței maxime ordonate crescător din vectorul v.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    st = dr = 0&lt;br /&gt;
    max_len = 0&lt;br /&gt;
    len_curenta = 1&lt;br /&gt;
    for i in range(1, n):&lt;br /&gt;
        if v[i] &amp;gt; v[i-1]:&lt;br /&gt;
            len_curenta += 1&lt;br /&gt;
        else:&lt;br /&gt;
            if len_curenta &amp;gt; max_len:&lt;br /&gt;
                max_len = len_curenta&lt;br /&gt;
                st = i - max_len&lt;br /&gt;
                dr = i - 1&lt;br /&gt;
            len_curenta = 1&lt;br /&gt;
    if len_curenta &amp;gt; max_len:&lt;br /&gt;
        max_len = len_curenta&lt;br /&gt;
        st = n - max_len&lt;br /&gt;
        dr = n - 1&lt;br /&gt;
    return st+1, dr+1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;secvcresc.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            v = []&lt;br /&gt;
            for _ in range(n):&lt;br /&gt;
                v += list(map(int, f.readline().split()))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
        if n &amp;gt; 0 and n &amp;lt;= 10000 and all(elem &amp;lt; 1000000 for elem in v):&lt;br /&gt;
            st, dr = lungime_secventa_crescatoare(n, v)&lt;br /&gt;
            print(&#039;Datele sunt introduse corect.&#039;)&lt;br /&gt;
            with open(&#039;secvcresc.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
                f.write(str(st) + &#039; &#039; + str(dr) + &#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&#039;Datele nu corespund restricțiilor impuse.&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
Funcția lungime_secventa_crescatoare primește un număr n reprezentând numărul de elemente din vectorul v și un vector v de n elemente și returnează indicii secvenței maxime ordonate crescător din vectorul v.&lt;br /&gt;
În funcția principală if __name__ == &#039;__main__&#039;::&lt;br /&gt;
Se încearcă deschiderea fișierului de intrare &#039;secvcresc.in&#039; și citirea datelor din el.&lt;br /&gt;
Dacă fișierul nu poate fi deschis, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
Dacă datele sunt corect introduse (numărul de elemente n este între 1 și 10000 și toate elementele vectorului v sunt mai mici decât 1000000), se calculează indicii secvenței maxime ordonate crescător și se afișează mesajul &amp;quot;Datele sunt introduse corect.&amp;quot;.&lt;br /&gt;
Dacă datele nu corespund restricțiilor impuse, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
Indicii secvenței maxime ordonate crescător sunt scriși în fișierul de ieșire &#039;secvcresc.out&#039;.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0521_-_kSecventa&amp;diff=6409</id>
		<title>0521 - kSecventa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0521_-_kSecventa&amp;diff=6409"/>
		<updated>2023-05-14T19:58:03Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/521/ksecventa 0521 - kSecventa]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente, numere naturale, și un număr k, divizor al lui n. Se împarte vectorul în k secvențe disjuncte, numerotate de la 1 la k. Să se stabilească dacă există două secvențe identice.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele vectorului.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;se va afișa pe ecran numerele i j, i &amp;lt; j reprezentând numerele de ordine a două secvențe identice, dacă există două astfel de secvențe, sau mesajul NU, dacă nu există două astfel de secvențe, dacă există mai multe perechi de secvențe identice se vor considera cele cu numerele de ordine minime&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ k &amp;lt; n ≤ 1000, k este divizor al lui n&lt;br /&gt;
* cele n numere citite vor fi mai mici decât 1000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 15 5&lt;br /&gt;
: 3 6 4 7 6 6 6 4 6 7 6 6 4 4 5 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 2 4&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 3 2&lt;br /&gt;
: 1 1 2 3 2 6 7 8 2 4 1 1 2 3 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0521 - kSecventa&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, k, arr):&lt;br /&gt;
    if k &amp;gt;= n:&lt;br /&gt;
        return False&lt;br /&gt;
    if n % k != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if max(arr) &amp;gt; 1000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_identical_sequences(n, k, arr):&lt;br /&gt;
    if not validate_input(n, k, arr):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    seq_dict = {}&lt;br /&gt;
    for i in range(n // k):&lt;br /&gt;
        seq = tuple(arr[i * k: (i + 1) * k])&lt;br /&gt;
        if seq in seq_dict:&lt;br /&gt;
            print(seq_dict[seq], i + 1)&lt;br /&gt;
            return&lt;br /&gt;
        else:&lt;br /&gt;
            seq_dict[seq] = i + 1&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, k = map(int, input().split())&lt;br /&gt;
    arr = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, k, arr):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        find_identical_sequences(n, k, arr)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare == &lt;br /&gt;
Funcția validate_input primește valorile citite de la tastatură și verifică dacă îndeplinesc restricțiile impuse de problemă.&lt;br /&gt;
Funcția check_sequences primește valorile validate și verifică existența a două secvențe identice în vectorul dat.&lt;br /&gt;
Se parcurg secvențele de lungime n/k din vector, verificându-se dacă au mai fost întâlnite.&lt;br /&gt;
Dacă se găsește o secvență identică, se afișează numerele de ordine ale celor două secvențe și se returnează din funcție.&lt;br /&gt;
Dacă nu se găsește nicio secvență identică, se afișează mesajul &amp;quot;NU&amp;quot;.&lt;br /&gt;
Dacă datele nu respectă restricțiile, se afișează mesajul corespunzător și se returnează din funcție.&lt;br /&gt;
Funcția check_sequences este apelată în cadrul blocului if __name__ == &amp;quot;__main__&amp;quot;, unde se citesc datele de intrare.&amp;quot;__main__&amp;quot;, unde se citesc datele de intrare.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0521_-_kSecventa&amp;diff=6408</id>
		<title>0521 - kSecventa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0521_-_kSecventa&amp;diff=6408"/>
		<updated>2023-05-14T19:57:39Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/521/ksecventa 0521 - kSecventa]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente, numere naturale, și un număr k, divizor al lui n. Se împarte vectorul în k secvențe disjuncte, numerotate de la 1 la k. Să se stabilească dacă există două secvențe identice.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n și k, iar apoi n numere naturale, reprezentând elementele vectorului.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;se va afișa pe ecran numerele i j, i &amp;lt; j reprezentând numerele de ordine a două secvențe identice, dacă există două astfel de secvențe, sau mesajul NU, dacă nu există două astfel de secvențe, dacă există mai multe perechi de secvențe identice se vor considera cele cu numerele de ordine minime.&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ k &amp;lt; n ≤ 1000, k este divizor al lui n&lt;br /&gt;
* cele n numere citite vor fi mai mici decât 1000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 15 5&lt;br /&gt;
: 3 6 4 7 6 6 6 4 6 7 6 6 4 4 5 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: 2 4&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 3 2&lt;br /&gt;
: 1 1 2 3 2 6 7 8 2 4 1 1 2 3 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0521 - kSecventa&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, k, arr):&lt;br /&gt;
    if k &amp;gt;= n:&lt;br /&gt;
        return False&lt;br /&gt;
    if n % k != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if max(arr) &amp;gt; 1000:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_identical_sequences(n, k, arr):&lt;br /&gt;
    if not validate_input(n, k, arr):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    seq_dict = {}&lt;br /&gt;
    for i in range(n // k):&lt;br /&gt;
        seq = tuple(arr[i * k: (i + 1) * k])&lt;br /&gt;
        if seq in seq_dict:&lt;br /&gt;
            print(seq_dict[seq], i + 1)&lt;br /&gt;
            return&lt;br /&gt;
        else:&lt;br /&gt;
            seq_dict[seq] = i + 1&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, k = map(int, input().split())&lt;br /&gt;
    arr = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if validate_input(n, k, arr):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        find_identical_sequences(n, k, arr)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare == &lt;br /&gt;
Funcția validate_input primește valorile citite de la tastatură și verifică dacă îndeplinesc restricțiile impuse de problemă.&lt;br /&gt;
Funcția check_sequences primește valorile validate și verifică existența a două secvențe identice în vectorul dat.&lt;br /&gt;
Se parcurg secvențele de lungime n/k din vector, verificându-se dacă au mai fost întâlnite.&lt;br /&gt;
Dacă se găsește o secvență identică, se afișează numerele de ordine ale celor două secvențe și se returnează din funcție.&lt;br /&gt;
Dacă nu se găsește nicio secvență identică, se afișează mesajul &amp;quot;NU&amp;quot;.&lt;br /&gt;
Dacă datele nu respectă restricțiile, se afișează mesajul corespunzător și se returnează din funcție.&lt;br /&gt;
Funcția check_sequences este apelată în cadrul blocului if __name__ == &amp;quot;__main__&amp;quot;, unde se citesc datele de intrare.&amp;quot;__main__&amp;quot;, unde se citesc datele de intrare.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0166_-_SecvMax&amp;diff=6407</id>
		<title>0166 - SecvMax</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0166_-_SecvMax&amp;diff=6407"/>
		<updated>2023-05-14T19:55:30Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/134/secvk 0166 - SecvMax]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dau n numere naturale, reprezentând elementele unui vector.&lt;br /&gt;
&lt;br /&gt;
Determinați cea mai lungă secvență de elemente pare din vector. Dacă există mai multe secvențe cu lungime maximă se va determina cea cu suma elementelor maximă. Dacă există mai multe astfel de secvențe se va determina cea mai din stânga.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvmax.in conţine numărul n și n valori naturale, reprezentând elementele vectorului. Valorile din fișier pot fi dispuse pe mai multe linii.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
 &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039; și fișierul secvk.out va conţine pe prima linie k numere, reprezentând elementele secvenței cerute&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;lt; n ≤ 10.000&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1000 și sunt numerotate de la 1&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvk.in&lt;br /&gt;
: 9&lt;br /&gt;
: 2 6 4 5 8 8 6 3 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse corect.&lt;br /&gt;
: secvk.out&lt;br /&gt;
: 5 7&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvk.in&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvk.out&lt;br /&gt;
: 2 3 4 5&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0166 - SecvMax&lt;br /&gt;
&lt;br /&gt;
def secv_max(n, v):&lt;br /&gt;
    # verificam daca datele de intrare sunt valide&lt;br /&gt;
    for x in v:&lt;br /&gt;
        if x &amp;gt;= 1000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
    &lt;br /&gt;
    # cautam cea mai lunga secventa de elemente pare&lt;br /&gt;
    start, end, max_len = 0, 0, 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if v[i] % 2 == 0:&lt;br /&gt;
            j = i&lt;br /&gt;
            while j &amp;lt; n and v[j] % 2 == 0:&lt;br /&gt;
                j += 1&lt;br /&gt;
            if j - i &amp;gt; max_len:&lt;br /&gt;
                start, end, max_len = i, j, j - i&lt;br /&gt;
    &lt;br /&gt;
    # calculam suma elementelor secventei&lt;br /&gt;
    max_sum = sum(v[start:end])&lt;br /&gt;
    &lt;br /&gt;
    # cautam secventele cu lungime maxima si suma maxima&lt;br /&gt;
    for i in range(start, end):&lt;br /&gt;
        if v[i] % 2 == 0 and sum(v[i:end]) == max_sum:&lt;br /&gt;
            start = i&lt;br /&gt;
            break&lt;br /&gt;
    &lt;br /&gt;
    # afisam secventa gasita&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    for i in range(start, end):&lt;br /&gt;
        if v[i] % 2 == 0:&lt;br /&gt;
            print(v[i], end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # citim datele de intrare din fisier&lt;br /&gt;
    with open(&amp;quot;secvk.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        v = []&lt;br /&gt;
        for line in f:&lt;br /&gt;
            v += list(map(int, line.strip().split()))&lt;br /&gt;
    &lt;br /&gt;
    # apelam functia de rezolvare&lt;br /&gt;
    secv_max(n, v)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția secv_max(n, v) primește doi parametri: n - numărul de elemente din vectorul v, iar v - vectorul propriu-zis.&lt;br /&gt;
&lt;br /&gt;
Primul for din funcție verifică dacă valorile din vector depășesc limita superioară a intervalului acceptat și, în caz afirmativ, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; și se returnează din funcție.&lt;br /&gt;
&lt;br /&gt;
Apoi, al doilea for găsește cea mai lungă secvență de numere pare din vector și salvează indicele de început (start), indicele de sfârșit (end) și lungimea (max_len) acestei secvențe.&lt;br /&gt;
&lt;br /&gt;
Suma elementelor din secvența găsită (max_sum) se calculează prin funcția sum și se caută toate secvențele cu lungime maximă și suma maximă a elementelor.&lt;br /&gt;
&lt;br /&gt;
În final, se afișează secvența găsită și un mesaj care confirmă faptul că datele de intrare sunt corecte.&lt;br /&gt;
&lt;br /&gt;
Partea if __name__ == &amp;quot;__main__&amp;quot;: servește pentru a citi datele de intrare din fișier și pentru a apela funcția secv_max() cu aceste date.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0134_-_SecvK&amp;diff=6405</id>
		<title>0134 - SecvK</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0134_-_SecvK&amp;diff=6405"/>
		<updated>2023-05-14T19:54:06Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/134/secvk 0134 - SecvK]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un șir cu n numere naturale și un număr k.&lt;br /&gt;
Să se determine o secvență de elemente de lungime k cu suma elementelor maximă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvk.in conţine pe prima linie numerele n și k, iar pe a doua linie n numere naturale separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;și fișierul secvk.out va conţine pe prima linie k numere, reprezentând elementele secvenței cerute&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ k ≤ n ≤ 100.000&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000&lt;br /&gt;
* dacă există mai multe secvențe de lungime k cu suma maximă se va afișa prima&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvk.in&lt;br /&gt;
: 8 3&lt;br /&gt;
: 5 6 1 2 6 6 4 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: secvk.out&lt;br /&gt;
: 6 6 4&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvk.in&lt;br /&gt;
: 8 3&lt;br /&gt;
: 52748&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvk.out&lt;br /&gt;
: 2 3 4&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0134 - SecvK&lt;br /&gt;
&lt;br /&gt;
def max_sum_sequence(n, k, arr):&lt;br /&gt;
    if k &amp;gt; n:&lt;br /&gt;
        return None&lt;br /&gt;
    &lt;br /&gt;
    max_sum = -float(&#039;inf&#039;)&lt;br /&gt;
    max_seq = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(n - k + 1):&lt;br /&gt;
        seq = arr[i:i+k]&lt;br /&gt;
        seq_sum = sum(seq)&lt;br /&gt;
        &lt;br /&gt;
        if seq_sum &amp;gt; max_sum:&lt;br /&gt;
            max_sum = seq_sum&lt;br /&gt;
            max_seq = seq&lt;br /&gt;
    &lt;br /&gt;
    return max_seq&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&#039;secvk.in&#039;, &#039;r&#039;) as fin:&lt;br /&gt;
        n, k = map(int, fin.readline().split())&lt;br /&gt;
        arr = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if n != len(arr) or k &amp;gt; n or any(x &amp;gt;= 1000 for x in arr):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    seq = max_sum_sequence(n, k, arr)&lt;br /&gt;
&lt;br /&gt;
    if seq is None:&lt;br /&gt;
        print(&amp;quot;Nu exista secventa de lungime k in arr.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        with open(&#039;secvk.out&#039;, &#039;w&#039;) as fout:&lt;br /&gt;
            fout.write(&#039; &#039;.join(map(str, seq)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția `max_sum_sequence(n, k, arr)` primește ca argumente numărul de elemente din șir `n`, numărul `k` pentru lungimea secvenței și lista de numere `arr`. Funcția verifică dacă `k` este mai mare decât `n` și, în caz afirmativ, returnează `None`. Apoi, funcția găsește secvența de lungime `k` cu suma maximă din lista `arr`. Variabilele `max_sum` și `max_seq` sunt inițializate cu valori negative și lista goală, respectiv. Pentru fiecare subsecvență de lungime `k` din `arr`, se calculează suma și se compară cu `max_sum`. Dacă este mai mare, atunci valoarea sumei este actualizată, iar lista `max_seq` este setată la subsecvența curentă. La final, funcția returnează lista `max_seq`.&lt;br /&gt;
&lt;br /&gt;
Funcția `main()` începe prin citirea datelor de intrare din fișierul `secvk.in`. Apoi, se verifică dacă datele de intrare respectă restricțiile cerute și se afișează un mesaj corespunzător în cazul în care datele nu corespund. În caz contrar, se calculează secvența de lungime `k` cu suma maximă din lista `arr` folosind funcția `max_sum_sequence()`. Dacă nu există nicio secvență de lungime `k` în `arr`, se afișează un mesaj corespunzător. În caz contrar, se afișează un mesaj de confirmare și se scrie secvența găsită în fișierul `secvk.out`. Funcția `main()` este apelată doar dacă acest script este rulat direct, nu este importat ca modul în alt script, acest lucru se realizează prin instrucțiunea `if __name__ == &#039;__main__&#039;:`.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0134_-_SecvK&amp;diff=6404</id>
		<title>0134 - SecvK</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0134_-_SecvK&amp;diff=6404"/>
		<updated>2023-05-14T19:53:34Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/134/secvk 0134 - SecvK]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un șir cu n numere naturale și un număr k.&lt;br /&gt;
Să se determine o secvență de elemente de lungime k cu suma elementelor maximă.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare secvk.in conţine pe prima linie numerele n și k, iar pe a doua linie n numere naturale separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, secvk.out va conţine pe prima linie k numere, reprezentând elementele secvenței cerute&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ k ≤ n ≤ 100.000&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor fi mai mici decât 1000&lt;br /&gt;
* dacă există mai multe secvențe de lungime k cu suma maximă se va afișa prima&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvk.in&lt;br /&gt;
: 8 3&lt;br /&gt;
: 5 6 1 2 6 6 4 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct&lt;br /&gt;
: secvk.out&lt;br /&gt;
: 6 6 4&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: secvk.in&lt;br /&gt;
: 8 3&lt;br /&gt;
: 52748&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
: secvk.out&lt;br /&gt;
: 2 3 4&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0134 - SecvK&lt;br /&gt;
&lt;br /&gt;
def max_sum_sequence(n, k, arr):&lt;br /&gt;
    if k &amp;gt; n:&lt;br /&gt;
        return None&lt;br /&gt;
    &lt;br /&gt;
    max_sum = -float(&#039;inf&#039;)&lt;br /&gt;
    max_seq = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(n - k + 1):&lt;br /&gt;
        seq = arr[i:i+k]&lt;br /&gt;
        seq_sum = sum(seq)&lt;br /&gt;
        &lt;br /&gt;
        if seq_sum &amp;gt; max_sum:&lt;br /&gt;
            max_sum = seq_sum&lt;br /&gt;
            max_seq = seq&lt;br /&gt;
    &lt;br /&gt;
    return max_seq&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&#039;secvk.in&#039;, &#039;r&#039;) as fin:&lt;br /&gt;
        n, k = map(int, fin.readline().split())&lt;br /&gt;
        arr = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if n != len(arr) or k &amp;gt; n or any(x &amp;gt;= 1000 for x in arr):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    seq = max_sum_sequence(n, k, arr)&lt;br /&gt;
&lt;br /&gt;
    if seq is None:&lt;br /&gt;
        print(&amp;quot;Nu exista secventa de lungime k in arr.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        with open(&#039;secvk.out&#039;, &#039;w&#039;) as fout:&lt;br /&gt;
            fout.write(&#039; &#039;.join(map(str, seq)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicatie Rezolvare ==&lt;br /&gt;
Funcția `max_sum_sequence(n, k, arr)` primește ca argumente numărul de elemente din șir `n`, numărul `k` pentru lungimea secvenței și lista de numere `arr`. Funcția verifică dacă `k` este mai mare decât `n` și, în caz afirmativ, returnează `None`. Apoi, funcția găsește secvența de lungime `k` cu suma maximă din lista `arr`. Variabilele `max_sum` și `max_seq` sunt inițializate cu valori negative și lista goală, respectiv. Pentru fiecare subsecvență de lungime `k` din `arr`, se calculează suma și se compară cu `max_sum`. Dacă este mai mare, atunci valoarea sumei este actualizată, iar lista `max_seq` este setată la subsecvența curentă. La final, funcția returnează lista `max_seq`.&lt;br /&gt;
&lt;br /&gt;
Funcția `main()` începe prin citirea datelor de intrare din fișierul `secvk.in`. Apoi, se verifică dacă datele de intrare respectă restricțiile cerute și se afișează un mesaj corespunzător în cazul în care datele nu corespund. În caz contrar, se calculează secvența de lungime `k` cu suma maximă din lista `arr` folosind funcția `max_sum_sequence()`. Dacă nu există nicio secvență de lungime `k` în `arr`, se afișează un mesaj corespunzător. În caz contrar, se afișează un mesaj de confirmare și se scrie secvența găsită în fișierul `secvk.out`. Funcția `main()` este apelată doar dacă acest script este rulat direct, nu este importat ca modul în alt script, acest lucru se realizează prin instrucțiunea `if __name__ == &#039;__main__&#039;:`.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0518_-_SecvZero&amp;diff=6401</id>
		<title>0518 - SecvZero</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0518_-_SecvZero&amp;diff=6401"/>
		<updated>2023-05-14T19:44:59Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Explicație rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/4265/perechiab 0518 - SecvZero]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale. Determinați cea mai lungă secvență de elemente nule din vector. Dacă în vector există mai multe secvențe de elemente nule de lungime maximă se va determina cea mai din stânga.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi n numere naturale, reprezentând elementele vectorului.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039; va afișa pe ecran numărul de perechi care îndeplinesc condițiile cerute&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* cele n numere citite vor fi mai mici decât 1000&lt;br /&gt;
* indicii elementelor vectorului sunt cuprinși între 1 și n&lt;br /&gt;
* vectorul va conține cel puțin un element nul&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 10&lt;br /&gt;
: 0 1 0 0 0 5 0 0 0 2 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: 3 5&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 2&lt;br /&gt;
: 2 1 1 0 0 3 4 &lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0518 - SecvZero&lt;br /&gt;
&lt;br /&gt;
def lungime_maxima_secventa_nula(vector):&lt;br /&gt;
    n = len(vector)&lt;br /&gt;
    lungime_maxima = 0&lt;br /&gt;
    pozitie = -1&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; n:&lt;br /&gt;
        if vector[i] == 0:&lt;br /&gt;
            j = i + 1&lt;br /&gt;
            while j &amp;lt; n and vector[j] == 0:&lt;br /&gt;
                j += 1&lt;br /&gt;
            lungime_curenta = j - i&lt;br /&gt;
            if lungime_curenta &amp;gt; lungime_maxima:&lt;br /&gt;
                lungime_maxima = lungime_curenta&lt;br /&gt;
                pozitie = i&lt;br /&gt;
            i = j&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
    return lungime_maxima, pozitie&lt;br /&gt;
&lt;br /&gt;
def validare_date_intrare(n, vector):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not all(0 &amp;lt;= x &amp;lt; 1000 for x in vector):&lt;br /&gt;
        return False&lt;br /&gt;
    if not any(x == 0 for x in vector):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    vector = list(map(int, input().split()))&lt;br /&gt;
    if validare_date_intrare(n, vector):&lt;br /&gt;
        print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
        lungime, pozitie = lungime_maxima_secventa_nula(vector)&lt;br /&gt;
        print(lungime, pozitie)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
== Explicație rezolvare==&lt;br /&gt;
&lt;br /&gt;
Funcția lungime_maxima_secventa_nula primește ca parametru un vector și returnează lungimea și poziția celei mai lungi secvențe de elemente nule din vector. Pentru a face acest lucru, parcurgem vectorul și căutăm secvențe de elemente nule. Dacă găsim o secvență mai lungă decât cea găsită până acum, actualizăm lungimea maximă și poziția. Funcția folosește o buclă while pentru a permite căutarea secvențelor de elemente nule care se întind pe mai mult de un element.&lt;br /&gt;
Funcția validare_date_intrare primește ca parametri numărul de elemente și vectorul și returnează True dacă datele de intrare respectă restricțiile impuse și False altfel. În acest caz, verificăm dacă numărul de elemente este între 1 și 1000, dacă toate elementele vectorului sunt între 0 și 999 și dacă vectorul conține cel puțin un element nul.&lt;br /&gt;
În funcția if __name__ == &amp;quot;__main__&amp;quot;, întâi se citește de la tastatură un număr întreg, n, și un vector de n numere întregi, vector, separate prin spațiu.&lt;br /&gt;
Apoi se apelează funcția validare_date_intrare cu parametrii n și vector pentru a verifica dacă datele introduse sunt valide.&lt;br /&gt;
Dacă datele introduse sunt valide, se afișează mesajul &amp;quot;Datele sunt introduse corect&amp;quot;.&lt;br /&gt;
Se apelează funcția lungime_maxima_secventa_nula cu parametrul vector pentru a găsi lungimea și poziția primei secvențe nule din vector.&lt;br /&gt;
Se afișează lungimea și poziția găsite anterior.&lt;br /&gt;
Dacă datele introduse nu sunt valide, se afișează mesajul &amp;quot;Datele nu corespund restricțiilor impuse&amp;quot;.&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0516_-_SumSec1&amp;diff=6399</id>
		<title>0516 - SumSec1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0516_-_SumSec1&amp;diff=6399"/>
		<updated>2023-05-14T19:41:11Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Explicație rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: https://www.pbinfo.ro/probleme/516/sumsec1 0516 - SumSec1]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector format din n elemente, numere naturale. Calculați suma elementelor din secvența determinată de primul și ultimul element impar.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;va fișa pe ecran numărul S, reprezentând suma calculată&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1.000.000&lt;br /&gt;
* vectorul va conţine cel puțin un element impar&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:  Introduceti valoarea lui n: 8&lt;br /&gt;
: 12 10 15 6 7 10 19 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: 5 4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: Introduceti valoarea lui n: 4&lt;br /&gt;
: 2 4 6 8&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0516 - SumSec1&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, vector):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    has_odd = False&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if vecror[i] &amp;lt; 0 or vector[i] &amp;gt;= 1000000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
        if vector[i] % 2 == 1:&lt;br /&gt;
            has_odd = True&lt;br /&gt;
    &lt;br /&gt;
    if not has_odd:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_sum(n, v):&lt;br /&gt;
    start = None&lt;br /&gt;
    end = None&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if vector[i] % 2 == 1:&lt;br /&gt;
            if start is None:&lt;br /&gt;
                start = i&lt;br /&gt;
            else:&lt;br /&gt;
                end = i&lt;br /&gt;
&lt;br /&gt;
    return sum(vector[start:end+1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti valoarea lui n: &amp;quot;))&lt;br /&gt;
    vector = list(map(int, input(&amp;quot;Introduceti valorile din vector: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, vector):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    print(calculate_sum(n, vector))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație rezolvare==&lt;br /&gt;
   &lt;br /&gt;
Funcția validate_input primește patru argumente: n, vector, A și B. Această funcție are rolul de a valida datele de intrare. Verificările pe care le face includ verificarea dacă n se încadrează în intervalul [1, 1000], dacă fiecare element al vectorului vector se încadrează în intervalul [1, 1.000.000], dacă vectorul vector conține cel puțin un element impar și dacă A și B se încadrează în intervalul [1, 2.000.000.000] și dacă A este mai mic sau egal cu B. Dacă toate verificările trec, atunci funcția afișează pe ecran &amp;quot;Datele sunt introduse corect.&amp;quot; și returnează True. În caz contrar, funcția afișează pe ecran &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; și returnează False.&lt;br /&gt;
&lt;br /&gt;
Funcția sum_secventa primește trei argumente: n, vector și valid. Această funcție calculează suma elementelor din secvența determinată de primul și ultimul element impar din vectorul vector. Dacă parametrul valid este False, adică datele de intrare nu au trecut validarea, funcția afișează pe ecran &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; și returnează None. În caz contrar, funcția calculează prima și ultima poziție cu numere impare în vectorul vector, apoi calculează suma elementelor din secvența respectivă și afișează pe ecran această valoare.&lt;br /&gt;
&lt;br /&gt;
În funcția main se citesc datele de intrare, se validează cu ajutorul funcției validate_input, și se calculează suma cu ajutorul funcției sum_secventa. Dacă valoarea returnată de sum_secventa este diferită de None, adică dacă datele de intrare au trecut validarea și s-a putut calcula suma, atunci se afișează pe ecran &amp;quot;Datele sunt introduse corect.&amp;quot; și valoarea sumei. În caz contrar, se afișează doar &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0516_-_SumSec1&amp;diff=6397</id>
		<title>0516 - SumSec1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0516_-_SumSec1&amp;diff=6397"/>
		<updated>2023-05-14T19:40:00Z</updated>

		<summary type="html">&lt;p&gt;Monica Dragos: /* Rezolvare ver. 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: https://www.pbinfo.ro/probleme/516/sumsec1 0516 - SumSec1]&lt;br /&gt;
----&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Se dă un vector format din n elemente, numere naturale. Calculați suma elementelor din secvența determinată de primul și ultimul element impar.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul va citi de la tastatură numărul n, apoi cele n elemente ale vectorului.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Dacă datele sunt introduse corect, pe ecran se va afișa: &lt;br /&gt;
&#039;&#039;&#039;&amp;quot;Datele sunt introduse corect.&amp;quot;&#039;&#039;&#039;, apoi pe un rând nou &#039;&#039;&#039;va fișa pe ecran numărul S, reprezentând suma calculată&#039;&#039;&#039;, reprezentând valoarea cerută. În cazul contrar, se va afișa pe ecran: &#039;&#039;&#039;&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele vectorului vor fi mai mici decât 1.000.000&lt;br /&gt;
* vectorul va conţine cel puțin un element impar&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
:  Introduceti valoarea lui n: 8&lt;br /&gt;
: 12 10 15 6 7 10 19 14&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele sunt introduse correct.&lt;br /&gt;
: 5 4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: Introduceti valoarea lui n: 4&lt;br /&gt;
: 2 4 6 8&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Rezolvare ver. 1 ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0516 - SumSec1&lt;br /&gt;
&lt;br /&gt;
def validate_input(n, vector):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    has_odd = False&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if vecror[i] &amp;lt; 0 or vector[i] &amp;gt;= 1000000:&lt;br /&gt;
            print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
        if vector[i] % 2 == 1:&lt;br /&gt;
            has_odd = True&lt;br /&gt;
    &lt;br /&gt;
    if not has_odd:&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele sunt introduse corect.&amp;quot;)&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_sum(n, v):&lt;br /&gt;
    start = None&lt;br /&gt;
    end = None&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if vector[i] % 2 == 1:&lt;br /&gt;
            if start is None:&lt;br /&gt;
                start = i&lt;br /&gt;
            else:&lt;br /&gt;
                end = i&lt;br /&gt;
&lt;br /&gt;
    return sum(vector[start:end+1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti valoarea lui n: &amp;quot;))&lt;br /&gt;
    vector = list(map(int, input(&amp;quot;Introduceti valorile din vector: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(n, vector):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    print(calculate_sum(n, vector))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație rezolvare==&lt;br /&gt;
   &lt;br /&gt;
Funcția validate_input primește patru argumente: n, v, A și B. Această funcție are rolul de a valida datele de intrare. Verificările pe care le face includ verificarea dacă n se încadrează în intervalul [1, 1000], dacă fiecare element al vectorului v se încadrează în intervalul [1, 1.000.000], dacă vectorul v conține cel puțin un element impar și dacă A și B se încadrează în intervalul [1, 2.000.000.000] și dacă A este mai mic sau egal cu B. Dacă toate verificările trec, atunci funcția afișează pe ecran &amp;quot;Datele sunt introduse corect.&amp;quot; și returnează True. În caz contrar, funcția afișează pe ecran &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; și returnează False.&lt;br /&gt;
&lt;br /&gt;
Funcția sum_secventa primește trei argumente: n, v și valid. Această funcție calculează suma elementelor din secvența determinată de primul și ultimul element impar din vectorul v. Dacă parametrul valid este False, adică datele de intrare nu au trecut validarea, funcția afișează pe ecran &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot; și returnează None. În caz contrar, funcția calculează prima și ultima poziție cu numere impare în vectorul v, apoi calculează suma elementelor din secvența respectivă și afișează pe ecran această valoare.&lt;br /&gt;
&lt;br /&gt;
În funcția main se citesc datele de intrare, se validează cu ajutorul funcției validate_input, și se calculează suma cu ajutorul funcției sum_secventa. Dacă valoarea returnată de sum_secventa este diferită de None, adică dacă datele de intrare au trecut validarea și s-a putut calcula suma, atunci se afișează pe ecran &amp;quot;Datele sunt introduse corect.&amp;quot; și valoarea sumei. În caz contrar, se afișează doar &amp;quot;Datele nu corespund restricțiilor impuse.&amp;quot;&lt;/div&gt;</summary>
		<author><name>Monica Dragos</name></author>
	</entry>
</feed>