<?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=Bonte+Lucas+Gabriel</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=Bonte+Lucas+Gabriel"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Bonte_Lucas_Gabriel"/>
	<updated>2026-05-01T04:44:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15326&amp;diff=10427</id>
		<title>15326</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15326&amp;diff=10427"/>
		<updated>2024-12-13T18:16:36Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15326 (Andreea Bogdanovici)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele naturale a,b,c pentru care este adevărată relația &amp;lt;math&amp;gt;\frac{37}{10}=a+\frac{1}{b+\frac{1}{c+\frac{1}{3}}}&amp;lt;/math&amp;gt;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avem egalitățile &amp;lt;math&amp;gt;\frac{37}{10}=3+\frac{7}{10}=3+\frac{1/10}{7}=3+\frac{1}{1+\frac{1}{7}}=3+\frac{1}{1+\frac{1}{2+\frac{1}{3}}}&amp;lt;/math&amp;gt;. Din egalitățile precedente și din &amp;lt;math&amp;gt;3&amp;lt;\frac{37}{10}&amp;lt;4, 1&amp;lt;\frac{10}{7}&amp;lt;2, 2&amp;lt;\frac{7}{3} &amp;lt; 3&amp;lt;/math&amp;gt;, deducem a = 3, b = 1 și c = 2.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15326&amp;diff=10426</id>
		<title>15326</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15326&amp;diff=10426"/>
		<updated>2024-12-13T18:12:55Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;15326 (Bonte Lucas)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Determinați numerele naturale a,b,c pentru care este adevărată relația &amp;lt;math&amp;gt;\frac{37}{10}=a+\frac{1}{b+\frac{1}{c+\frac{1}{3}}}&amp;lt;/math&amp;gt;.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție&amp;#039;&amp;#039;&amp;#039;  Avem egalitățile &amp;lt;math&amp;gt;\frac{37}{10}=3+\frac{7}{10}=3+\frac{1/10}{7}=3+\frac{1}{1+\frac{1}{7}}=3+\frac{1}{1+\frac{1}{2+\frac{1}{3}}}&amp;lt;/math&amp;gt;. Din egalitățile precedente și din &amp;lt;math&amp;gt;3&amp;lt;\frac{37}{10}&amp;lt;4, 1&amp;lt;\frac{10}{7}&amp;lt;2, 2&amp;lt;\frac{7}{3} &amp;lt; 3&amp;lt;/math&amp;gt;, deducem a = 3, b = 1 și c = 2.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15326 (Bonte Lucas)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele naturale a,b,c pentru care este adevărată relația &amp;lt;math&amp;gt;\frac{37}{10}=a+\frac{1}{b+\frac{1}{c+\frac{1}{3}}}&amp;lt;/math&amp;gt;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Avem egalitățile &amp;lt;math&amp;gt;\frac{37}{10}=3+\frac{7}{10}=3+\frac{1/10}{7}=3+\frac{1}{1+\frac{1}{7}}=3+\frac{1}{1+\frac{1}{2+\frac{1}{3}}}&amp;lt;/math&amp;gt;. Din egalitățile precedente și din &amp;lt;math&amp;gt;3&amp;lt;\frac{37}{10}&amp;lt;4, 1&amp;lt;\frac{10}{7}&amp;lt;2, 2&amp;lt;\frac{7}{3} &amp;lt; 3&amp;lt;/math&amp;gt;, deducem a = 3, b = 1 și c = 2.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2534_-_Bogdan&amp;diff=8916</id>
		<title>2534 - Bogdan</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2534_-_Bogdan&amp;diff=8916"/>
		<updated>2024-01-03T20:37:17Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bogdan și Ionuț au fost &amp;quot;bff&amp;quot; încă din clasa &#039;&#039;&#039;V&#039;&#039;&#039;, dar acum destinele lor se cam despart…. Pentru a-l consola pe Bogdan, Ionuț i-a făcut o problema cadou. Bogdan nu vrea să-l dezamăgească pe Ionut, așa că vă cere ajutorul pentru a rezolva problema împreuna.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă un șir de &#039;&#039;&#039;n&#039;&#039;&#039; elemente, numere naturale. Problema constă în două operații:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 i val &#039;&#039;&#039;: Elementul de pe poziția &#039;&#039;&#039;i&#039;&#039;&#039; se înlocuiește cu valoarea val.&lt;br /&gt;
&#039;&#039;&#039;2 i j &#039;&#039;&#039;: Stabiliți dacă secvența &#039;&#039;&#039;[i,j]&#039;&#039;&#039;, din șirul curent, este ordonată crescător.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;bogdanin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații. Pe a treia linie a fișierului se afla numărul &#039;&#039;&#039;O&#039;&#039;&#039;, care reprezintă numărul de operații. Pe următoarele &#039;&#039;&#039;O&#039;&#039;&#039; linii se vor afla operațiile.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;bogdanout.txt&#039;&#039;&#039; va conține răspunsurile pentru operațiile de tipul &#039;&#039;&#039;2&#039;&#039;&#039;, pe linie nouă fiecare.&lt;br /&gt;
Dacă răspunsul este afirmativ, se va afișa &#039;&#039;&#039;DA&#039;&#039;&#039;, în caz contrar &#039;&#039;&#039;NU&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ O ≤ 300.000&#039;&#039;&#039;&lt;br /&gt;
*numerele fiecărui șir curent vor fi mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*Observație importantă : bff = Best Friends Forever&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bogdanin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6&lt;br /&gt;
 22 9 2003 14 8 2003&lt;br /&gt;
 4&lt;br /&gt;
 2 1 6&lt;br /&gt;
 1 1 8&lt;br /&gt;
 2 1 3&lt;br /&gt;
 2 4 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bogdanout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 NU&lt;br /&gt;
 DA&lt;br /&gt;
 NU&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bogdanin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bogdan&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bogdanout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, string,&lt;br /&gt;
             nr_o, fisier_out):  # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= nr_n &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError(&amp;quot;n nu este in intervalul [1, 100000]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= nr_o &amp;lt;= 300000):&lt;br /&gt;
        raise ValueError(&amp;quot;O nu este in intervalul [1, 300000]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for numar in string:&lt;br /&gt;
        if not (numar &amp;lt; 2000000000):  # fiecare numar trebuie sa fie mai mic decat 2.000.000.000&lt;br /&gt;
            raise ValueError(&amp;quot;Un numar din sir este mai mare sau egal cu 2.000.000.000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    fisier_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(string, exercitii, fisier_out):  # functia de rezolvare&lt;br /&gt;
    for operatie in exercitii:&lt;br /&gt;
        if operatie[0] == 1:&lt;br /&gt;
            string[operatie[1] - 1] = operatie[2]&lt;br /&gt;
        elif operatie[0] == 2:&lt;br /&gt;
            if string[operatie[1] - 1:operatie[2]] == sorted(string[operatie[1] - 1:operatie[2]]):&lt;br /&gt;
                fisier_out.write(&amp;quot;DA\n&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                fisier_out.write(&amp;quot;NU\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bogdanin.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;bogdanout.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n_str = file_in.readline().strip()  # citirea numarului ca sir de caractere&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(n_str)  # incercam sa convertim sirul de caractere in numar intreg&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            file_in.close()&lt;br /&gt;
            file_out.close()&lt;br /&gt;
            exit(0)  # iesim din program daca conversia esueaza&lt;br /&gt;
&lt;br /&gt;
        sir = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        o = int(file_in.readline())&lt;br /&gt;
        operatii = [list(map(int, file_in.readline().split())) for _ in range(o)]&lt;br /&gt;
&lt;br /&gt;
        validare(n, sir, o, file_out)  # apelul functiei de validare&lt;br /&gt;
        rezolvare(sir, operatii, file_out)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError as ve:&lt;br /&gt;
        file_out.write(str(ve))&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    file_in.close()&lt;br /&gt;
    file_out.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2217_-_Map&amp;diff=8914</id>
		<title>2217 - Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2217_-_Map&amp;diff=8914"/>
		<updated>2024-01-03T20:31:17Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Domnul Map vă pune la dispoziție un șir &#039;&#039;&#039;a[1]&#039;&#039;&#039;, &#039;&#039;&#039;a[2]&#039;&#039;&#039;, &#039;&#039;&#039;…, a[n]&#039;&#039;&#039; de numere naturale.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Pentru fiecare &#039;&#039;&#039;a[i] (i=1..n)&#039;&#039;&#039; trebuie să spuneți de câte ori apare acest element în secvența &#039;&#039;&#039;a[1], a[2], …, a[i].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;mapin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Pe linia a doua, separate prin câte un spațiu, sunt elementele șirului.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;mapout.txt&#039;&#039;&#039; se vor afișa pe primul rând &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, al &#039;&#039;&#039;i&#039;&#039;&#039;-lea număr reprezentând numărul de apariții ale lui &#039;&#039;&#039;a[i]&#039;&#039;&#039; în secvența &#039;&#039;&#039;a[1], a[2], …, a[i].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 200 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;lt;= a[i] &amp;lt;= 1018&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mapin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 7&lt;br /&gt;
 1 9876543210 1 3 3 9876543210 9876543210&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mapout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 1 1 2 1 2 2 3&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mapin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 map&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mapout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Primul element este &#039;&#039;&#039;1&#039;&#039;&#039;. Apare o singură dată până acum.&lt;br /&gt;
Al doilea element este &#039;&#039;&#039;9876543210&#039;&#039;&#039;. Și el apare pentru prima dată.&lt;br /&gt;
Al treilea element este &#039;&#039;&#039;1&#039;&#039;&#039;. Apare a doua oară.&lt;br /&gt;
Al patrulea element este &#039;&#039;&#039;3&#039;&#039;&#039;. Apare prima oară.&lt;br /&gt;
Al cincilea element este &#039;&#039;&#039;3&#039;&#039;&#039;. Apare a doua oară.&lt;br /&gt;
Al șaselea element este &#039;&#039;&#039;9876543210&#039;&#039;&#039;. Apare a doua oară.&lt;br /&gt;
Al șaptelea element este &#039;&#039;&#039;9876543210&#039;&#039;&#039;. Apare a treia oară.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, string, fisier_out):           # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= nr_n &amp;lt;= 200000):&lt;br /&gt;
        raise ValueError(&amp;quot;n nu este in intervalul [1, 200000]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for numar in string:&lt;br /&gt;
        if not (0 &amp;lt;= numar &amp;lt;= 10**18):    # fiecare numar trebuie sa fie intre 0 si 10^18&lt;br /&gt;
            raise ValueError(&amp;quot;Un numar din sir nu este in intervalul [0, 10^18]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    fisier_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(string, fisier_out):                     # functia de rezolvare&lt;br /&gt;
    aparitii = defaultdict(int)&lt;br /&gt;
    for numar in string:&lt;br /&gt;
        aparitii[numar] += 1&lt;br /&gt;
        fisier_out.write(str(aparitii[numar]) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;mapin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;mapout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n_str = file_in.readline().strip()  # citirea numarului ca sir de caractere&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(n_str)  # incercam sa convertim sirul de caractere in numar intreg&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            file_in.close()&lt;br /&gt;
            file_out.close()&lt;br /&gt;
            exit(0)  # iesim din program daca conversia esueaza&lt;br /&gt;
&lt;br /&gt;
        sir = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(n, sir, file_out)  # apelul functiei de validare&lt;br /&gt;
        rezolvare(sir, file_out)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError as ve:&lt;br /&gt;
        file_out.write(str(ve))&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    file_in.close()&lt;br /&gt;
    file_out.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4088_-_BSTQ&amp;diff=8912</id>
		<title>4088 - BSTQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4088_-_BSTQ&amp;diff=8912"/>
		<updated>2024-01-03T20:21:36Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039;, inițial vid. Asupra lui &#039;&#039;&#039;A&#039;&#039;&#039; se aplică &#039;&#039;&#039;n&#039;&#039;&#039; operații de două tipuri:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1 x&#039;&#039;&#039; – adaugă numărul &#039;&#039;&#039;x&#039;&#039;&#039; în &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2 k&#039;&#039;&#039; – dacă &#039;&#039;&#039;A&#039;&#039;&#039; ar fi ordonat crescător, care ar fi a &#039;&#039;&#039;k&#039;&#039;&#039;-a valoare?&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Să se răspundă la cele &#039;&#039;&#039;n&#039;&#039;&#039; întrebări.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;bstqin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se află câte o operație de tip &#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;bstqout.txt&#039;&#039;&#039; va conține atâtea linii câte operații de tip &#039;&#039;&#039;2&#039;&#039;&#039; sunt în fișierul de intrare.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 200.000&#039;&#039;&#039;&lt;br /&gt;
*Numerele care se adaugă în &#039;&#039;&#039;A&#039;&#039;&#039; sunt numere întregi reprezentate pe &#039;&#039;&#039;32&#039;&#039;&#039; de biți cu semn.&lt;br /&gt;
*Este garantat că la orice operație &#039;&#039;&#039;2 k&#039;&#039;&#039; valoarea lui &#039;&#039;&#039;k&#039;&#039;&#039; este mai mică sau egală decât numărul de elemente din &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
*Este garantat că numerele care se introduc în &#039;&#039;&#039;A&#039;&#039;&#039; prin operația de tip &#039;&#039;&#039;1&#039;&#039;&#039; sunt generate aleator.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstqin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 16&lt;br /&gt;
 1 7&lt;br /&gt;
 1 9&lt;br /&gt;
 1 3&lt;br /&gt;
 1 7&lt;br /&gt;
 2 3&lt;br /&gt;
 2 2&lt;br /&gt;
 1 10&lt;br /&gt;
 1 2&lt;br /&gt;
 2 4&lt;br /&gt;
 2 5&lt;br /&gt;
 1 5&lt;br /&gt;
 2 3&lt;br /&gt;
 1 8&lt;br /&gt;
 1 10&lt;br /&gt;
 1 4&lt;br /&gt;
 1 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstqout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 7&lt;br /&gt;
 7&lt;br /&gt;
 7&lt;br /&gt;
 9&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstqin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bstq&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstqout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
La prima întrebare, &#039;&#039;&#039;2 3&#039;&#039;&#039;, deja în &#039;&#039;&#039;A&#039;&#039;&#039; sunt valorile &#039;&#039;&#039;3,7,7,9&#039;&#039;&#039;, deci a treia valoare este &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
La a doua întrebare, &#039;&#039;&#039;2 2, A = 3,7,7,9&#039;&#039;&#039;, deci a doua valoare este &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
La a treia întrebare, &#039;&#039;&#039;2 4, A = 2,3,7,7,9,10&#039;&#039;&#039;, deci a patra valoare este &#039;&#039;&#039;7&#039;&#039;&#039;.&lt;br /&gt;
La a patra întrebare, &#039;&#039;&#039;2 5, A = 2,3,7,7,9,10&#039;&#039;&#039;, deci a cincea valoare este &#039;&#039;&#039;9&#039;&#039;&#039;.&lt;br /&gt;
La a cincea întrebare, &#039;&#039;&#039;2 3, A = 2,3,5,7,7,9,10&#039;&#039;&#039;, deci a treia valoare este &#039;&#039;&#039;5&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from bisect import insort_left&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, operatii):&lt;br /&gt;
    if nr_n &amp;gt; 200000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for operation in operatii:&lt;br /&gt;
        if operation[0] == 1 and (operation[1] &amp;lt; -2147483648 or operation[1] &amp;gt; 2147483647):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def process_operations(operatii, fisier_out):&lt;br /&gt;
    a = []&lt;br /&gt;
    for operation in operatii:&lt;br /&gt;
        if operation[0] == 1:&lt;br /&gt;
            insort_left(a, operation[1])&lt;br /&gt;
        elif operation[0] == 2:&lt;br /&gt;
            fisier_out.write(str(a[operation[1] - 1]) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bstqin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bstqout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        operations = [list(map(int, file_in.readline().split())) for _ in range(n)]&lt;br /&gt;
        validare(n, operations)&lt;br /&gt;
        process_operations(operations, file_out)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3010_-_Bst&amp;diff=8911</id>
		<title>3010 - Bst</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3010_-_Bst&amp;diff=8911"/>
		<updated>2024-01-03T20:12:39Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un arbore binar de căutare (&#039;&#039;&#039;BST – Binary Search Tree&#039;&#039;&#039;) este un arbore binar cu proprietatea că valoarea memorată într-un nod este mai mare decât valoarea memorată în orice nod din subarborele său stâng și este mai mică sau egală decât valoarea memorată în orice nod din subarborele său drept.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Dându-se un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, să se ordoneze crescător utilizând un &#039;&#039;&#039;BST&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;bstin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;bstout.txt&#039;&#039;&#039; va conține pe prima linie, separate prin spațiu, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere din șir, ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*Această problemă este destinată învățării arborilor de căutare, deci recomandarea este să memorați mai întâi numerele într-un &#039;&#039;&#039;BST&#039;&#039;&#039;, apoi, cu o parcurgere în inordine să afișați șirul de numere ordonat crescător&lt;br /&gt;
*Se știe că există cazuri când un &#039;&#039;&#039;BST&#039;&#039;&#039; poate avea multe nivele și în consecință complexitatea sortării să fie chiar &#039;&#039;&#039;O(n x n).&#039;&#039;&#039; Un exemplu este atunci când șirul inițial este ordonat descrescător. Dar este garantat că testele au fost generate aleator, deci numărul de nivele din arbore va fi aproximativ egal cu &#039;&#039;&#039;log2n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 10&lt;br /&gt;
 20 7 13 200 15 100 25 3 17 39&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 3 7 13 15 17 20 25 39 100 200&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bst&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bstout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, key):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.val = key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def insert(root, key):&lt;br /&gt;
    if root is None:&lt;br /&gt;
        return Node(key)&lt;br /&gt;
    else:&lt;br /&gt;
        if root.val &amp;lt; key:&lt;br /&gt;
            root.right = insert(root.right, key)&lt;br /&gt;
        else:&lt;br /&gt;
            root.left = insert(root.left, key)&lt;br /&gt;
    return root&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inorder(root, fisier_out):&lt;br /&gt;
    if root:&lt;br /&gt;
        inorder(root.left, fisier_out)&lt;br /&gt;
        fisier_out.write(str(root.val) + &amp;quot; &amp;quot;)&lt;br /&gt;
        inorder(root.right, fisier_out)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr):&lt;br /&gt;
    if len(nr) &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in nr:&lt;br /&gt;
        if numar &amp;lt; 0 or numar &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bstin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bstout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        arr = list(map(int, file_in.readline().split()))&lt;br /&gt;
        validare(arr)&lt;br /&gt;
        r = Node(arr[0])&lt;br /&gt;
        for i in range(1, n):&lt;br /&gt;
            r = insert(r, arr[i])&lt;br /&gt;
        inorder(r, file_out)&lt;br /&gt;
        file_out.write(&#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3010_-_Bst&amp;diff=8901</id>
		<title>3010 - Bst</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3010_-_Bst&amp;diff=8901"/>
		<updated>2024-01-03T17:25:31Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un arbore binar de căutare (&#039;&#039;&#039;BST – Binary Search Tree&#039;&#039;&#039;) este un arbore binar cu proprietatea că valoarea memorată într-un nod este mai mare decât valoarea memorată în orice nod din subarborele său stâng și este mai mică sau egală decât valoarea memorată în orice nod din subarborele său drept.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Dându-se un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, să se ordoneze crescător utilizând un &#039;&#039;&#039;BST&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;bstin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;bstout.txt&#039;&#039;&#039; va conține pe prima linie, separate prin spațiu, cele &#039;&#039;&#039;n&#039;&#039;&#039; numere din șir, ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*Această problemă este destinată învățării arborilor de căutare, deci recomandarea este să memorați mai întâi numerele într-un &#039;&#039;&#039;BST&#039;&#039;&#039;, apoi, cu o parcurgere în inordine să afișați șirul de numere ordonat crescător&lt;br /&gt;
*Se știe că există cazuri când un BST poate avea multe nivele și în consecință complexitatea sortării să fie chiar &#039;&#039;&#039;O(n x n).&#039;&#039;&#039; Un exemplu este atunci când șirul inițial este ordonat descrescător. Dar este garantat că testele au fost generate aleator, deci numărul de nivele din arbore va fi aproximativ egal cu &#039;&#039;&#039;log2n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
bst.in&lt;br /&gt;
&lt;br /&gt;
10&lt;br /&gt;
20 7 13 200 15 100 25 3 17 39&lt;br /&gt;
bst.out&lt;br /&gt;
&lt;br /&gt;
3 7 13 15 17 20 25 39 100 200 &lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, key):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.val = key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def insert(root, key):&lt;br /&gt;
    if root is None:&lt;br /&gt;
        return Node(key)&lt;br /&gt;
    else:&lt;br /&gt;
        if root.val &amp;lt; key:&lt;br /&gt;
            root.right = insert(root.right, key)&lt;br /&gt;
        else:&lt;br /&gt;
            root.left = insert(root.left, key)&lt;br /&gt;
    return root&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inorder(root, fisier_out):&lt;br /&gt;
    if root:&lt;br /&gt;
        inorder(root.left, fisier_out)&lt;br /&gt;
        fisier_out.write(str(root.val) + &amp;quot; &amp;quot;)&lt;br /&gt;
        inorder(root.right, fisier_out)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr):&lt;br /&gt;
    if len(nr) &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in nr:&lt;br /&gt;
        if numar &amp;lt; 0 or numar &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bstin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bstout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        arr = list(map(int, file_in.readline().split()))&lt;br /&gt;
        validare(arr)&lt;br /&gt;
        r = Node(arr[0])&lt;br /&gt;
        for i in range(1, n):&lt;br /&gt;
            r = insert(r, arr[i])&lt;br /&gt;
        inorder(r, file_out)&lt;br /&gt;
        file_out.write(&#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3526_-_String_Query&amp;diff=8897</id>
		<title>3526 - String Query</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3526_-_String_Query&amp;diff=8897"/>
		<updated>2024-01-03T17:21:32Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă un string &#039;&#039;&#039;s&#039;&#039;&#039; de lungime &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;q&#039;&#039;&#039; query-uri de forma (&#039;&#039;&#039;op&#039;&#039;&#039;, &#039;&#039;&#039;x&#039;&#039;&#039;, &#039;&#039;&#039;y&#039;&#039;&#039;), unde &#039;&#039;&#039;op&#039;&#039;&#039; poate fi &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;. Dacă &#039;&#039;&#039;op&#039;&#039;&#039; este egal cu &#039;&#039;&#039;1&#039;&#039;&#039;, atunci caracterul de pe poziția &#039;&#039;&#039;x&#039;&#039;&#039; din &#039;&#039;&#039;s&#039;&#039;&#039; va deveni &#039;&#039;&#039;y&#039;&#039;&#039;. Dacă &#039;&#039;&#039;op&#039;&#039;&#039; este egal cu &#039;&#039;&#039;0&#039;&#039;&#039;, se va afișa numărul de caractere distincte ale lui &#039;&#039;&#039;s&#039;&#039;&#039; din intervalul &#039;&#039;&#039;[x, y]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură &#039;&#039;&#039;n, s, q&#039;&#039;&#039; si cele &#039;&#039;&#039;q&#039;&#039;&#039; query-uri.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran raspunsurile la query-urile de tipul &#039;&#039;&#039;0&#039;&#039;&#039;, fiecare pe linie nouă.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 5.000.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ q ≤ 250.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;s&#039;&#039;&#039; este format doar din litere mici ale alfabetului englez&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 4&lt;br /&gt;
 aaaa&lt;br /&gt;
 4&lt;br /&gt;
 1 2 b&lt;br /&gt;
 1 3 c&lt;br /&gt;
 0 1 2&lt;br /&gt;
 0 2 4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 string&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
După primele &#039;&#039;&#039;2&#039;&#039;&#039; operatii, &#039;&#039;&#039;s&#039;&#039;&#039; = &#039;&#039;&#039;&amp;quot;abca&amp;quot;&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(nr_n, nr_q):&lt;br /&gt;
    if 1 &amp;lt;= nr_n &amp;lt;= 5000000 and 1 &amp;lt;= nr_q &amp;lt;= 250000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def procesare_query(nr_s, nr_q, intrebare):&lt;br /&gt;
    for i in range(nr_q):&lt;br /&gt;
        nr_op, nr_x, nr_y = intrebare[i]&lt;br /&gt;
        if nr_op == 1:&lt;br /&gt;
            nr_s[nr_x - 1] = nr_y&lt;br /&gt;
        elif nr_op == 0:&lt;br /&gt;
            print(len(set(nr_s[nr_x - 1:nr_y])))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti lungimea sirului: &amp;quot;))&lt;br /&gt;
        s = list(input(&amp;quot;Introduceti sirul: &amp;quot;))&lt;br /&gt;
        q = int(input(&amp;quot;Introduceti numarul de query-uri: &amp;quot;))&lt;br /&gt;
        query = []&lt;br /&gt;
        for _ in range(q):&lt;br /&gt;
            op, x, y = input(&amp;quot;Introduceti query-ul: &amp;quot;).split()&lt;br /&gt;
            x = int(x)&lt;br /&gt;
            if op == &#039;1&#039;:&lt;br /&gt;
                query.append((1, x, y))&lt;br /&gt;
            else:&lt;br /&gt;
                y = int(y)&lt;br /&gt;
                query.append((0, x, y))&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n, q):&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            procesare_query(s, q, query)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2217_-_Map&amp;diff=8896</id>
		<title>2217 - Map</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2217_-_Map&amp;diff=8896"/>
		<updated>2024-01-03T17:14:51Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: Domnul Map vă pune la dispoziție un șir a[1], a[2], …, a[n] de numere naturale.  Cerința Pentru fiecare a[i] (i=1..n) trebuie să spuneți de câte ori apare acest element în secvența a[1], a[2], …, a[i].  Date de intrare Fișierul de intrare map.in conține pe prima linie numărul n. Pe linia a doua, separate prin câte un spațiu, sunt elementele șirului.  Date de ieșire În fișierul de ieșire map.out se vor afișa pe primul rând n numere naturale, al i-lea n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Domnul Map vă pune la dispoziție un șir a[1], a[2], …, a[n] de numere naturale.&lt;br /&gt;
&lt;br /&gt;
Cerința&lt;br /&gt;
Pentru fiecare a[i] (i=1..n) trebuie să spuneți de câte ori apare acest element în secvența a[1], a[2], …, a[i].&lt;br /&gt;
&lt;br /&gt;
Date de intrare&lt;br /&gt;
Fișierul de intrare map.in conține pe prima linie numărul n. Pe linia a doua, separate prin câte un spațiu, sunt elementele șirului.&lt;br /&gt;
&lt;br /&gt;
Date de ieșire&lt;br /&gt;
În fișierul de ieșire map.out se vor afișa pe primul rând n numere naturale, al i-lea număr reprezentând numărul de apariții ale lui a[i] în secvența a[1], a[2], …, a[i].&lt;br /&gt;
&lt;br /&gt;
Restricții și precizări&lt;br /&gt;
1 ≤ n ≤ 200 000&lt;br /&gt;
0 &amp;lt;= a[i] &amp;lt;= 1018&lt;br /&gt;
Exemplu:&lt;br /&gt;
map.in&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
1 9876543210 1 3 3 9876543210 9876543210&lt;br /&gt;
map.out&lt;br /&gt;
&lt;br /&gt;
1 1 2 1 2 2 3&lt;br /&gt;
Explicație&lt;br /&gt;
Primul element este 1. Apare o singură dată până acum.&lt;br /&gt;
Al doilea element este 9876543210. Și el apare pentru prima dată.&lt;br /&gt;
Al treilea element este 1. Apare a doua oară.&lt;br /&gt;
Al patrulea element este 3. Apare prima oară.&lt;br /&gt;
Al cincilea element este 3. Apare a doua oară.&lt;br /&gt;
Al șaselea element este 9876543210. Apare a doua oară.&lt;br /&gt;
Al șaptelea element este 9876543210. Apare a treia oară.&lt;br /&gt;
&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, string, fisier_out):           # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= nr_n &amp;lt;= 200000):&lt;br /&gt;
        raise ValueError(&amp;quot;n nu este in intervalul [1, 200000]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for numar in string:&lt;br /&gt;
        if not (0 &amp;lt;= numar &amp;lt;= 10**18):    # fiecare numar trebuie sa fie intre 0 si 10^18&lt;br /&gt;
            raise ValueError(&amp;quot;Un numar din sir nu este in intervalul [0, 10^18]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    fisier_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(string, fisier_out):                     # functia de rezolvare&lt;br /&gt;
    aparitii = defaultdict(int)&lt;br /&gt;
    for numar in string:&lt;br /&gt;
        aparitii[numar] += 1&lt;br /&gt;
        fisier_out.write(str(aparitii[numar]) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;mapin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;mapout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n_str = file_in.readline().strip()  # citirea numarului ca sir de caractere&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(n_str)  # incercam sa convertim sirul de caractere in numar intreg&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            file_in.close()&lt;br /&gt;
            file_out.close()&lt;br /&gt;
            exit(0)  # iesim din program daca conversia esueaza&lt;br /&gt;
&lt;br /&gt;
        sir = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(n, sir, file_out)  # apelul functiei de validare&lt;br /&gt;
        rezolvare(sir, file_out)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError as ve:&lt;br /&gt;
        file_out.write(str(ve))&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    file_in.close()&lt;br /&gt;
    file_out.close()&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2534_-_Bogdan&amp;diff=8895</id>
		<title>2534 - Bogdan</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2534_-_Bogdan&amp;diff=8895"/>
		<updated>2024-01-03T17:08:46Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: Bogdan și Ionuț au fost &amp;quot;bff&amp;quot; încă din clasa V, dar acum destinele lor se cam despart…. Pentru a-l consola pe Bogdan, Ionuț i-a făcut o problema cadou. Bogdan nu vrea să-l dezamăgească pe Ionut, așa că vă cere ajutorul pentru a rezolva problema împreuna.  Cerința Se dă un șir de n elemente, numere naturale. Problema constă în două operații:  1 i val : Elementul de pe poziția i se înlocuiește cu valoarea val. 2 i j : Stabiliți dacă secvența [i,j], d...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Bogdan și Ionuț au fost &amp;quot;bff&amp;quot; încă din clasa V, dar acum destinele lor se cam despart…. Pentru a-l consola pe Bogdan, Ionuț i-a făcut o problema cadou. Bogdan nu vrea să-l dezamăgească pe Ionut, așa că vă cere ajutorul pentru a rezolva problema împreuna.&lt;br /&gt;
&lt;br /&gt;
Cerința&lt;br /&gt;
Se dă un șir de n elemente, numere naturale. Problema constă în două operații:&lt;br /&gt;
&lt;br /&gt;
1 i val : Elementul de pe poziția i se înlocuiește cu valoarea val.&lt;br /&gt;
2 i j : Stabiliți dacă secvența [i,j], din șirul curent, este ordonată crescător.&lt;br /&gt;
&lt;br /&gt;
Date de intrare&lt;br /&gt;
Fișierul de intrare bogdan.in conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații. Pe a treia linie a fișierului se afla numărul O, care reprezintă numărul de operații. Pe următoarele O linii se vor afla operațiile.&lt;br /&gt;
&lt;br /&gt;
Date de ieșire&lt;br /&gt;
Fișierul de ieșire bogdan.out va conține răspunsurile pentru operațiile de tipul 2, pe linie nouă fiecare.&lt;br /&gt;
Dacă răspunsul este afirmativ, se va afișa DA, în caz contrar NU.&lt;br /&gt;
&lt;br /&gt;
Restricții și precizări&lt;br /&gt;
1 ≤ n ≤ 100.000&lt;br /&gt;
1 ≤ O ≤ 300.000&lt;br /&gt;
numerele fiecărui șir curent vor fi mai mici decât 2.000.000.000&lt;br /&gt;
Observație importantă : bff = Best Friends Forever&lt;br /&gt;
Exemplu:&lt;br /&gt;
bogdan.in&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
22 9 2003 14 8 2003&lt;br /&gt;
4&lt;br /&gt;
2 1 6&lt;br /&gt;
1 1 8&lt;br /&gt;
2 1 3&lt;br /&gt;
2 4 5&lt;br /&gt;
bogdan.out&lt;br /&gt;
&lt;br /&gt;
NU&lt;br /&gt;
DA&lt;br /&gt;
NU &lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, string,&lt;br /&gt;
             nr_o, fisier_out):  # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= nr_n &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError(&amp;quot;n nu este in intervalul [1, 100000]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= nr_o &amp;lt;= 300000):&lt;br /&gt;
        raise ValueError(&amp;quot;O nu este in intervalul [1, 300000]&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for numar in string:&lt;br /&gt;
        if not (numar &amp;lt; 2000000000):  # fiecare numar trebuie sa fie mai mic decat 2.000.000.000&lt;br /&gt;
            raise ValueError(&amp;quot;Un numar din sir este mai mare sau egal cu 2.000.000.000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    fisier_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(string, exercitii, fisier_out):  # functia de rezolvare&lt;br /&gt;
    for operatie in exercitii:&lt;br /&gt;
        if operatie[0] == 1:&lt;br /&gt;
            string[operatie[1] - 1] = operatie[2]&lt;br /&gt;
        elif operatie[0] == 2:&lt;br /&gt;
            if string[operatie[1] - 1:operatie[2]] == sorted(string[operatie[1] - 1:operatie[2]]):&lt;br /&gt;
                fisier_out.write(&amp;quot;DA\n&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                fisier_out.write(&amp;quot;NU\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bogdanin.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;bogdanout.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n_str = file_in.readline().strip()  # citirea numarului ca sir de caractere&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(n_str)  # incercam sa convertim sirul de caractere in numar intreg&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            file_in.close()&lt;br /&gt;
            file_out.close()&lt;br /&gt;
            exit(0)  # iesim din program daca conversia esueaza&lt;br /&gt;
&lt;br /&gt;
        sir = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        o = int(file_in.readline())&lt;br /&gt;
        operatii = [list(map(int, file_in.readline().split())) for _ in range(o)]&lt;br /&gt;
&lt;br /&gt;
        validare(n, sir, o, file_out)  # apelul functiei de validare&lt;br /&gt;
        rezolvare(sir, operatii, file_out)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError as ve:&lt;br /&gt;
        file_out.write(str(ve))&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    file_in.close()&lt;br /&gt;
    file_out.close()&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3526_-_String_Query&amp;diff=8891</id>
		<title>3526 - String Query</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3526_-_String_Query&amp;diff=8891"/>
		<updated>2024-01-03T16:36:54Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: Cerința Se dă un string s de lungime n și q query-uri de forma (op, x, y), unde op poate fi 0 sau 1. Dacă op este egal cu 1, atunci caracterul de pe poziția x din s va deveni y. Dacă op este egal cu 0, se va afișa numărul de caractere distincte ale lui s din intervalul [x, y].  Date de intrare Programul citește de la tastatură n, s, q si cele q query-uri.  Date de ieșire Programul va afișa pe ecran raspunsurile la query-urile de tipul 0, fiecare pe linie nouă.  R...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cerința&lt;br /&gt;
Se dă un string s de lungime n și q query-uri de forma (op, x, y), unde op poate fi 0 sau 1. Dacă op este egal cu 1, atunci caracterul de pe poziția x din s va deveni y. Dacă op este egal cu 0, se va afișa numărul de caractere distincte ale lui s din intervalul [x, y].&lt;br /&gt;
&lt;br /&gt;
Date de intrare&lt;br /&gt;
Programul citește de la tastatură n, s, q si cele q query-uri.&lt;br /&gt;
&lt;br /&gt;
Date de ieșire&lt;br /&gt;
Programul va afișa pe ecran raspunsurile la query-urile de tipul 0, fiecare pe linie nouă.&lt;br /&gt;
&lt;br /&gt;
Restricții și precizări&lt;br /&gt;
1 ≤ n ≤ 5.000.000&lt;br /&gt;
1 ≤ q ≤ 250.000&lt;br /&gt;
s este format doar din litere mici ale alfabetului englez&lt;br /&gt;
Exemplu:&lt;br /&gt;
Intrare&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
aaaa&lt;br /&gt;
4&lt;br /&gt;
1 2 b&lt;br /&gt;
1 3 c&lt;br /&gt;
0 1 2&lt;br /&gt;
0 2 4&lt;br /&gt;
Ieșire&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
3&lt;br /&gt;
Explicație&lt;br /&gt;
După primele 2 operatii, s = &amp;quot;abca&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(nr_n, nr_q):&lt;br /&gt;
    if 1 &amp;lt;= nr_n &amp;lt;= 5000000 and 1 &amp;lt;= nr_q &amp;lt;= 250000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def procesare_query(nr_s, nr_q, intrebare):&lt;br /&gt;
    for i in range(nr_q):&lt;br /&gt;
        nr_op, nr_x, nr_y = intrebare[i]&lt;br /&gt;
        if nr_op == 1:&lt;br /&gt;
            nr_s[nr_x - 1] = nr_y&lt;br /&gt;
        elif nr_op == 0:&lt;br /&gt;
            print(len(set(nr_s[nr_x - 1:nr_y])))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti lungimea sirului: &amp;quot;))&lt;br /&gt;
        s = list(input(&amp;quot;Introduceti sirul: &amp;quot;))&lt;br /&gt;
        q = int(input(&amp;quot;Introduceti numarul de query-uri: &amp;quot;))&lt;br /&gt;
        query = []&lt;br /&gt;
        for _ in range(q):&lt;br /&gt;
            op, x, y = input(&amp;quot;Introduceti query-ul: &amp;quot;).split()&lt;br /&gt;
            x = int(x)&lt;br /&gt;
            if op == &#039;1&#039;:&lt;br /&gt;
                query.append((1, x, y))&lt;br /&gt;
            else:&lt;br /&gt;
                y = int(y)&lt;br /&gt;
                query.append((0, x, y))&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n, q):&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            procesare_query(s, q, query)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4088_-_BSTQ&amp;diff=8883</id>
		<title>4088 - BSTQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4088_-_BSTQ&amp;diff=8883"/>
		<updated>2024-01-03T16:10:10Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: Se consideră un șir A, inițial vid. Asupra lui A se aplică n operații de două tipuri:  1 x – adaugă numărul x în A 2 k – dacă A ar fi ordonat crescător, care ar fi a k-a valoare? Cerința Să se răspundă la cele n întrebări.  Date de intrare Fișierul de intrare bstq.in conține pe prima linie numărul n, iar pe următoarele n linii se află câte o operație de tip 1 sau 2.  Date de ieșire Fișierul de ieșire bstq.out va conține atâtea linii câte oper...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră un șir A, inițial vid. Asupra lui A se aplică n operații de două tipuri:&lt;br /&gt;
&lt;br /&gt;
1 x – adaugă numărul x în A&lt;br /&gt;
2 k – dacă A ar fi ordonat crescător, care ar fi a k-a valoare?&lt;br /&gt;
Cerința&lt;br /&gt;
Să se răspundă la cele n întrebări.&lt;br /&gt;
&lt;br /&gt;
Date de intrare&lt;br /&gt;
Fișierul de intrare bstq.in conține pe prima linie numărul n, iar pe următoarele n linii se află câte o operație de tip 1 sau 2.&lt;br /&gt;
&lt;br /&gt;
Date de ieșire&lt;br /&gt;
Fișierul de ieșire bstq.out va conține atâtea linii câte operații de tip 2 sunt în fișierul de intrare.&lt;br /&gt;
&lt;br /&gt;
Restricții și precizări&lt;br /&gt;
1 ≤ n ≤ 200.000&lt;br /&gt;
Numerele care se adaugă în A sunt numere întregi reprezentate pe 32 de biți cu semn.&lt;br /&gt;
Este garantat că la orice operație 2 k valoarea lui k este mai mică sau egală decât numărul de elemente din A.&lt;br /&gt;
Este garantat că numerele care se introduc în A prin operația de tip 1 sunt generate aleator.&lt;br /&gt;
Exemplu:&lt;br /&gt;
bstq.in&lt;br /&gt;
&lt;br /&gt;
16&lt;br /&gt;
1 7&lt;br /&gt;
1 9&lt;br /&gt;
1 3&lt;br /&gt;
1 7&lt;br /&gt;
2 3&lt;br /&gt;
2 2&lt;br /&gt;
1 10&lt;br /&gt;
1 2&lt;br /&gt;
2 4&lt;br /&gt;
2 5&lt;br /&gt;
1 5&lt;br /&gt;
2 3&lt;br /&gt;
1 8&lt;br /&gt;
1 10&lt;br /&gt;
1 4&lt;br /&gt;
1 3&lt;br /&gt;
bstq.out&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
7&lt;br /&gt;
7&lt;br /&gt;
9&lt;br /&gt;
5&lt;br /&gt;
Explicație&lt;br /&gt;
La prima întrebare, 2 3, deja în A sunt valorile 3,7,7,9, deci a treia valoare este 7.&lt;br /&gt;
La a doua întrebare, 2 2, A = 3,7,7,9, deci a doua valoare este 7.&lt;br /&gt;
La a treia întrebare, 2 4, A = 2,3,7,7,9,10, deci a patra valoare este 7.&lt;br /&gt;
La a patra întrebare, 2 5, A = 2,3,7,7,9,10, deci a cincea valoare este 9.&lt;br /&gt;
La a cincea întrebare, 2 3, A = 2,3,5,7,7,9,10, deci a treia valoare este 5.&lt;br /&gt;
&lt;br /&gt;
from bisect import insort_left&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, operatii):&lt;br /&gt;
    if nr_n &amp;gt; 200000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for operation in operatii:&lt;br /&gt;
        if operation[0] == 1 and (operation[1] &amp;lt; -2147483648 or operation[1] &amp;gt; 2147483647):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def process_operations(operatii, fisier_out):&lt;br /&gt;
    a = []&lt;br /&gt;
    for operation in operatii:&lt;br /&gt;
        if operation[0] == 1:&lt;br /&gt;
            insort_left(a, operation[1])&lt;br /&gt;
        elif operation[0] == 2:&lt;br /&gt;
            fisier_out.write(str(a[operation[1] - 1]) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bstqin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bstqout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        operations = [list(map(int, file_in.readline().split())) for _ in range(n)]&lt;br /&gt;
        validare(n, operations)&lt;br /&gt;
        process_operations(operations, file_out)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3010_-_Bst&amp;diff=8880</id>
		<title>3010 - Bst</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3010_-_Bst&amp;diff=8880"/>
		<updated>2024-01-03T16:00:56Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: Un arbore binar de căutare (BST – Binary Search Tree) este un arbore binar cu proprietatea că valoarea memorată într-un nod este mai mare decât valoarea memorată în orice nod din subarborele său stâng și este mai mică sau egală decât valoarea memorată în orice nod din subarborele său drept.  Cerința Dându-se un șir de n numere naturale, să se ordoneze crescător utilizând un BST.  Date de intrare Fișierul de intrare bst.in conține pe prima linie numă...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un arbore binar de căutare (BST – Binary Search Tree) este un arbore binar cu proprietatea că valoarea memorată într-un nod este mai mare decât valoarea memorată în orice nod din subarborele său stâng și este mai mică sau egală decât valoarea memorată în orice nod din subarborele său drept.&lt;br /&gt;
&lt;br /&gt;
Cerința&lt;br /&gt;
Dându-se un șir de n numere naturale, să se ordoneze crescător utilizând un BST.&lt;br /&gt;
&lt;br /&gt;
Date de intrare&lt;br /&gt;
Fișierul de intrare bst.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;
Date de ieșire&lt;br /&gt;
Fișierul de ieșire bst.out va conține pe prima linie, separate prin spațiu, cele n numere din șir, ordonate crescător.&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 mai mici decât 1.000.000.000&lt;br /&gt;
Această problemă este destinată învățării arborilor de căutare, deci recomandarea este să memorați mai întâi numerele într-un BST, apoi, cu o parcurgere în inordine să afișați șirul de numere ordonat crescător&lt;br /&gt;
Se știe că există cazuri când un BST poate avea multe nivele și în consecință complexitatea sortării să fie chiar O(n x n). Un exemplu este atunci când șirul inițial este ordonat descrescător. Dar este garantat că testele au fost generate aleator, deci numărul de nivele din arbore va fi aproximativ egal cu log2n.&lt;br /&gt;
Exemplu:&lt;br /&gt;
bst.in&lt;br /&gt;
&lt;br /&gt;
10&lt;br /&gt;
20 7 13 200 15 100 25 3 17 39&lt;br /&gt;
bst.out&lt;br /&gt;
&lt;br /&gt;
3 7 13 15 17 20 25 39 100 200 &lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, key):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.val = key&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def insert(root, key):&lt;br /&gt;
    if root is None:&lt;br /&gt;
        return Node(key)&lt;br /&gt;
    else:&lt;br /&gt;
        if root.val &amp;lt; key:&lt;br /&gt;
            root.right = insert(root.right, key)&lt;br /&gt;
        else:&lt;br /&gt;
            root.left = insert(root.left, key)&lt;br /&gt;
    return root&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inorder(root, fisier_out):&lt;br /&gt;
    if root:&lt;br /&gt;
        inorder(root.left, fisier_out)&lt;br /&gt;
        fisier_out.write(str(root.val) + &amp;quot; &amp;quot;)&lt;br /&gt;
        inorder(root.right, fisier_out)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr):&lt;br /&gt;
    if len(nr) &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in nr:&lt;br /&gt;
        if numar &amp;lt; 0 or numar &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bstin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bstout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        arr = list(map(int, file_in.readline().split()))&lt;br /&gt;
        validare(arr)&lt;br /&gt;
        r = Node(arr[0])&lt;br /&gt;
        for i in range(1, n):&lt;br /&gt;
            r = insert(r, arr[i])&lt;br /&gt;
        inorder(r, file_out)&lt;br /&gt;
        file_out.write(&#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0792_-_Bi_NeFrunze_1&amp;diff=8865</id>
		<title>0792 - Bi NeFrunze 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0792_-_Bi_NeFrunze_1&amp;diff=8865"/>
		<updated>2024-01-03T15:20:47Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în nodurile neterminale ale arborelui, în ordine descrescătoare.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;binefrunze1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apare valoare...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în nodurile neterminale ale arborelui, în ordine descrescătoare.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;binefrunze1in.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apare valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apare valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;binefrunze1out.txt&#039;&#039;&#039; va conține pe prima linie valorile memorate în nodurile neterminale ale arborelui, în ordine descrescătoare, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se recomandă folosirea arborilor alocați dinamic.&lt;br /&gt;
*arborele nu va avea mai mult de &#039;&#039;&#039;5000&#039;&#039;&#039; de noduri neterminale&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;binefrunze1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;binefrunze1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 67 51 48&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;binefrunze1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 binefrunze1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;binefrunze1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, data):&lt;br /&gt;
        self.data = data&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def construct_tree(data_list):&lt;br /&gt;
    data = data_list.pop(0)&lt;br /&gt;
    if data == 0:&lt;br /&gt;
        return None&lt;br /&gt;
    node = Node(data)&lt;br /&gt;
    node.left = construct_tree(data_list)&lt;br /&gt;
    node.right = construct_tree(data_list)&lt;br /&gt;
    return node&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_non_leaf_nodes(node, non_frunze):&lt;br /&gt;
    if node is None or (node.left is None and node.right is None):&lt;br /&gt;
        return&lt;br /&gt;
    non_frunze.append(node.data)&lt;br /&gt;
    get_non_leaf_nodes(node.left, non_frunze)&lt;br /&gt;
    get_non_leaf_nodes(node.right, non_frunze)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr):&lt;br /&gt;
    if len(nr) &amp;gt; 5000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for cifra in nr:&lt;br /&gt;
        if cifra &amp;lt; 0:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;binefrunze1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;binefrunze1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        numar = list(map(int, file_in.readline().split()))&lt;br /&gt;
        validare(numar)&lt;br /&gt;
        root = construct_tree(numar)&lt;br /&gt;
        non_leaf_nodes = []&lt;br /&gt;
        get_non_leaf_nodes(root, non_leaf_nodes)&lt;br /&gt;
        non_leaf_nodes.sort(reverse=True)&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, non_leaf_nodes)))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0791_-_Bi_Frunze_1&amp;diff=8862</id>
		<title>0791 - Bi Frunze 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0791_-_Bi_Frunze_1&amp;diff=8862"/>
		<updated>2024-01-03T15:08:43Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în nodurile terminale ale arborelui, în ordine crescătoare.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;bifrunze1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &amp;#039;&amp;#039;&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în nodurile terminale ale arborelui, în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;bifrunze1in.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;bifrunze1out.txt&#039;&#039;&#039; va conține pe prima linie valorile memorate în nodurile terminale ale arborelui, în ordine crescătoare, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se recomandă folosirea arborilor alocați dinamic.&lt;br /&gt;
*arborele nu va avea mai mult de &#039;&#039;&#039;5000&#039;&#039;&#039; de noduri terminale&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunze1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunze1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 11 18 24&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunze1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bifrunze1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunze1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, data):&lt;br /&gt;
        self.data = data&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def construct_tree(data_list):&lt;br /&gt;
    data = data_list.pop(0)&lt;br /&gt;
    if data == 0:&lt;br /&gt;
        return None&lt;br /&gt;
    node = Node(data)&lt;br /&gt;
    node.left = construct_tree(data_list)&lt;br /&gt;
    node.right = construct_tree(data_list)&lt;br /&gt;
    return node&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def get_leaf_nodes(node, frunze):&lt;br /&gt;
    if node is None:&lt;br /&gt;
        return&lt;br /&gt;
    if node.left is None and node.right is None:&lt;br /&gt;
        frunze.append(node.data)&lt;br /&gt;
    get_leaf_nodes(node.left, frunze)&lt;br /&gt;
    get_leaf_nodes(node.right, frunze)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr):&lt;br /&gt;
    if len(nr) &amp;gt; 5000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for cifra in nr:&lt;br /&gt;
        if cifra &amp;lt; 0:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bifrunze1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;bifrunze1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        numar = list(map(int, file_in.readline().split()))&lt;br /&gt;
        validare(numar)&lt;br /&gt;
        root = construct_tree(numar)&lt;br /&gt;
        leaf_nodes = []&lt;br /&gt;
        get_leaf_nodes(root, leaf_nodes)&lt;br /&gt;
        leaf_nodes.sort()&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, leaf_nodes)))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0755_-_Post_Ordine_1&amp;diff=8259</id>
		<title>0755 - Post Ordine 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0755_-_Post_Ordine_1&amp;diff=8259"/>
		<updated>2023-12-19T20:42:45Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în arbore în urma parcurgerii în postordine.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;postordine1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. Dacă u...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în arbore în urma parcurgerii în postordine.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;postordine1in.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;postordine1out.txt&#039;&#039;&#039; va conține pe prima linie valorile memorate în arbore în urma parcurgerii în postordine, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se recomandă folosirea arborilor alocați dinamic.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordine1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordine1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 18 24 51 11 48 67 &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordine1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 postordine1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordine1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, date):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.data = date&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def construct_tree(date, index):&lt;br /&gt;
    if index &amp;gt;= len(date) or int(date[index]) == 0:&lt;br /&gt;
        return None, index + 1&lt;br /&gt;
&lt;br /&gt;
    radacina = Node(int(date[index]))&lt;br /&gt;
    radacina.left, index = construct_tree(date, index + 1)&lt;br /&gt;
    radacina.right, index = construct_tree(date, index)&lt;br /&gt;
&lt;br /&gt;
    return radacina, index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def postordine(radacina):&lt;br /&gt;
    if radacina:&lt;br /&gt;
        postordine(radacina.left)&lt;br /&gt;
        postordine(radacina.right)&lt;br /&gt;
        file_out.write(str(radacina.data) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(date):&lt;br /&gt;
    for num in date:&lt;br /&gt;
        if not num.isdigit():&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;postordine1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;postordine1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        data = file_in.readline().split()&lt;br /&gt;
        validare(data)&lt;br /&gt;
        root, _ = construct_tree(data, 0)&lt;br /&gt;
        postordine(root)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0754_-_In_Ordine_1&amp;diff=8257</id>
		<title>0754 - In Ordine 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0754_-_In_Ordine_1&amp;diff=8257"/>
		<updated>2023-12-19T20:28:48Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în arbore în urma parcurgerii în inordine.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;inordine1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. Dacă un no...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în arbore în urma parcurgerii în inordine.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;inordine1in.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;inordine1out.txt&#039;&#039;&#039; va conține pe prima linie valorile memorate în arbore în urma parcurgerii în inordine, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se recomandă folosirea arborilor alocați dinamic.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordine1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordine1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 18 51 24 67 48 11 &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordine1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 inordine1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordine1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, date):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.data = date&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def construct_tree(date, index):&lt;br /&gt;
    if index &amp;gt;= len(date) or int(date[index]) == 0:&lt;br /&gt;
        return None, index + 1&lt;br /&gt;
&lt;br /&gt;
    radacina = Node(int(date[index]))&lt;br /&gt;
    radacina.left, index = construct_tree(date, index + 1)&lt;br /&gt;
    radacina.right, index = construct_tree(date, index)&lt;br /&gt;
&lt;br /&gt;
    return radacina, index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inordine(radacina):&lt;br /&gt;
    if radacina:&lt;br /&gt;
        inordine(radacina.left)&lt;br /&gt;
        file_out.write(str(radacina.data) + &amp;quot; &amp;quot;)&lt;br /&gt;
        inordine(radacina.right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(date):&lt;br /&gt;
    for num in date:&lt;br /&gt;
        if not num.isdigit():&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;inordine1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;inordine1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        data = file_in.readline().split()&lt;br /&gt;
        validare(data)&lt;br /&gt;
        root, _ = construct_tree(data, 0)&lt;br /&gt;
        inordine(root)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0753_-_Pre_Ordine_1&amp;diff=8256</id>
		<title>0753 - Pre Ordine 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0753_-_Pre_Ordine_1&amp;diff=8256"/>
		<updated>2023-12-19T20:15:33Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în subarborele stâng al rădăcinii în urma parcurgerii în preordine.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;preordine1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se afișeze valorile memorate în subarborele stâng al rădăcinii în urma parcurgerii în preordine.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;preordine1in.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apare apărea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;preordine1out.txt&#039;&#039;&#039; va conține pe prima linie valorile memorate în subarborele stâng al rădăcinii în urma parcurgerii în preordine, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se recomandă folosirea arborilor alocați dinamic.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordine1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordine1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 51 18 24&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordine1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 preordine1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordine1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, date):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.data = date&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def construct_tree(date, index):&lt;br /&gt;
    if index &amp;gt;= len(date) or int(date[index]) == 0:&lt;br /&gt;
        return None, index + 1&lt;br /&gt;
&lt;br /&gt;
    radacina = Node(int(date[index]))&lt;br /&gt;
    radacina.left, index = construct_tree(date, index + 1)&lt;br /&gt;
    radacina.right, index = construct_tree(date, index)&lt;br /&gt;
&lt;br /&gt;
    return radacina, index&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def preordine(radacina):&lt;br /&gt;
    if radacina:&lt;br /&gt;
        file_out.write(str(radacina.data) + &amp;quot; &amp;quot;)&lt;br /&gt;
        preordine(radacina.left)&lt;br /&gt;
        preordine(radacina.right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(date):&lt;br /&gt;
    if len(date) &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for num in date:&lt;br /&gt;
        if not num.isdigit():&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;preordine1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;preordine1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        data = file_in.readline().split()&lt;br /&gt;
        validare(data)&lt;br /&gt;
        root, _ = construct_tree(data, 0)&lt;br /&gt;
        preordine(root.left)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3503_-_Bi_Arbore_1&amp;diff=8036</id>
		<title>3503 - Bi Arbore 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3503_-_Bi_Arbore_1&amp;diff=8036"/>
		<updated>2023-12-13T18:19:15Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se determine valorile memorate în descendenții direcți ai rădăcinii arborelui.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;biarbore1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. Dac...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se determine valorile memorate în descendenții direcți ai rădăcinii arborelui.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;biarbore1in.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;biarbore1out.txt&#039;&#039;&#039; va conține pe prima linie două valori &#039;&#039;&#039;X Y&#039;&#039;&#039;, separate prin exact un spațiu; &#039;&#039;&#039;X&#039;&#039;&#039; reprezintă valoarea memorată în fiul stâng al rădăcinii, iar &#039;&#039;&#039;Y&#039;&#039;&#039; reprezintă valoarea memorată în fiul drept al rădăcinii. Dacă rădăcina nu are fiu stâng sau fiu drept, se va afișa corespunzător valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se vor citi cel mult &#039;&#039;&#039;1.111.111&#039;&#039;&#039; numere&lt;br /&gt;
*numerele din fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.111.111.111&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarbore1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarbore1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 51 48&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarbore1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 biarbore1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarbore1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, data):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.data = data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(arbori):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(arbori) &amp;gt; 1111111:   # se vor citi cel mult 1.111.111 numere&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for nod in arbori:&lt;br /&gt;
        if not nod.isdigit() or int(nod) &amp;gt;= 1111111111:    # numerele din fișierului de intrare vor fi mai mici decât 1.111.111.111&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def biarbore(arbori):                     # functia de rezolvare&lt;br /&gt;
    radacina = Node(arbori[0])&lt;br /&gt;
    radacina.left = Node(arbori[1])&lt;br /&gt;
    radacina.right = Node(arbori[8])&lt;br /&gt;
    file_out.write(f&amp;quot;{radacina.left.data} {radacina.right.data}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;biarbore1in.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;biarbore1out.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        arbore = file_in.readline().split()      # citirea arborelui se face ca sir de caractere&lt;br /&gt;
&lt;br /&gt;
        validare(arbore)                 # apelul functiei de validare&lt;br /&gt;
        biarbore(arbore)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0752_-_Bi_Arbore&amp;diff=8035</id>
		<title>0752 - Bi Arbore</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0752_-_Bi_Arbore&amp;diff=8035"/>
		<updated>2023-12-13T17:51:34Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se determine valorile memorate în descendenții direcți ai rădăcinii arborelui.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;biarborein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. Dac...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un arbore binar în care nodurile memorează numere naturale nenule. Să se determine valorile memorate în descendenții direcți ai rădăcinii arborelui.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;biarborein.txt&#039;&#039;&#039; conține pe prima linie lista valorilor memorate în nodurile arborelui, obținute în urma parcurgerii în preordine (rădăcină, stâng, drept). Dacă un nod nu are descendent stâng, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;. Dacă un nod nu are descendent drept, în listă va apărea valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;biarboreout.txt&#039;&#039;&#039; va conține pe prima linie două valori &#039;&#039;&#039;X Y&#039;&#039;&#039;, separate prin exact un spațiu; &#039;&#039;&#039;X&#039;&#039;&#039; reprezintă valoarea memorată în fiul stâng al rădăcinii, iar &#039;&#039;&#039;Y&#039;&#039;&#039; reprezintă valoarea memorată în fiul drept al rădăcinii. Dacă rădăcina nu are fiu stâng sau fiu drept, se va afișa corespunzător valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*se recomandă folosirea arborilor alocați dinamic.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarborein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 67 51 18 0 0 24 0 0 48 0 11 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarboreout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 51 48&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarborein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 biarbore&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;biarboreout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui desenat mai jos:&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, data):&lt;br /&gt;
        self.left = None&lt;br /&gt;
        self.right = None&lt;br /&gt;
        self.data = data&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(arbori):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(arbori) &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for nod in arbori:&lt;br /&gt;
        if not nod.isdigit():    # fiecare caracter trebuie sa fie cifra&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def biarbore(arbori):                     # functia de rezolvare&lt;br /&gt;
    radacina = Node(arbori[0])&lt;br /&gt;
    radacina.left = Node(arbori[1])&lt;br /&gt;
    radacina.right = Node(arbori[8])&lt;br /&gt;
    file_out.write(f&amp;quot;{radacina.left.data} {radacina.right.data}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;biarborein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;biarboreout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        arbore = file_in.readline().split()      # citirea arborelui se face ca sir de caractere&lt;br /&gt;
&lt;br /&gt;
        validare(arbore)                 # apelul functiei de validare&lt;br /&gt;
        biarbore(arbore)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0672_-_Post_Ordine&amp;diff=8033</id>
		<title>0672 - Post Ordine</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0672_-_Post_Ordine&amp;diff=8033"/>
		<updated>2023-12-13T17:11:20Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Considerăm un arbore binar cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri în care fiecare nod este numerotat de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în postordine (stâng, drept, rădăcină).  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;postordinein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii contine câte &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; numere &amp;#039;&amp;#039;&amp;#039;X st dr&amp;#039;&amp;#039;&amp;#039;; linia &amp;#039;&amp;#039;&amp;#039;i + 1&amp;#039;&amp;#039;&amp;#039; din fi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Considerăm un arbore binar cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri în care fiecare nod este numerotat de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039; și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în postordine (stâng, drept, rădăcină).&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;postordinein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii contine câte &#039;&#039;&#039;3&#039;&#039;&#039; numere &#039;&#039;&#039;X st dr&#039;&#039;&#039;; linia &#039;&#039;&#039;i + 1&#039;&#039;&#039; din fișier conține informatiile despre nodul numerotat cu &#039;&#039;&#039;i: X&#039;&#039;&#039; reprezintă valoare din nod, &#039;&#039;&#039;st&#039;&#039;&#039; reprezintă numărul de ordine al descendentului stâng sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent stâng, iar &#039;&#039;&#039;dr&#039;&#039;&#039; reprezintă numărul de ordine al descendentului drept sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent drept.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;postordineout.txt&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;n&#039;&#039;&#039; numere, separate prin exact un spațiu, reprezentând valorile din nodurile arborelui, obținute în urma parcurgerii în postordine.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*valorile din nodurile arborelui vor fi mai mici sau egale cu &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordinein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6&lt;br /&gt;
 2 3 5&lt;br /&gt;
 6 0 6&lt;br /&gt;
 1 0 0&lt;br /&gt;
 7 1 2&lt;br /&gt;
 4 0 0&lt;br /&gt;
 10 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordineout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 1 4 2 10 6 7 &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordinein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 postordine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;postordineout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui de mai jos, în care au fost marcate cu albastru valorile din noduri, iar cu roșu numerele de ordine ale nodurilor.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, noduri):&lt;br /&gt;
    if nr_n &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for node in noduri[1:]:&lt;br /&gt;
        if node.value &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def postordine(node):&lt;br /&gt;
    if node is not None:&lt;br /&gt;
        postordine(node.left)&lt;br /&gt;
        postordine(node.right)&lt;br /&gt;
        file_out.write(str(node.value) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, value, left=None, right=None):&lt;br /&gt;
        self.value = value&lt;br /&gt;
        self.left = left&lt;br /&gt;
        self.right = right&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;postordinein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;postordineout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        nodes = [None] + [Node(0) for _ in range(n)]&lt;br /&gt;
        root = None&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            X, st, dr = map(int, file_in.readline().split())&lt;br /&gt;
            nodes[i].value = X&lt;br /&gt;
            if st != 0:&lt;br /&gt;
                nodes[i].left = nodes[st]&lt;br /&gt;
            if dr != 0:&lt;br /&gt;
                nodes[i].right = nodes[dr]&lt;br /&gt;
            if i == 4:  # nodul cu valoarea 7 este pe linia 4&lt;br /&gt;
                root = nodes[i]&lt;br /&gt;
&lt;br /&gt;
        validare(n, nodes)&lt;br /&gt;
        postordine(root)&lt;br /&gt;
        file_out.close()&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0671_-_In_Ordine&amp;diff=8028</id>
		<title>0671 - In Ordine</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0671_-_In_Ordine&amp;diff=8028"/>
		<updated>2023-12-13T16:58:13Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Considerăm un arbore binar cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri în care fiecare nod este numerotat de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în inordine (stâng, rădăcină, drept).  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;inordinein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii contine câte &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; numere &amp;#039;&amp;#039;&amp;#039;X st dr&amp;#039;&amp;#039;&amp;#039;; linia &amp;#039;&amp;#039;&amp;#039;i + 1&amp;#039;&amp;#039;&amp;#039; din fișie...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Considerăm un arbore binar cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri în care fiecare nod este numerotat de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039; și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în inordine (stâng, rădăcină, drept).&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;inordinein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii contine câte &#039;&#039;&#039;3&#039;&#039;&#039; numere &#039;&#039;&#039;X st dr&#039;&#039;&#039;; linia &#039;&#039;&#039;i + 1&#039;&#039;&#039; din fișier conține informatiile despre nodul numerotat cu &#039;&#039;&#039;i: X&#039;&#039;&#039; reprezintă valoare din nod, &#039;&#039;&#039;st&#039;&#039;&#039; reprezintă numărul de ordine al descendentului stâng sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent stâng, iar &#039;&#039;&#039;dr&#039;&#039;&#039; reprezintă numărul de ordine al descendentului drept sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent drept.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;inordineout.txt&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;n&#039;&#039;&#039; numere, separate prin exact un spațiu, reprezentând valorile din nodurile arborelui, obținute în urma parcurgerii în inordine.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*valorile din nodurile arborelui vor fi mai mici sau egale cu &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordinein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6&lt;br /&gt;
 2 3 5&lt;br /&gt;
 6 0 6&lt;br /&gt;
 1 0 0&lt;br /&gt;
 7 1 2&lt;br /&gt;
 4 0 0&lt;br /&gt;
 10 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordineout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 1 2 4 7 6 10 &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordinein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 inordine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;inordineout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui de mai jos, în care au fost marcate cu albastru valorile din noduri, iar cu roșu numerele de ordine ale nodurilor.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, noduri):&lt;br /&gt;
    if nr_n &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for node in noduri[1:]:&lt;br /&gt;
        if node.value &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inordine(node):&lt;br /&gt;
    if node is not None:&lt;br /&gt;
        inordine(node.left)&lt;br /&gt;
        file_out.write(str(node.value) + &amp;quot; &amp;quot;)&lt;br /&gt;
        inordine(node.right)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, value, left=None, right=None):&lt;br /&gt;
        self.value = value&lt;br /&gt;
        self.left = left&lt;br /&gt;
        self.right = right&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;inordinein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;inordineout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())&lt;br /&gt;
        nodes = [None] + [Node(0) for _ in range(n)]&lt;br /&gt;
        root = None&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            X, st, dr = map(int, file_in.readline().split())&lt;br /&gt;
            nodes[i].value = X&lt;br /&gt;
            if st != 0:&lt;br /&gt;
                nodes[i].left = nodes[st]&lt;br /&gt;
            if dr != 0:&lt;br /&gt;
                nodes[i].right = nodes[dr]&lt;br /&gt;
            if i == 4:  # nodul cu valoarea 7 este pe linia 4&lt;br /&gt;
                root = nodes[i]&lt;br /&gt;
&lt;br /&gt;
        validare(n, nodes)&lt;br /&gt;
        inordine(root)&lt;br /&gt;
        file_out.close()&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0670_-_Pre_Ordine&amp;diff=8021</id>
		<title>0670 - Pre Ordine</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0670_-_Pre_Ordine&amp;diff=8021"/>
		<updated>2023-12-13T16:30:44Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Considerăm un arbore binar cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri în care fiecare nod este numerotat de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în preordine (rădăcină, stâng, drept).  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;preordinein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii contine câte &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; numere &amp;#039;&amp;#039;&amp;#039;X st dr&amp;#039;&amp;#039;&amp;#039;; linia &amp;#039;&amp;#039;&amp;#039;i + 1&amp;#039;&amp;#039;&amp;#039; din fiș...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Considerăm un arbore binar cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri în care fiecare nod este numerotat de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039; și conține o valoare număr natural. Să se afișeze valorile din arbore în urma parcurgerii în preordine (rădăcină, stâng, drept).&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;preordinein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii contine câte &#039;&#039;&#039;3&#039;&#039;&#039; numere &#039;&#039;&#039;X st dr&#039;&#039;&#039;; linia &#039;&#039;&#039;i + 1&#039;&#039;&#039; din fișier conține informatiile despre nodul numerotat cu &#039;&#039;&#039;i: X&#039;&#039;&#039; reprezintă valoare din nod, st reprezintă numărul de ordine al descendentului stâng sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent stâng, iar dr reprezintă numărul de ordine al descendentului drept sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent drept.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;preordineout.txt&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;n&#039;&#039;&#039; numere, separate prin exact un spațiu, reprezentând valorile din nodurile arborelui, obținute în urma parcurgerii în preordine.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*valorile din nodurile arborelui vor fi mai mici sau egale cu &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordinein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6&lt;br /&gt;
 2 3 5&lt;br /&gt;
 6 0 6&lt;br /&gt;
 1 0 0&lt;br /&gt;
 7 1 2&lt;br /&gt;
 4 0 0&lt;br /&gt;
 10 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordineout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 7 2 1 4 6 10&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordinein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 preordine&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;preordineout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui de mai jos, în care au fost marcate cu albastru valorile din noduri, iar cu roșu numerele de ordine ale nodurilor.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(n_noduri, arbori):           # functia de validare a datelor de intrare&lt;br /&gt;
    if n_noduri &amp;gt; 1000 or n_noduri &amp;lt; 1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for nod in arbori:&lt;br /&gt;
        if nod[0] &amp;gt; 1000000 or nod[0] &amp;lt; 1 or nod[1] &amp;lt; 0 or nod[2] &amp;lt; 0:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def preordine(arbori):                     # functia de rezolvare&lt;br /&gt;
    def dfs(nod):&lt;br /&gt;
        if nod == 0:&lt;br /&gt;
            return&lt;br /&gt;
        file_out.write(str(arbori[nod - 1][0]) + &amp;quot; &amp;quot;)&lt;br /&gt;
        dfs(arbori[nod - 1][1])&lt;br /&gt;
        dfs(arbori[nod - 1][2])&lt;br /&gt;
&lt;br /&gt;
    dfs(4)  # pornim de la nodul cu numarul 4, care este radacina in exemplul tau&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;preordinein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;preordineout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())      # citirea numarului de noduri&lt;br /&gt;
        arbore = [list(map(int, file_in.readline().split())) for _ in range(n)]  # citirea arborelui&lt;br /&gt;
&lt;br /&gt;
        validare(n, arbore)                 # apelul functiei de validare&lt;br /&gt;
        preordine(arbore)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0867_-_Generare2_cu_Coada&amp;diff=7959</id>
		<title>0867 - Generare2 cu Coada</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0867_-_Generare2_cu_Coada&amp;diff=7959"/>
		<updated>2023-12-12T21:22:07Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Enunțul acestei probleme este identic cu cel al problemei #Generare2 . Vă recomandăm să o rezolvați folosind o structură de date de tip coadă.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dau patru numere naturale &#039;&#039;&#039;n a x y&#039;&#039;&#039;. Să se afișeze elementele mulțimii &#039;&#039;&#039;M&#039;&#039;&#039;, cu următoarele proprietăți:&lt;br /&gt;
&lt;br /&gt;
*toate elementele lui &#039;&#039;&#039;M&#039;&#039;&#039; sunt numere naturale mai mici sau egale cu &#039;&#039;&#039;n&#039;&#039;&#039;;&lt;br /&gt;
*&#039;&#039;&#039;a&#039;&#039;&#039; se află în &#039;&#039;&#039;M&#039;&#039;&#039;;&lt;br /&gt;
*dacă &#039;&#039;&#039;b&#039;&#039;&#039; se află în &#039;&#039;&#039;M&#039;&#039;&#039;, atunci &#039;&#039;&#039;b+x&#039;&#039;&#039; și &#039;&#039;&#039;b+y&#039;&#039;&#039; se află în &#039;&#039;&#039;M&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n a x y&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran elementele mulțimii &#039;&#039;&#039;M&#039;&#039;&#039;, în ordine crescătoare, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ x , y ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;0 ≤ a ≤ 10000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 25 3 4 11&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 3 7 11 14 15 18 19 22 23 25&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 generare2 cu coada&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(nr_n, nr_a, nr_x, nr_y):    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 1 &amp;lt;= nr_n &amp;lt;= 10000 and 1 &amp;lt;= nr_x &amp;lt;= 10000 and 1 &amp;lt;= nr_y &amp;lt;= 10000 and 0 &amp;lt;= nr_a &amp;lt;= 10000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(nr_n, nr_a, nr_x, nr_y):&lt;br /&gt;
    # Creăm o listă pentru a ține evidența numerelor pe care le-am vizitat&lt;br /&gt;
    visited = [False] * (nr_n + 1)&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm coada cu numărul de start &#039;a&#039;&lt;br /&gt;
    queue = deque([nr_a])&lt;br /&gt;
&lt;br /&gt;
    # Marcăm numărul &#039;a&#039; ca vizitat&lt;br /&gt;
    visited[nr_a] = True&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem toate numerele din coadă&lt;br /&gt;
    while queue:&lt;br /&gt;
        # Scoatem numărul curent din coadă&lt;br /&gt;
        current = queue.popleft()&lt;br /&gt;
&lt;br /&gt;
        # Adăugăm &#039;x&#039; și &#039;y&#039; la numărul curent și verificăm dacă sunt mai mici sau egale cu &#039;n&#039; și dacă nu au fost vizitate încă&lt;br /&gt;
        for i in [current + nr_x, current + nr_y]:&lt;br /&gt;
            if i &amp;lt;= nr_n and not visited[i]:&lt;br /&gt;
                # Dacă sunt, le adăugăm în coadă și le marcăm ca vizitate&lt;br /&gt;
                queue.append(i)&lt;br /&gt;
                visited[i] = True&lt;br /&gt;
&lt;br /&gt;
    # Returnăm toate numerele vizitate&lt;br /&gt;
    return [i for i in range(nr_n + 1) if visited[i]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti numarul n: &amp;quot;))     # citirea numarului n&lt;br /&gt;
        a = int(input(&amp;quot;Introduceti numarul a: &amp;quot;))     # citirea numarului a&lt;br /&gt;
        x = int(input(&amp;quot;Introduceti numarul x: &amp;quot;))     # citirea numarului x&lt;br /&gt;
        y = int(input(&amp;quot;Introduceti numarul y: &amp;quot;))     # citirea numarului y&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n, a, x, y):             # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            print(*solve(n, a, x, y))                           # apelam functia de rezolvare&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4052_-_emigrare&amp;diff=7957</id>
		<title>4052 - emigrare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4052_-_emigrare&amp;diff=7957"/>
		<updated>2023-12-12T21:12:45Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Tărâmul emigranților se poate reprezenta printr-o matrice de dimensiuni &#039;&#039;&#039;n×m&#039;&#039;&#039;. O țară este formată din toate celulele care au o anumită valoare. În fiecare celulă locuiește un om. Pe tărâmul emigranților fiecare om este nemulțumit și vrea să ajungă în orice altă țară în cel mai scurt timp posibil.&lt;br /&gt;
&lt;br /&gt;
Calculați pentru fiecare celulă distanța minimă până la o celulă de valoare diferită.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Pe prima linie se află numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;. Pe a &#039;&#039;&#039;i&#039;&#039;&#039;-a dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se găsește o secvență de &#039;&#039;&#039;m&#039;&#039;&#039; numere. Al &#039;&#039;&#039;j&#039;&#039;&#039;-lea număr se notează &#039;&#039;&#039;ai,j&#039;&#039;&#039; și reprezintă țara din care face parte celula &#039;&#039;&#039;(i,j)&#039;&#039;&#039;&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Se vor afișa &#039;&#039;&#039;nm&#039;&#039;&#039; numere naturale reprezenând distanțele pentru fiecare om în parte. Pe a &#039;&#039;&#039;i&#039;&#039;&#039;-a dintre cele &#039;&#039;&#039;n&#039;&#039;&#039; linii se găsește o secvență de &#039;&#039;&#039;m&#039;&#039;&#039; numere. Al &#039;&#039;&#039;j&#039;&#039;&#039;-lea număr se notează &#039;&#039;&#039;di,j&#039;&#039;&#039; și reprezintă distanța minimă ce trebuie să o parcurgă omul din celula &#039;&#039;&#039;(i,j)&#039;&#039;&#039; pentru a ajunge în altă țară.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;2≤n,m≤10^3&#039;&#039;&#039;&lt;br /&gt;
*Se garantează că există cel puțin două țări&lt;br /&gt;
*Celulele unei țări nu sunt neapărat conectate&lt;br /&gt;
*Pentru &#039;&#039;&#039;20&#039;&#039;&#039; de puncte, &#039;&#039;&#039;n,m≤10&#039;&#039;&#039;&lt;br /&gt;
*Pentru &#039;&#039;&#039;40&#039;&#039;&#039; de puncte, &#039;&#039;&#039;n,m≤40&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 8 9 &lt;br /&gt;
 1 1 1 1 1 1 1 1 1&lt;br /&gt;
 1 1 4 4 1 3 3 3 3&lt;br /&gt;
 1 4 4 4 3 3 3 3 3&lt;br /&gt;
 1 4 4 4 3 3 3 3 3&lt;br /&gt;
 1 2 1 1 3 3 3 3 3&lt;br /&gt;
 2 2 2 1 1 3 3 3 3&lt;br /&gt;
 4 2 2 2 2 2 2 3 3&lt;br /&gt;
 4 4 2 2 2 2 2 3 3&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 2 1 0 0 1 0 0 0 0&lt;br /&gt;
 1 0 0 0 0 0 0 0 0&lt;br /&gt;
 0 0 1 0 0 1 1 1 1&lt;br /&gt;
 0 0 0 0 0 1 2 2 2&lt;br /&gt;
 0 0 0 0 0 1 1 2 3&lt;br /&gt;
 0 1 0 0 0 0 0 1 2&lt;br /&gt;
 0 0 1 0 0 0 0 0 1&lt;br /&gt;
 1 0 0 1 1 1 0 0 1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 emigrare&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Cele &#039;&#039;&#039;4&#039;&#039;&#039; țări sunt reprezentate de valorile &#039;&#039;&#039;1, 2, 3, 4.&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(nr_n, nr_m):    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 2 &amp;lt;= nr_n &amp;lt;= 10**3 and 2 &amp;lt;= nr_m &amp;lt;= 10**3:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def min_distance(nr_n, nr_m, matrice):&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
&lt;br /&gt;
    visited = [[False] * nr_m for _ in range(nr_n)]&lt;br /&gt;
    distanta = [[0] * nr_m for _ in range(nr_n)]&lt;br /&gt;
&lt;br /&gt;
    q = deque()&lt;br /&gt;
&lt;br /&gt;
    for i in range(nr_n):&lt;br /&gt;
        for j in range(nr_m):&lt;br /&gt;
            if any(matrice[i][j] != matrice[i + dx[k]][j + dy[k]] for k in range(4) if 0 &amp;lt;= i + dx[k] &amp;lt; nr_n and 0 &amp;lt;= j + dy[k] &amp;lt; nr_m):&lt;br /&gt;
                q.append((i, j))&lt;br /&gt;
                visited[i][j] = True&lt;br /&gt;
&lt;br /&gt;
    while q:&lt;br /&gt;
        x, y = q.popleft()&lt;br /&gt;
        for k in range(4):&lt;br /&gt;
            nx, ny = x + dx[k], y + dy[k]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; nr_n and 0 &amp;lt;= ny &amp;lt; nr_m and not visited[nx][ny]:&lt;br /&gt;
                distanta[nx][ny] = distanta[x][y] + 1&lt;br /&gt;
                q.append((nx, ny))&lt;br /&gt;
                visited[nx][ny] = True&lt;br /&gt;
&lt;br /&gt;
    return distanta&lt;br /&gt;
&lt;br /&gt;
# Rularea se face in felul urmator, se scrie de la tastatura 8, apoi 9, apoi toata matricea&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti numarul de linii: &amp;quot;))&lt;br /&gt;
        m = int(input(&amp;quot;Introduceti numarul de coloane: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n, m):&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            matrix = [list(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
            dist = min_distance(n, m, matrix)&lt;br /&gt;
            for row in dist:&lt;br /&gt;
                print(*row)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3959_-_MaxSecvK&amp;diff=7956</id>
		<title>3959 - MaxSecvK</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3959_-_MaxSecvK&amp;diff=7956"/>
		<updated>2023-12-12T20:53:23Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039; de &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi. Pentru fiecare subsecvență de lungimea &#039;&#039;&#039;k&#039;&#039;&#039; să se afișeze valoarea maximă.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;maxsecvkin.txt&#039;&#039;&#039; conține pe prima linie două numere naturale nenule &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi separate prin spații.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;maxsecvkout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;n–k+1&#039;&#039;&#039; numere întregi ce reprezintă valoarea maximă a tuturor secvențelor de lungime &#039;&#039;&#039;k&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ k ≤ n&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;-1.000.000.000 ≤ Ai ≤ -1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*prin secvență înțelegem elemente aflate pe poziții consecutive în șir&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;maxsecvkin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 9 3&lt;br /&gt;
 1 2 4 1 3 6 3 2 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;maxsecvkout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 4 4 4 6 6 6 5&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;maxsecvkin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 maxsecvk&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;maxsecvkout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Se vor afișa &#039;&#039;&#039;7&#039;&#039;&#039; numere.&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;1 2 4&#039;&#039;&#039; este &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;2 4 1&#039;&#039;&#039; este &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;4 1 3&#039;&#039;&#039; este &#039;&#039;&#039;4&#039;&#039;&#039;&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;1 3 6&#039;&#039;&#039; este &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;3 6 3&#039;&#039;&#039; este &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;6 3 2&#039;&#039;&#039; este &#039;&#039;&#039;6&#039;&#039;&#039;&lt;br /&gt;
Maximul secvenței &#039;&#039;&#039;3 2 5&#039;&#039;&#039; este &#039;&#039;&#039;5&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, nr_k, numere):           # functia de validare a datelor de intrare&lt;br /&gt;
    if nr_n &amp;lt; 1 or nr_n &amp;gt; 100000 or nr_k &amp;lt; 1 or nr_k &amp;gt; nr_n:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for num in numere:&lt;br /&gt;
        if num &amp;lt; -1000000000 or num &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def max_subsequence(numere, nr_k):                     # functia de rezolvare&lt;br /&gt;
    max_values = [max(numere[i:i + nr_k]) for i in range(len(numere) - nr_k + 1)]&lt;br /&gt;
    for value in max_values:&lt;br /&gt;
        file_out.write(str(value) + &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;maxsecvkin.txt&#039;, &#039;r&#039;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&#039;maxsecvkout.txt&#039;, &#039;w&#039;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, k = map(int, file_in.readline().split())&lt;br /&gt;
        numbers = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(n, k, numbers)                 # apelul functiei de validare&lt;br /&gt;
        max_subsequence(numbers, k)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2638_-_eval_exp&amp;diff=7955</id>
		<title>2638 - eval exp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2638_-_eval_exp&amp;diff=7955"/>
		<updated>2023-12-12T20:38:44Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră o expresie formată din numere naturale și operatorii &#039;&#039;&#039;+&#039;&#039;&#039;, &#039;&#039;&#039;-&#039;&#039;&#039;,&#039;&#039;&#039;*&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Să se evalueze expresia.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură expresia.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran un singur număr reprezentând valoarea expresiei.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*Lungimea expresiei va fi de cel mult &#039;&#039;&#039;50&#039;&#039;&#039; de caractere&lt;br /&gt;
*Rezultatul final precum și rezultatele intermediare se vor încadra în tipul de date &#039;&#039;&#039;long long&#039;&#039;&#039;&lt;br /&gt;
*Expresia este corectă și nu conține alte caractere în afară de cifre și operatorii &#039;&#039;&#039;+&#039;&#039;&#039;, &#039;&#039;&#039;-&#039;&#039;&#039;, &#039;&#039;&#039;*&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 234-10+21*12&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 476&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 eval exp&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(expresia):    # functia de verificare a datelor de intrare&lt;br /&gt;
    if len(expresia) &amp;lt;= 50 and all(c.isdigit() or c in [&#039;+&#039;, &#039;-&#039;, &#039;*&#039;] for c in expresia):&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def evalueaza_expresia(expresia):&lt;br /&gt;
    try:&lt;br /&gt;
        # Folosim functia eval() pentru a evalua expresia&lt;br /&gt;
        rezultat = eval(expresia)&lt;br /&gt;
        # Verificam daca rezultatul se incadreaza in tipul de date long long&lt;br /&gt;
        if -9223372036854775808 &amp;lt;= rezultat &amp;lt;= 9223372036854775807:&lt;br /&gt;
            # Returnam rezultatul&lt;br /&gt;
            return rezultat&lt;br /&gt;
        else:&lt;br /&gt;
            return &amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;&lt;br /&gt;
    except Exception as excep:&lt;br /&gt;
        # Daca apare o eroare, o returnam&lt;br /&gt;
        return str(excep)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim expresia de la tastatura&lt;br /&gt;
        expresie = input(&amp;quot;Introduceti expresia: &amp;quot;)&lt;br /&gt;
        if verificare_restrictii(expresie):             # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            # Apelam functia pentru a evalua expresia si afisam rezultatul&lt;br /&gt;
            print(&amp;quot;Rezultatul este: &amp;quot;, evalueaza_expresia(expresie))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la o eroare din cauza datelor de intrare, o tratam corespunzator&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(&amp;quot;A aparut o eroare: &amp;quot;, str(e))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1267_-_plaja&amp;diff=7758</id>
		<title>1267 - plaja</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1267_-_plaja&amp;diff=7758"/>
		<updated>2023-12-10T23:24:23Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
O plajă poate fi văzută ca o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane. Elementele matricii sunt codificate cu &#039;&#039;&#039;0&#039;&#039;&#039;, însemnând o poziție liberă, și &#039;&#039;&#039;1&#039;&#039;&#039;, însemnând o poziție ocupată. Să se afle aria celui mai mare dreptunghi liber din matricea dată.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;plajain.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte &#039;&#039;&#039;m&#039;&#039;&#039; caractere reprezentând plaja.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;plajaout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând aria maximă a unui dreptunghi liber.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n, m ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;plajain.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 5 5&lt;br /&gt;
 11111&lt;br /&gt;
 11000&lt;br /&gt;
 11100&lt;br /&gt;
 11100&lt;br /&gt;
 11110&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;plajaout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 6&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;plajain.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 plaja&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;plajaout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
1 1 1 1 1&lt;br /&gt;
1 1 0 &#039;&#039;&#039;0&#039;&#039;&#039; &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
1 1 1 &#039;&#039;&#039;0&#039;&#039;&#039; &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
1 1 1 &#039;&#039;&#039;0&#039;&#039;&#039; &#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
1 1 1 1 0&lt;br /&gt;
&lt;br /&gt;
Suprafata dreptunghiulara de aria maxima este cea ingrosata.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(matrice, n_linii, m_coloane):           # functia de validare a datelor de intrare&lt;br /&gt;
    if not matrice:&lt;br /&gt;
        raise ValueError(&amp;quot;Matricea este goala&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= n_linii &amp;lt;= 1000) or not (1 &amp;lt;= m_coloane &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;Valorile n sau m nu respecta restrictiile impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for row in matrice:&lt;br /&gt;
        if len(row) != m_coloane:&lt;br /&gt;
            raise ValueError(&amp;quot;Lungimea randului nu este egala cu m&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        for element in row:&lt;br /&gt;
            if not element.isdigit():    # fiecare caracter trebuie sa fie cifra&lt;br /&gt;
                raise ValueError(&amp;quot;Elementul matricei nu este o cifra&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def max_rectangle(matrice):                     # functia de rezolvare&lt;br /&gt;
    m_coloane = len(matrice[0])&lt;br /&gt;
    height = [0] * (m_coloane + 1)&lt;br /&gt;
    ans = 0&lt;br /&gt;
&lt;br /&gt;
    for row in matrice:&lt;br /&gt;
        for i in range(m_coloane):&lt;br /&gt;
            height[i] = height[i] + 1 if row[i] == &#039;0&#039; else 0&lt;br /&gt;
        stack = [-1]&lt;br /&gt;
        for i in range(m_coloane + 1):&lt;br /&gt;
            while height[i] &amp;lt; height[stack[-1]]:&lt;br /&gt;
                h = height[stack.pop()]&lt;br /&gt;
                w = i - 1 - stack[-1]&lt;br /&gt;
                ans = max(ans, h * w)&lt;br /&gt;
            stack.append(i)&lt;br /&gt;
    return ans&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;plajain.txt&#039;, &#039;r&#039;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&#039;plajaout.txt&#039;, &#039;w&#039;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        matrix = [list(file_in.readline().strip()) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
        validare(matrix, n, m)                 # apelul functiei de validare&lt;br /&gt;
        area = max_rectangle(matrix)     # apelul functiei de rezolvare&lt;br /&gt;
        file_out.write(str(area))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0675_-_Bi_Frunze&amp;diff=7757</id>
		<title>0675 - Bi Frunze</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0675_-_Bi_Frunze&amp;diff=7757"/>
		<updated>2023-12-10T23:00:19Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Considerăm un arbore binar cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; noduri în care fiecare nod este numerotat de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; și conține o valoare număr natural. Să se afișeze frunzele acestui arbore.  ==Date de intrare==  Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;bifrunzein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Fiecare dintre următoarele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii contine câte &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; numere &amp;#039;&amp;#039;&amp;#039;X st dr&amp;#039;&amp;#039;&amp;#039;; linia &amp;#039;&amp;#039;&amp;#039;i + 1&amp;#039;&amp;#039;&amp;#039; din fișier conține informatiile despre nodul numerotat cu &amp;#039;&amp;#039;&amp;#039;i&amp;#039;&amp;#039;&amp;#039;:...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Considerăm un arbore binar cu &#039;&#039;&#039;n&#039;&#039;&#039; noduri în care fiecare nod este numerotat de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039; și conține o valoare număr natural. Să se afișeze frunzele acestui arbore.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;bifrunzein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii contine câte &#039;&#039;&#039;3&#039;&#039;&#039; numere &#039;&#039;&#039;X st dr&#039;&#039;&#039;; linia &#039;&#039;&#039;i + 1&#039;&#039;&#039; din fișier conține informatiile despre nodul numerotat cu &#039;&#039;&#039;i&#039;&#039;&#039;: &#039;&#039;&#039;X&#039;&#039;&#039; reprezintă valoare din nod, &#039;&#039;&#039;st&#039;&#039;&#039; reprezintă numărul de ordine al descendentului stâng sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent stâng, iar &#039;&#039;&#039;dr&#039;&#039;&#039; reprezintă numărul de ordine al descendentului drept sau &#039;&#039;&#039;0&#039;&#039;&#039; dacă nodul &#039;&#039;&#039;i&#039;&#039;&#039; nu are descendent drept.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;bifrunzeout.txt&#039;&#039;&#039; va conține pe prima linie numerele de ordine ale nodurilor din arbore care sunt frunze, în ordine crescătoare, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*valorile din nodurile arborelui vor fi mai mici sau egale cu &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunzein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6&lt;br /&gt;
 2 3 5&lt;br /&gt;
 6 0 6&lt;br /&gt;
 1 0 0&lt;br /&gt;
 7 1 2&lt;br /&gt;
 4 0 0&lt;br /&gt;
 10 0 0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunzeout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 3 5 6&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunzein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 bifrunze&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bifrunzeout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(n_noduri, copac):           # functia de validare a datelor de intrare&lt;br /&gt;
    if n_noduri &amp;gt; 1000 or n_noduri &amp;lt; 1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for nod in copac:&lt;br /&gt;
        if len(nod) != 3 or not all(isinstance(i, int) for i in nod) or nod[1] &amp;gt; n_noduri or nod[2] &amp;gt; n_noduri:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def frunze(n_noduri, copac):                     # functia de rezolvare&lt;br /&gt;
    frunze_copac = []&lt;br /&gt;
    for i in range(n_noduri):&lt;br /&gt;
        if copac[i][1] == 0 and copac[i][2] == 0:&lt;br /&gt;
            frunze_copac.append(i + 1)&lt;br /&gt;
    return frunze_copac&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;bifrunzein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;bifrunzeout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())      # citirea numarului de noduri&lt;br /&gt;
        arbore = []&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            arbore.append(list(map(int, file_in.readline().split())))&lt;br /&gt;
&lt;br /&gt;
        validare(n, arbore)                 # apelul functiei de validare&lt;br /&gt;
        frunze = frunze(n, arbore)          # apelul functiei de rezolvare&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, frunze)))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Exemplul corespunde arborelui de mai jos, în care au fost marcate cu albastru valorile din noduri, iar cu roșu numerele de ordine ale nodurilor.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3277_-_Lee&amp;diff=7743</id>
		<title>3277 - Lee</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3277_-_Lee&amp;diff=7743"/>
		<updated>2023-12-10T16:38:15Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: Se consideră o matrice cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; coloane, numerotate de la &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; la &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;, care memorează doar valori &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;. Se dau de asemenea coordonatele a trei componente din această matrice.  ==Cerința==  Să se determine lungimea minimă a unui drum care pleacă din poziția &amp;#039;&amp;#039;&amp;#039;(1,1)&amp;#039;&amp;#039;&amp;#039;, trece obligatoriu prin cele trei componente date (nu contează în ce ordine) și apoi ajunge în poziția &amp;#039;&amp;#039;&amp;#039;(N, N)&amp;#039;&amp;#039;&amp;#039;, drum care trece doar prin componente ma...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră o matrice cu &#039;&#039;&#039;N&#039;&#039;&#039; linii și &#039;&#039;&#039;N&#039;&#039;&#039; coloane, numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;N&#039;&#039;&#039;, care memorează doar valori &#039;&#039;&#039;0&#039;&#039;&#039; și &#039;&#039;&#039;1&#039;&#039;&#039;. Se dau de asemenea coordonatele a trei componente din această matrice.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Să se determine lungimea minimă a unui drum care pleacă din poziția &#039;&#039;&#039;(1,1)&#039;&#039;&#039;, trece obligatoriu prin cele trei componente date (nu contează în ce ordine) și apoi ajunge în poziția &#039;&#039;&#039;(N, N)&#039;&#039;&#039;, drum care trece doar prin componente marcate cu &#039;&#039;&#039;0&#039;&#039;&#039; și învecinate pe linii și coloane. Un pas din drum constă din deplasarea dintr-un punct &#039;&#039;&#039;(i,j)&#039;&#039;&#039; într-unul din cele patru învecinate pe linie și coloană, adică într-unul din punctele &#039;&#039;&#039;(i-1,j), (i,j-1), (i+1, j), (i,j+1)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;N&#039;&#039;&#039;. Pe fiecare din următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii și &#039;&#039;&#039;N&#039;&#039;&#039; coloane este descrisă matricea binară. Pe ultimele trei linii sunt câte două numere naturale de forma &#039;&#039;&#039;x y&#039;&#039;&#039; ce descriu coordonatele în matrice (linie și coloană) ale celor trei puncte.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran un singur număr natural, care reprezintă lungimea minimă a drumului care pornește din &#039;&#039;&#039;(1, 1)&#039;&#039;&#039;, trece prin cele trei puncte date și ajunge în punctul &#039;&#039;&#039;(N, N)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;3 ≤ N ≤ 100&#039;&#039;&#039;&lt;br /&gt;
*Cele trei puncte sunt distincte, diferite de pozițiile &#039;&#039;&#039;(1,1)&#039;&#039;&#039; și &#039;&#039;&#039;(N,N)&#039;&#039;&#039; și se găsesc la poziții din matrice marcate cu &#039;&#039;&#039;0&#039;&#039;&#039;. De asemenea, la pozițiile &#039;&#039;&#039;(1,1)&#039;&#039;&#039; și &#039;&#039;&#039;(N,N)&#039;&#039;&#039; se găsește mereu valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
*Pentru datele de intrare va exista mereu soluție, adică există cel puțin un drum de la &#039;&#039;&#039;(1,1)&#039;&#039;&#039; la &#039;&#039;&#039;(N,N)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 4&lt;br /&gt;
 0 0 0 0&lt;br /&gt;
 1 0 1 1&lt;br /&gt;
 0 0 0 1&lt;br /&gt;
 1 0 0 0&lt;br /&gt;
 3 3&lt;br /&gt;
 1 4&lt;br /&gt;
 3 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 12&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 lee&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from heapq import heappop, heappush&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(n):  # functia de verificare a datelor de intrare&lt;br /&gt;
    if 3 &amp;lt;= n &amp;lt;= 100:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def distanta_minima(matrice, start, end):&lt;br /&gt;
    n = len(matrice)&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    distante = [[float(&#039;inf&#039;)] * n for _ in range(n)]&lt;br /&gt;
    distante[start[0]][start[1]] = 0&lt;br /&gt;
    heap = [(0, start)]&lt;br /&gt;
    while heap:&lt;br /&gt;
        d, (x, y) = heappop(heap)&lt;br /&gt;
        if (x, y) == end:&lt;br /&gt;
            return d&lt;br /&gt;
        for i in range(4):&lt;br /&gt;
            nx, ny = x + dx[i], y + dy[i]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; n and 0 &amp;lt;= ny &amp;lt; n and matrice[nx][ny] == 0:&lt;br /&gt;
                if d + 1 &amp;lt; distante[nx][ny]:&lt;br /&gt;
                    distante[nx][ny] = d + 1&lt;br /&gt;
                    heappush(heap, (d + 1, (nx, ny)))&lt;br /&gt;
    return float(&#039;inf&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti dimensiunea matricei (un numar natural): &amp;quot;))&lt;br /&gt;
    if not verificare_restrictii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Introduceti matricea linie cu linie (0 sau 1 separate prin spatii): &amp;quot;)&lt;br /&gt;
    matrice = [list(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
    puncte = [(0, 0)]&lt;br /&gt;
    print(&amp;quot;Introduceti coordonatele celor trei puncte (doua numere naturale separate prin spatii): &amp;quot;)&lt;br /&gt;
    for _ in range(3):&lt;br /&gt;
        x, y = map(int, input().split())&lt;br /&gt;
        puncte.append((x - 1, y - 1))&lt;br /&gt;
    puncte.append((n - 1, n - 1))&lt;br /&gt;
    distante = [[distanta_minima(matrice, puncte[i], puncte[j]) for j in range(5)] for i in range(5)]&lt;br /&gt;
    min_distanta = float(&#039;inf&#039;)&lt;br /&gt;
    for perm in permutations([1, 2, 3]):&lt;br /&gt;
        distanta = distante[0][perm[0]] + distante[perm[0]][perm[1]] + distante[perm[1]][perm[2]] + distante[perm[2]][4]&lt;br /&gt;
        min_distanta = min(min_distanta, distanta)&lt;br /&gt;
    print(&amp;quot;Lungimea minima a drumului este: &amp;quot;, min_distanta)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        rezolvare()&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Cele trei puncte sunt situate în coordonatele &#039;&#039;&#039;(3,3), (1,4), (3,1)&#039;&#039;&#039;.&lt;br /&gt;
Drumul de lungime minimă este:&lt;br /&gt;
&lt;br /&gt;
de la &#039;&#039;&#039;(1,1)&#039;&#039;&#039; la &#039;&#039;&#039;(1,4)&#039;&#039;&#039; (lungime &#039;&#039;&#039;3&#039;&#039;&#039;)&lt;br /&gt;
de la &#039;&#039;&#039;(1,4)&#039;&#039;&#039; la &#039;&#039;&#039;(3,1)&#039;&#039;&#039; (lungime &#039;&#039;&#039;5&#039;&#039;&#039;)&lt;br /&gt;
de la &#039;&#039;&#039;(3,1)&#039;&#039;&#039; la &#039;&#039;&#039;(3,3)&#039;&#039;&#039; (lungime &#039;&#039;&#039;2&#039;&#039;&#039;)&lt;br /&gt;
de la &#039;&#039;&#039;(3,3)&#039;&#039;&#039; la &#039;&#039;&#039;(4,4)&#039;&#039;&#039; (lungime &#039;&#039;&#039;2&#039;&#039;&#039;)&lt;br /&gt;
Lungime totală: &#039;&#039;&#039;3 + 5 + 2 + 2 = 12&#039;&#039;&#039;.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0868_-_Acces1&amp;diff=7673</id>
		<title>0868 - Acces1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0868_-_Acces1&amp;diff=7673"/>
		<updated>2023-12-07T18:11:19Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră o clădire de formă dreptunghiulară, împărțită în &amp;#039;&amp;#039;&amp;#039;n*m&amp;#039;&amp;#039;&amp;#039; camere, dispuse sub forma unei matrice cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; coloane. Dintr-o cameră se poate trece în oricare dintre cele &amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039; camere vecine pe linie sau pe coloană. Unele camere sunt închise, și în ele nu se poate intra deloc. Trecerea dintr-o cameră în altă cameră durează un minut.  În anumite camere se află echipe de pompieri. Pentru o intervenție cât ma...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră o clădire de formă dreptunghiulară, împărțită în &#039;&#039;&#039;n*m&#039;&#039;&#039; camere, dispuse sub forma unei matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane. Dintr-o cameră se poate trece în oricare dintre cele &#039;&#039;&#039;4&#039;&#039;&#039; camere vecine pe linie sau pe coloană. Unele camere sunt închise, și în ele nu se poate intra deloc. Trecerea dintr-o cameră în altă cameră durează un minut.&lt;br /&gt;
&lt;br /&gt;
În anumite camere se află echipe de pompieri. Pentru o intervenție cât mai rapidă în cazul unui eventual incendiu apărut în una dintre camerele clădirii, este necesar să se știe, pentru fiecare cameră care este timpul minim în care o echipă de pompieri ajunge în acea cameră.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;acces1in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;; următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii conțin câte &#039;&#039;&#039;m&#039;&#039;&#039; caractere, care pot fi:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-&#039;&#039;&#039; – reprezintă o cameră liberă&lt;br /&gt;
*&#039;&#039;&#039;#&#039;&#039;&#039; – reprezintă o cameră închisă&lt;br /&gt;
*&#039;&#039;&#039;P&#039;&#039;&#039; – reprezintă o cameră în care se găsește o echipă de pompieri&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;acces1out.txt&#039;&#039;&#039; va conține o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane, fiecare element al matricei reprezentând timpul minim necesar ca o echipă de pompieri să ajungă în camera corespunzătoare. Pentru camerele ocupate se va fișa simbolul &#039;&#039;&#039;#&#039;&#039;&#039;, iar pentru cele libere în care nu va ajunge nici o echipă se va afișa &#039;&#039;&#039;-&#039;&#039;&#039;.&lt;br /&gt;
Matricea va fi afișată linie cu linie, câte o linie a matricei pe o linie a fișierului, elementele de pe fiecare linie fiind separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n,m ≤ 1000&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;acces1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 4 6&lt;br /&gt;
 P-#-#P&lt;br /&gt;
 --##--&lt;br /&gt;
 --P---&lt;br /&gt;
 -----#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;acces1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 0 1 # - # 0 &lt;br /&gt;
 1 2 # # 2 1 &lt;br /&gt;
 2 1 0 1 2 2 &lt;br /&gt;
 3 2 1 2 3 # &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;acces1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 acces1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;acces1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(n_linii, m_coloane, matrice):&lt;br /&gt;
    if n_linii &amp;gt; 1000 or m_coloane &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        for caracter in linie:&lt;br /&gt;
            if caracter not in [&#039;-&#039;, &#039;#&#039;, &#039;P&#039;]:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bfs(n_linii, m_coloane, matrice):&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    distanta = [[-1] * m_coloane for _ in range(n_linii)]&lt;br /&gt;
    q = deque()&lt;br /&gt;
&lt;br /&gt;
    for nr_i in range(n_linii):&lt;br /&gt;
        for nr_j in range(m_coloane):&lt;br /&gt;
            if matrice[nr_i][nr_j] == &#039;P&#039;:&lt;br /&gt;
                q.append((nr_i, nr_j))&lt;br /&gt;
                distanta[nr_i][nr_j] = 0&lt;br /&gt;
&lt;br /&gt;
    while q:&lt;br /&gt;
        x, y = q.popleft()&lt;br /&gt;
        for directie in range(4):&lt;br /&gt;
            nx, ny = x + dx[directie], y + dy[directie]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; n_linii and 0 &amp;lt;= ny &amp;lt; m_coloane and matrice[nx][ny] != &#039;#&#039; and distanta[nx][ny] == -1:&lt;br /&gt;
                distanta[nx][ny] = distanta[x][y] + 1&lt;br /&gt;
                q.append((nx, ny))&lt;br /&gt;
&lt;br /&gt;
    return distanta&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;acces1in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;acces1out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        mat = [list(file_in.readline().strip()) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
        validare(n, m, mat)&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        dist = bfs(n, m, mat)&lt;br /&gt;
&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            for j in range(m):&lt;br /&gt;
                if mat[i][j] == &#039;#&#039;:&lt;br /&gt;
                    file_out.write(&#039;# &#039;)&lt;br /&gt;
                elif dist[i][j] == -1:&lt;br /&gt;
                    file_out.write(&#039;- &#039;)&lt;br /&gt;
                else:&lt;br /&gt;
                    file_out.write(str(dist[i][j]) + &#039; &#039;)&lt;br /&gt;
            file_out.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0865_-_Palat&amp;diff=7655</id>
		<title>0865 - Palat</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0865_-_Palat&amp;diff=7655"/>
		<updated>2023-12-04T21:54:06Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Ileana Cosânzeana se mărită. În consecință a dat sfoară-n țară și au venit mai mulți Feți-Frumoși, dornici să primească mâna fetei, împreună cu palatul în care locuiește. Acesta este alcătuit din &amp;#039;&amp;#039;&amp;#039;n*m&amp;#039;&amp;#039;&amp;#039; camere, dispuse sub forma unei matrice cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; coloane.  În anumite camere nu se poate intra, deoarece acolo se află zmei răi. În celelalte se poate intra; mai precis se poate trece dintr-o cameră în altă camer...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Ileana Cosânzeana se mărită. În consecință a dat sfoară-n țară și au venit mai mulți Feți-Frumoși, dornici să primească mâna fetei, împreună cu palatul în care locuiește. Acesta este alcătuit din &#039;&#039;&#039;n*m&#039;&#039;&#039; camere, dispuse sub forma unei matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane.&lt;br /&gt;
&lt;br /&gt;
În anumite camere nu se poate intra, deoarece acolo se află zmei răi. În celelalte se poate intra; mai precis se poate trece dintr-o cameră în altă cameră dacă se învecinează pe linie sau pe coloană. În una dintre camere se află Ileana Cosânzeana, iar în alte camere se afla câte un Făt-Frumos. Aceștia pot trece dintr-o cameră în alta, cu condiția să nu intre într-o cameră care conține un zmeu. Trecerea dintr-o cameră în alta a unui Făt-Frumos durează un minut.&lt;br /&gt;
&lt;br /&gt;
Alegerea celui care va primi mâna Ilenei se face pe principiul &#039;&#039;&#039;primul venit, primul servit&#039;&#039;&#039; (suntem la capitolul &#039;&#039;&#039;Coada&#039;&#039;&#039;). Mai precis, se va căsători cu Ileana Cosânzeana acel Făt Frumos care ajunge primul la ea. Dacă ajung la Ileana Cosânzeana mai mulți Feți-Frumoși în același timp, deoarece este interzisă poligamia, Ileana se va căsători cu Făt-Frumos care la început era situat cât mai jos (pe o linie cu indice cât mai mare). Dacă mai mulți Feți-Frumoși situați pe aceeași linie ajung în timp minim la Ileana, aceasta se va căsători cu cel care era cât mai la dreapta (pe o coloană cu indice cât mai mare).&lt;br /&gt;
&lt;br /&gt;
Aflați poziția inițială a lui Făt-Frumos care va primi mâna fetei.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;palatin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;, iar următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte &#039;&#039;&#039;m&#039;&#039;&#039; caractere, care pot fi:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;Z&#039;&#039;&#039; – reprezintă o cameră ocupată de un zmeu&lt;br /&gt;
*&#039;&#039;&#039;I&#039;&#039;&#039; – reprezintă camera în care se află Ileana Cosânzeana&lt;br /&gt;
*&#039;&#039;&#039;F&#039;&#039;&#039; – reprezinta o cameră în care se află un Făt-Frumos&lt;br /&gt;
*&#039;&#039;&#039;_&#039;&#039;&#039; – reprezintă o cameră liberă&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;palatout.txt&#039;&#039;&#039; va conține pe prima linie două numere &#039;&#039;&#039;i j&#039;&#039;&#039;, separate prin exact un spațiu, reprezentând coordonatele (linie coloană) ale camerei în care se afla acel Făt-Frumos care va primi mâna Ilenei.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ m ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*liniile și coloanele sunt numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;palatin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 4 5&lt;br /&gt;
 ZF_ZF&lt;br /&gt;
 _Z_Z_&lt;br /&gt;
 _I___&lt;br /&gt;
 _Z_ZF&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;palatout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 4 5&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;palatin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 palat&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;palatout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(n_linii, m_coloane, matrice):           # functia de validare a datelor de intrare&lt;br /&gt;
    if n_linii &amp;gt; 1000 or m_coloane &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        if len(linie) != m_coloane:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bfs(n_linii, m_coloane, matrice, inceput):                     # functia de rezolvare&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    q = deque([inceput])&lt;br /&gt;
    distanta = [[0] * m_coloane for _ in range(n_linii)]&lt;br /&gt;
    while q:&lt;br /&gt;
        x, y = q.popleft()&lt;br /&gt;
        for camera_i in range(4):&lt;br /&gt;
            nx, ny = x + dx[camera_i], y + dy[camera_i]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; n_linii and 0 &amp;lt;= ny &amp;lt; m_coloane and matrice[nx][ny] != &#039;Z&#039; and not distanta[nx][ny]:&lt;br /&gt;
                distanta[nx][ny] = distanta[x][y] + 1&lt;br /&gt;
                q.append((nx, ny))&lt;br /&gt;
    return distanta&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;palatin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;palatout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        mat = [list(file_in.readline().strip()) for _ in range(n)]&lt;br /&gt;
        start = None&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            for j in range(m):&lt;br /&gt;
                if mat[i][j] == &#039;I&#039;:&lt;br /&gt;
                    start = (i, j)&lt;br /&gt;
                    break&lt;br /&gt;
            if start:&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        validare(n, m, mat)                 # apelul functiei de validare&lt;br /&gt;
        dist = bfs(n, m, mat, start)        # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        min_dist = min_pos = None&lt;br /&gt;
        for i in range(n-1, -1, -1):&lt;br /&gt;
            for j in range(m-1, -1, -1):&lt;br /&gt;
                if mat[i][j] == &#039;F&#039; and (min_dist is None or dist[i][j] &amp;lt; min_dist and dist[i][j] != 0):&lt;br /&gt;
                    min_dist = dist[i][j]&lt;br /&gt;
                    min_pos = (i+1, j+1)&lt;br /&gt;
&lt;br /&gt;
        file_out.write(f&amp;quot;{min_pos[0]} {min_pos[1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
În palat se află trei Feți Frumoși. Doi dintre ei ajung la Ileana Cosânzeana în &#039;&#039;&#039;3&#039;&#039;&#039; minute, al treilea în &#039;&#039;&#039;4&#039;&#039;&#039; minute.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0883_-_Traversare&amp;diff=7641</id>
		<title>0883 - Traversare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0883_-_Traversare&amp;diff=7641"/>
		<updated>2023-12-04T17:54:40Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră harta unei suprafețe deșertice, dată sub forma unei matrice cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; coloane, formată din &amp;#039;&amp;#039;&amp;#039;n*m&amp;#039;&amp;#039;&amp;#039; zone. Fiecare zonă poate fi accesibilă sau inaccesibilă. Dintr-o zonă accesibilă se poate trece în altă zonă accesibilă învecinată cu prima pe linie sau pe coloană.  Un călător dorește să traverseze deșertul de la nord (prima linie) la sud (ultima linie). Pentru aceasta el poate sa aleagă oricare zonă accesi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră harta unei suprafețe deșertice, dată sub forma unei matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane, formată din &#039;&#039;&#039;n*m&#039;&#039;&#039; zone. Fiecare zonă poate fi accesibilă sau inaccesibilă. Dintr-o zonă accesibilă se poate trece în altă zonă accesibilă învecinată cu prima pe linie sau pe coloană.&lt;br /&gt;
&lt;br /&gt;
Un călător dorește să traverseze deșertul de la nord (prima linie) la sud (ultima linie). Pentru aceasta el poate sa aleagă oricare zonă accesibilă de pe prima line și dorește să ajungă pe ultima linie cu număr minim de pași.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;traversarein.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;. Următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii conțin câte &#039;&#039;&#039;m&#039;&#039;&#039; valori &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;, separate prin câte un spațiu. Valoarea &#039;&#039;&#039;0&#039;&#039;&#039; reprezintă o zonă accesibilă, iar valoarea &#039;&#039;&#039;1&#039;&#039;&#039; reprezintă o zonă inaccesibilă.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;traversareout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând numărul minim de pași necesari pentru traversare.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n, m ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*în traversarea deșertului un pas este trecerea dintr-o zonă accesibilă în altă zonă accesibilă învecinată cu prima&lt;br /&gt;
*la determinarea numărului de pași se numără și primul pas (intrarea în matrice)&lt;br /&gt;
*pentru toate datele de test este posibilă traversarea deșertului&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;traversarein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6 9&lt;br /&gt;
 1 1 0 0 1 1 1 0 0 &lt;br /&gt;
 0 0 1 0 1 0 1 1 0 &lt;br /&gt;
 1 1 0 0 0 0 0 0 0 &lt;br /&gt;
 1 0 0 0 1 0 0 0 1 &lt;br /&gt;
 1 0 1 1 0 1 0 0 0 &lt;br /&gt;
 1 0 0 0 0 0 0 1 0 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;traversareout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 8&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;traversarein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 traversare&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;traversareout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citire_matrice(n_linii, fisier):&lt;br /&gt;
    matrix = []&lt;br /&gt;
    for i in range(n_linii):&lt;br /&gt;
        linie = list(map(int, fisier.readline().split()))&lt;br /&gt;
        matrix.append(linie)&lt;br /&gt;
    return matrix&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_matrice(matrix, n_linii, m_coloane, fisier_out):&lt;br /&gt;
    if n_linii &amp;gt; 1000 or m_coloane &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for linie in matrix:&lt;br /&gt;
        for valoare in linie:&lt;br /&gt;
            if valoare not in [0, 1]:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
    fisier_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def traversare_desert(matrix, n_linii, m_coloane):&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    distanta = [[float(&#039;inf&#039;)] * m_coloane for _ in range(n_linii)]&lt;br /&gt;
    q = deque()&lt;br /&gt;
&lt;br /&gt;
    for j in range(m_coloane):&lt;br /&gt;
        if matrix[0][j] == 0:&lt;br /&gt;
            distanta[0][j] = 1&lt;br /&gt;
            q.append((0, j))&lt;br /&gt;
&lt;br /&gt;
    while q:&lt;br /&gt;
        x, y = q.popleft()&lt;br /&gt;
        for d in range(4):&lt;br /&gt;
            nx, ny = x + dx[d], y + dy[d]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; n_linii and 0 &amp;lt;= ny &amp;lt; m_coloane and matrix[nx][ny] == 0:&lt;br /&gt;
                if distanta[nx][ny] &amp;gt; distanta[x][y] + 1:&lt;br /&gt;
                    distanta[nx][ny] = distanta[x][y] + 1&lt;br /&gt;
                    q.append((nx, ny))&lt;br /&gt;
&lt;br /&gt;
    return min(distanta[-1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;traversarein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    file_out = open(&amp;quot;traversareout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        matrice = citire_matrice(n, file_in)  # modificarea este aici&lt;br /&gt;
        validare_matrice(matrice, n, m, file_out)&lt;br /&gt;
        rezultat = traversare_desert(matrice, n, m)&lt;br /&gt;
        file_out.write(str(rezultat))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
O traversare cu 8 pași a deșertului este următoarea:&lt;br /&gt;
&lt;br /&gt;
 1	1	0	0	1	1	1	0	&#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 0	0	1	0	1	0	1	1	&#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 1	1	0	0	0	0	0	&#039;&#039;&#039;0&#039;&#039;&#039;	&#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 1	0	0	0	1	0	0	&#039;&#039;&#039;0&#039;&#039;&#039;	1&lt;br /&gt;
 1	0	1	1	0	1	0	&#039;&#039;&#039;0&#039;&#039;&#039;	&#039;&#039;&#039;0&#039;&#039;&#039;&lt;br /&gt;
 1	0	0	0	0	0	0	1	&#039;&#039;&#039;0&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0866_-_Acces&amp;diff=7604</id>
		<title>0866 - Acces</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0866_-_Acces&amp;diff=7604"/>
		<updated>2023-12-03T22:11:28Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se consideră o clădire de formă dreptunghiulară, împărțită în &amp;#039;&amp;#039;&amp;#039;n*m&amp;#039;&amp;#039;&amp;#039; camere, dispuse sub forma unei matrice cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; coloane. Dintr-o cameră se poate trece în oricare dintre cele &amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039; camere vecine pe linie sau pe coloană. Unele camere sunt închise, și în ele nu se poate intra deloc. Trecerea dintr-o cameră în altă cameră durează un minut.  În una dintre camere se află proprietarul clădirii, care dorește să afle...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră o clădire de formă dreptunghiulară, împărțită în &#039;&#039;&#039;n*m&#039;&#039;&#039; camere, dispuse sub forma unei matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane. Dintr-o cameră se poate trece în oricare dintre cele &#039;&#039;&#039;4&#039;&#039;&#039; camere vecine pe linie sau pe coloană. Unele camere sunt închise, și în ele nu se poate intra deloc. Trecerea dintr-o cameră în altă cameră durează un minut.&lt;br /&gt;
&lt;br /&gt;
În una dintre camere se află proprietarul clădirii, care dorește să afle, pentru fiecare dintre camere care este timpul minim necesar pentru a ajunge în acea cameră.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;accesin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;; următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii conțin câte &#039;&#039;&#039;m&#039;&#039;&#039; caractere, care pot fi:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;-&#039;&#039;&#039; – reprezintă o cameră liberă&lt;br /&gt;
*&#039;&#039;&#039;#&#039;&#039;&#039; – reprezintă o cameră închisă&lt;br /&gt;
*&#039;&#039;&#039;P&#039;&#039;&#039; – reprezintă camera proprietarului, care se consideră liberă&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;accesout.txt&#039;&#039;&#039; va conține o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane, elementele matricei reprezentând timpul minim necesar ca proprietarul să ajungă în camere clădirii. Pentru camerele ocupate și pentru camerele libere în care nu se poate ajunge timpul necesar va fi &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
Matricea va fi afișată linie cu linie, câte o linie a matricei pe o linie a fișierului, elementele de pe fiecare linie fiind separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n,m ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;accesin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 4 6&lt;br /&gt;
 --#-#-&lt;br /&gt;
 --##--&lt;br /&gt;
 --P---&lt;br /&gt;
 -----#&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;accesout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 4 3 -1 -1 -1 5 &lt;br /&gt;
 3 2 -1 -1 3 4 &lt;br /&gt;
 2 1 0 1 2 3 &lt;br /&gt;
 3 2 1 2 3 -1 &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;accesin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 acces&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;accesout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(n_linii, m_coloane, matrice):  # functia de validare a datelor de intrare&lt;br /&gt;
    if n_linii &amp;gt; 1000 or m_coloane &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        if len(linie) != m_coloane:  # fiecare linie trebuie sa aiba lungimea m&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def acces(nr, nc, matrice):  # functia de rezolvare&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    dist = [[-1]*nc for _ in range(nr)]&lt;br /&gt;
    q = deque()&lt;br /&gt;
&lt;br /&gt;
    for i in range(nr):&lt;br /&gt;
        for j in range(nc):&lt;br /&gt;
            if matrice[i][j] == &#039;P&#039;:&lt;br /&gt;
                q.append((i, j))&lt;br /&gt;
                dist[i][j] = 0&lt;br /&gt;
&lt;br /&gt;
    while q:&lt;br /&gt;
        x, y = q.popleft()&lt;br /&gt;
        for d in range(4):&lt;br /&gt;
            nx, ny = x + dx[d], y + dy[d]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; nr and 0 &amp;lt;= ny &amp;lt; nc and matrice[nx][ny] != &#039;#&#039; and dist[nx][ny] == -1:&lt;br /&gt;
                dist[nx][ny] = dist[x][y] + 1&lt;br /&gt;
                q.append((nx, ny))&lt;br /&gt;
&lt;br /&gt;
    for i in range(nr):&lt;br /&gt;
        for j in range(nc):&lt;br /&gt;
            file_out.write(str(dist[i][j]) + &#039; &#039;)&lt;br /&gt;
        file_out.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;accesin.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;accesout.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, file_in.readline().split())  # citirea numarului de linii si coloane&lt;br /&gt;
        mat = [list(file_in.readline().strip()) for _ in range(n)]  # citirea matricei&lt;br /&gt;
&lt;br /&gt;
        validare(n, m, mat)  # apelul functiei de validare&lt;br /&gt;
        acces(n, m, mat)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2733_-_nrapp&amp;diff=7521</id>
		<title>2733 - nrapp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2733_-_nrapp&amp;diff=7521"/>
		<updated>2023-11-29T18:13:13Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;N&#039;&#039;&#039; si un șir &#039;&#039;&#039;v&#039;&#039;&#039; de &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Sa se răspundă la &#039;&#039;&#039;Q&#039;&#039;&#039; întrebări de tipul:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;D y&#039;&#039;&#039;: Care este cea mai mică poziție &#039;&#039;&#039;x&#039;&#039;&#039;, unde &#039;&#039;&#039;x&#039;&#039;&#039; &amp;gt; &#039;&#039;&#039;y&#039;&#039;&#039;, pentru care &#039;&#039;&#039;v[x] &amp;lt; v[y]&#039;&#039;&#039;? Dacă nu există o astfel de poziție, răspunsul acestei întrebări va fi &#039;&#039;&#039;N + 1&#039;&#039;&#039;.&lt;br /&gt;
&#039;&#039;&#039;S y&#039;&#039;&#039;: Care este cea mai mare poziție &#039;&#039;&#039;x&#039;&#039;&#039;, unde &#039;&#039;&#039;x&#039;&#039;&#039; &amp;lt; &#039;&#039;&#039;y&#039;&#039;&#039;, pentru care &#039;&#039;&#039;v[x] &amp;lt; v[y]&#039;&#039;&#039;? Dacă nu există o astfel de poziție, răspunsul acestei întrebări va fi &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;nrappin.txt&#039;&#039;&#039; conține pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale separate prin spații. A treia linie va conține numărul natural nenul &#039;&#039;&#039;Q&#039;&#039;&#039; și apoi &#039;&#039;&#039;Q&#039;&#039;&#039; întrebări precum cele descrise anterior.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;nrappout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;Q&#039;&#039;&#039; linii, anume răspunsul pentru fiecare întrebare în parte.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ N ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ v[i] ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;nrappin.txt&lt;br /&gt;
&lt;br /&gt;
 8&lt;br /&gt;
 1 3 6 5 2 1 9 6&lt;br /&gt;
 8&lt;br /&gt;
 S 1&lt;br /&gt;
 D 2&lt;br /&gt;
 D 3&lt;br /&gt;
 S 4&lt;br /&gt;
 S 5&lt;br /&gt;
 D 6&lt;br /&gt;
 D 7&lt;br /&gt;
 D 8&lt;br /&gt;
&lt;br /&gt;
;nrappout.txt&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 0&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 9&lt;br /&gt;
 8&lt;br /&gt;
 9&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;nrappin.txt&lt;br /&gt;
&lt;br /&gt;
 nrapp&lt;br /&gt;
&lt;br /&gt;
;nrappout.txt&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(n, sir_v, q, intrebari, file_output):           # functia de validare a datelor de intrare&lt;br /&gt;
    if not 1 &amp;lt;= n &amp;lt;= 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for val in sir_v:&lt;br /&gt;
        if not 1 &amp;lt;= val &amp;lt;= 1000000:    # fiecare element trebuie sa fie numar intreg intre 1 si 1.000.000&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    if q &amp;lt; 1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for intrebare in intrebari:&lt;br /&gt;
        if len(intrebare) != 2 or not isinstance(intrebare[1], int):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_output.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(n, sir_v, intrebari):                     # functia de rezolvare&lt;br /&gt;
    raspunsuri = []&lt;br /&gt;
    for intrebare in intrebari:&lt;br /&gt;
        if intrebare[0] == &#039;D&#039;:&lt;br /&gt;
            y = intrebare[1]&lt;br /&gt;
            raspuns = n + 1&lt;br /&gt;
            for x in range(y + 1, n + 1):&lt;br /&gt;
                if sir_v[x - 1] &amp;lt; sir_v[y - 1]:&lt;br /&gt;
                    raspuns = x&lt;br /&gt;
                    break&lt;br /&gt;
            raspunsuri.append(raspuns)&lt;br /&gt;
        elif intrebare[0] == &#039;S&#039;:&lt;br /&gt;
            y = intrebare[1]&lt;br /&gt;
            raspuns = 0&lt;br /&gt;
            for x in range(y - 1, 0, -1):&lt;br /&gt;
                if sir_v[x - 1] &amp;lt; sir_v[y - 1]:&lt;br /&gt;
                    raspuns = x&lt;br /&gt;
                    break&lt;br /&gt;
            raspunsuri.append(raspuns)&lt;br /&gt;
    return raspunsuri&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;nrappin.txt&#039;, &#039;r&#039;)&lt;br /&gt;
    file_out = open(&#039;nrappout.txt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        N = int(file_in.readline())&lt;br /&gt;
        v = list(map(int, file_in.readline().split()))&lt;br /&gt;
        Q = int(file_in.readline())&lt;br /&gt;
        queries = []&lt;br /&gt;
        for _ in range(Q):&lt;br /&gt;
            query = file_in.readline().split()&lt;br /&gt;
            queries.append((query[0], int(query[1])))&lt;br /&gt;
&lt;br /&gt;
        validare(N, v, Q, queries, file_out)&lt;br /&gt;
        answers = solve(N, v, queries)&lt;br /&gt;
&lt;br /&gt;
        for answer in answers:&lt;br /&gt;
            file_out.write(str(answer) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1884_-_UEMM1&amp;diff=7520</id>
		<title>1884 - UEMM1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1884_-_UEMM1&amp;diff=7520"/>
		<updated>2023-11-27T21:37:48Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă un șir cu &#039;&#039;&#039;n&#039;&#039;&#039; elemente, numere naturale. Să se afișeze, pentru fiecare element din șir, valoarea din șir aflată după acesta și mai mare decât acesta (Următorul Element Mai Mare). Dacă o asemenea valoare nu există, se va afișa &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale șirului.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran cele &#039;&#039;&#039;n&#039;&#039;&#039; valori determinate, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*elementele șirului vor fi mai mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 5&lt;br /&gt;
 3 4 3 5 1&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 4 5 5 -1 -1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 UEMM1&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(numere):    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 1 &amp;lt;= numere &amp;lt;= 100000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def urmatorul_element_mai_mare(numere, string):&lt;br /&gt;
    # Inițializăm rezultatul cu -1 pentru toate elementele&lt;br /&gt;
    rezultat = [-1] * numere&lt;br /&gt;
    # Inițializăm o stivă goală pentru a păstra indicii elementelor&lt;br /&gt;
    stiva = []&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem fiecare element din șir&lt;br /&gt;
    for i in range(numere):&lt;br /&gt;
        # Cât timp stiva nu este goală și elementul curent este mai mare decât elementul din vârful stivei&lt;br /&gt;
        while stiva and string[stiva[-1]] &amp;lt; string[i]:&lt;br /&gt;
            # Actualizăm rezultatul pentru indicele din vârful stivei cu valoarea actuală din șir&lt;br /&gt;
            rezultat[stiva.pop()] = string[i]&lt;br /&gt;
        # Adăugăm indicele elementului curent în stivă&lt;br /&gt;
        stiva.append(i)&lt;br /&gt;
&lt;br /&gt;
    # Returnăm rezultatul&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim numărul de elemente&lt;br /&gt;
        n = int(input(&amp;quot;Introduceți numărul de elemente: &amp;quot;))&lt;br /&gt;
        # Citim șirul de numere&lt;br /&gt;
        sir = list(map(int, input(&amp;quot;Introduceți elementele șirului, separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n):             # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            # Apelăm funcția și afișăm rezultatul&lt;br /&gt;
            print(urmatorul_element_mai_mare(n, sir))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0878_-_Intervale4&amp;diff=7519</id>
		<title>0878 - Intervale4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0878_-_Intervale4&amp;diff=7519"/>
		<updated>2023-11-27T21:24:54Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se consideră un șir de &#039;&#039;&#039;n&#039;&#039;&#039; intervale închise întregi. Două intervale consecutive în șir care au intersecția nevidă se reunesc și se înlocuiesc în șir cu intervalul reuniune. Operația se repetă până când nu mai sunt în șir două intervale consecutive cu intersecția nevidă.&lt;br /&gt;
&lt;br /&gt;
Să se determine câte intervale există în șir după realizarea acestor operații.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;intervale4in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte două valori &#039;&#039;&#039;x y&#039;&#039;&#039;, reprezentând intervalele inițiale, în ordine.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;intervale4out.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;C&#039;&#039;&#039; de intervale din șir, după realizarea operațiilor.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000;&#039;&#039;&#039;&lt;br /&gt;
*pentru fiecare interval dat, &#039;&#039;&#039;x ≤ y&#039;&#039;&#039;, valori întregi care se pot reprezenta pe patru octeți.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;intervale4in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 5&lt;br /&gt;
 2 3&lt;br /&gt;
 4 6&lt;br /&gt;
 3 5&lt;br /&gt;
 8 10&lt;br /&gt;
 7 11&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;intervale4out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;intervale4in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 intervale4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;intervale4out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(numere, intervals):           # functia de validare a datelor de intrare&lt;br /&gt;
&lt;br /&gt;
    if numere &amp;lt; 1 or numere &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for intervall in intervals:&lt;br /&gt;
        if len(intervall) != 2 or intervall[0] &amp;gt; intervall[1]:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(intervals):                     # functia de rezolvare&lt;br /&gt;
    # Sortăm intervalele în ordine crescătoare&lt;br /&gt;
    intervals.sort()&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm lista de intervale unite cu primul interval&lt;br /&gt;
    unite = [intervals[0]]&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem fiecare interval&lt;br /&gt;
    for curent in intervals:&lt;br /&gt;
        # Obținem ultimul interval adăugat în lista de intervale unite&lt;br /&gt;
        ultim = unite[-1]&lt;br /&gt;
&lt;br /&gt;
        # Dacă intervalul curent se intersectează cu ultimul interval adăugat&lt;br /&gt;
        if curent[0] &amp;lt;= ultim[1]:&lt;br /&gt;
            # Actualizăm capătul drept al ultimului interval cu valoarea maximă dintre capetele drepte ale celor două intervale&lt;br /&gt;
            ultim[1] = max(ultim[1], curent[1])&lt;br /&gt;
        else:&lt;br /&gt;
            # Dacă nu se intersectează, adăugăm intervalul curent în lista de intervale unite&lt;br /&gt;
            unite.append(curent)&lt;br /&gt;
&lt;br /&gt;
    # Returnăm numărul de intervale din lista de intervale unite&lt;br /&gt;
    return len(unite)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;intervale4in.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;intervale4out.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())      # citirea numarului de intervale&lt;br /&gt;
        intervale = []&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            interval = list(map(int, file_in.readline().split()))&lt;br /&gt;
            intervale.append(interval)&lt;br /&gt;
&lt;br /&gt;
        validare(n, intervale)                 # apelul functiei de validare&lt;br /&gt;
        file_out.write(str(solve(intervale)))             # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    file_in.close()&lt;br /&gt;
    file_out.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Intervalele din șirul inițial sunt: &#039;&#039;&#039;[2,3] [4,6] [3,5] [8,10] [7,11].&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1.Se reunesc intervalele &#039;&#039;&#039;[4,6] [3,5]&#039;&#039;&#039; și se obține șirul &#039;&#039;&#039;[2,3] [3,6] [8,10] [7,11].&#039;&#039;&#039;&lt;br /&gt;
2.Se reunesc intervalele &#039;&#039;&#039;[2,3] [3,6]&#039;&#039;&#039; și se obține șirul &#039;&#039;&#039;[2,6] [8,10] [7,11].&#039;&#039;&#039;&lt;br /&gt;
3.Se reunesc intervalele &#039;&#039;&#039;[8,10] [7,11]&#039;&#039;&#039; și se obține șirul &#039;&#039;&#039;[2,6] [7,11].&#039;&#039;&#039;&lt;br /&gt;
La final în șir se află două intervale.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3266_-_Sir147&amp;diff=7518</id>
		<title>3266 - Sir147</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3266_-_Sir147&amp;diff=7518"/>
		<updated>2023-11-27T20:33:06Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerință==&lt;br /&gt;
&lt;br /&gt;
Fișierul &#039;&#039;&#039;sir147in.txt&#039;&#039;&#039; memorează cel mult &#039;&#039;&#039;10000&#039;&#039;&#039; de numere naturale cu cel mult nouă cifre. Numerele sunt ordonate strict crescător și separate prin câte un spațiu. Se consideră șirul &#039;&#039;&#039;1, 4, 7, ….&#039;&#039;&#039; definit astfel: &#039;&#039;&#039;f1=1, f2=4 si fn=fn−1∗2−fn−2&#039;&#039;&#039;, pentru &#039;&#039;&#039;n &amp;gt; 2&#039;&#039;&#039;. Se cere să se scrie în fișierul &#039;&#039;&#039;sir147out.txt&#039;&#039;&#039; numerele din fișier care sunt termeni ai șirului. Numerele sunt afișate în ordine strict crescătoare, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sir147in.txt&#039;&#039;&#039; conține pe prima linie mai multe numere naturale formate din cel mult nouă cifre separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sir147out.txt&#039;&#039;&#039; va conține pe prima linie numerele din fișier care sunt termeni ai șirului menționat în enunț.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*numerele din fișier vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*în fișierul de intrare există cel puțin un termen al șirului menționat mai sus&lt;br /&gt;
*se recomandă realizarea unei soluții în care să se evite memorarea valorilor din fișier într-un tablou sau în alte structuri de date similare&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sir147in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 1 2 5 7 13 17 19 30&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sir147out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 1 7 13 19&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sir147in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 sir147&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sir147out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(numere):           # functia de validare a datelor de intrare&lt;br /&gt;
&lt;br /&gt;
    for number in numere:&lt;br /&gt;
        if not isinstance(number, int) or number &amp;gt;= 1000000000:    # fiecare număr trebuie să fie întreg și mai mic decât 1.000.000.000&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sir147(numere):                     # functia de rezolvare&lt;br /&gt;
    f1, f2 = 1, 4&lt;br /&gt;
    current = f1&lt;br /&gt;
&lt;br /&gt;
    for number in numere:&lt;br /&gt;
        while number &amp;gt; current:&lt;br /&gt;
            current = f2&lt;br /&gt;
            f1, f2 = f2, f2 * 2 - f1&lt;br /&gt;
        if number == current:&lt;br /&gt;
            file_out.write(str(number) + &#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;sir147in.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;sir147out.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        numbers = list(map(int, file_in.readline().split()))      # citirea numerelor se face ca listă de întregi&lt;br /&gt;
&lt;br /&gt;
        validare(numbers)                 # apelul functiei de validare&lt;br /&gt;
        sir147(numbers)                   # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Numerele din fișierul de intrare care sunt termeni ai șirului menționat sunt 1 7 13 19.&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0876_-_Coada&amp;diff=7428</id>
		<title>0876 - Coada</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0876_-_Coada&amp;diff=7428"/>
		<updated>2023-11-17T19:11:51Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Să se scrie un program care gestionează o coadă de numere întregi. Inițial coada este vidă. Programul va citi de la tastatură o listă de operații, care pot fi:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;push X&#039;&#039;&#039; – adaugă valoarea întreagă &#039;&#039;&#039;X&#039;&#039;&#039; în coadă;&lt;br /&gt;
*&#039;&#039;&#039;pop&#039;&#039;&#039; – elimină elementul din coadă;&lt;br /&gt;
*&#039;&#039;&#039;front&#039;&#039;&#039; – afișează elementul de la începutul cozii.&lt;br /&gt;
&lt;br /&gt;
Programul va realiza asupra cozii operațiile citite, în ordine. Afișările se fac pe ecran, câte o valoare pe linie.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură un număr &#039;&#039;&#039;n&#039;&#039;&#039;, apoi cele &#039;&#039;&#039;n&#039;&#039;&#039; operații,&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numerele rezultat ale operațiilor &#039;&#039;&#039;front&#039;&#039;&#039;, câte unul pe o linie.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*coada nu va conține la un moment dat mai mult de &#039;&#039;&#039;1000&#039;&#039;&#039; elemente&lt;br /&gt;
*elementele cozii vor fi cuprinse între &#039;&#039;&#039;-1.000.000&#039;&#039;&#039; și &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
*dacă la un moment dat se aplică operația &#039;&#039;&#039;pop&#039;&#039;&#039; și coada nu conține niciun element, operația nu are efect&lt;br /&gt;
*dacă la un moment dat se aplică operația &#039;&#039;&#039;front&#039;&#039;&#039; și coada nu conține niciun element, operația nu are efect (nu se afișează nimic)&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 12&lt;br /&gt;
 push 5&lt;br /&gt;
 push 4&lt;br /&gt;
 front &lt;br /&gt;
 push 7 &lt;br /&gt;
 push -5&lt;br /&gt;
 pop&lt;br /&gt;
 front&lt;br /&gt;
 pop&lt;br /&gt;
 front&lt;br /&gt;
 push 11&lt;br /&gt;
 front&lt;br /&gt;
 pop&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
 7&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
# Definim clasa Queue&lt;br /&gt;
class Queue:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        self.queue = []  # Initializam coada ca o lista goala&lt;br /&gt;
&lt;br /&gt;
    # Metoda pentru adaugarea unui element in coada&lt;br /&gt;
    def push(self, x):&lt;br /&gt;
        if len(self.queue) &amp;lt; 1000 and -1000000 &amp;lt;= x &amp;lt;= 1000000:  # Verificam daca coada nu este plina si daca elementul este in intervalul specificat&lt;br /&gt;
            self.queue.append(x)  # Adaugam elementul la sfarsitul cozii&lt;br /&gt;
&lt;br /&gt;
    # Metoda pentru eliminarea unui element din coada&lt;br /&gt;
    def pop(self):&lt;br /&gt;
        if self.queue:  # Verificam daca coada nu este goala&lt;br /&gt;
            self.queue.pop(0)  # Eliminam primul element din coada&lt;br /&gt;
&lt;br /&gt;
    # Metoda pentru a obtine primul element din coada&lt;br /&gt;
    def front(self):&lt;br /&gt;
        if self.queue:  # Verificam daca coada nu este goala&lt;br /&gt;
            print(self.queue[0])  # Afisam primul element&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(nr_n):    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 1 &amp;lt;= nr_n &amp;lt;= 1000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Cream o instanta a clasei Queue&lt;br /&gt;
        queue = Queue()&lt;br /&gt;
&lt;br /&gt;
        # Citim numarul de operatii&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti numarul de operatii: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n):  # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            # Executam operatiile&lt;br /&gt;
            for _ in range(n):&lt;br /&gt;
                operation = input(&amp;quot;Introduceti operatia: &amp;quot;).split()  # Citim operatia&lt;br /&gt;
                if operation[0] == &#039;push&#039;:  # Daca operatia este &#039;push&#039;, adaugam elementul in coada&lt;br /&gt;
                    queue.push(int(operation[1]))&lt;br /&gt;
                elif operation[0] == &#039;pop&#039;:  # Daca operatia este &#039;pop&#039;, eliminam elementul din coada&lt;br /&gt;
                    queue.pop()&lt;br /&gt;
                elif operation[0] == &#039;front&#039;:  # Daca operatia este &#039;front&#039;, afisam primul element din coada&lt;br /&gt;
                    queue.front()&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1598_-_Coada1&amp;diff=7427</id>
		<title>1598 - Coada1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1598_-_Coada1&amp;diff=7427"/>
		<updated>2023-11-17T18:56:13Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră &#039;&#039;&#039;C&#039;&#039;&#039; o coadă de numere naturale, iniţial vidă. Se definesc două tipuri de operaţii.&lt;br /&gt;
&lt;br /&gt;
Operaţia &#039;&#039;&#039;1&#039;&#039;&#039; : &#039;&#039;&#039;push X&#039;&#039;&#039;, adaugă elementul &#039;&#039;&#039;X&#039;&#039;&#039; în coadă. Dacă &#039;&#039;&#039;X&#039;&#039;&#039; există deja în coadă, se scot toate elementele din coadă, pana la întâlnirea lui, inclusiv &#039;&#039;&#039;X&#039;&#039;&#039;.&lt;br /&gt;
Exemplu: &#039;&#039;&#039;C: 2 4 5 1 6&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Push 5&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;C: 1 6 5 ( s-au scos 2, 4, 5).&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Operaţia &#039;&#039;&#039;2&#039;&#039;&#039;: &#039;&#039;&#039;query X&#039;&#039;&#039;, cere afişarea poziţiei elementului &#039;&#039;&#039;X&#039;&#039;&#039; în coada &#039;&#039;&#039;C&#039;&#039;&#039;. Dacă elementul nu există în coadă, se afişează &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
Exemplu: &#039;&#039;&#039;C: 2 5 1 3 7&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Query 1&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;Răspuns: 3&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Dându-se &#039;&#039;&#039;M&#039;&#039;&#039;, reprezentând numărul de operaţii şi cele &#039;&#039;&#039;M&#039;&#039;&#039; operaţii, să se răspundă la operaţiile de tip &#039;&#039;&#039;query&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;coada1in.txt&#039;&#039;&#039; conține:&lt;br /&gt;
&lt;br /&gt;
*Pe prima linie numărul natural &#039;&#039;&#039;M&#039;&#039;&#039;;&lt;br /&gt;
*Pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii, câte un string şi câte un număr natural, de forma &#039;&#039;&#039;tip_operaţie x&#039;&#039;&#039;, reprezentând tipul operaţiei şi numărul &#039;&#039;&#039;X&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;coada1out.txt&#039;&#039;&#039; va conține:&lt;br /&gt;
&lt;br /&gt;
*Răspunsurile pentru operaţiile de tip &#039;&#039;&#039;query&#039;&#039;&#039;, câte unul pe linie.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ M ≤ 50.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ X ≤ 1.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;coada1in.txt&lt;br /&gt;
&lt;br /&gt;
 10&lt;br /&gt;
 push 3&lt;br /&gt;
 push 6&lt;br /&gt;
 push 8&lt;br /&gt;
 push 2&lt;br /&gt;
 query 6&lt;br /&gt;
 push 6&lt;br /&gt;
 query 4&lt;br /&gt;
 push 6&lt;br /&gt;
 push 7&lt;br /&gt;
 query 6&lt;br /&gt;
&lt;br /&gt;
;coada1out.txt&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 2&lt;br /&gt;
 -1&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;coada1in.txt&lt;br /&gt;
&lt;br /&gt;
 coada1&lt;br /&gt;
&lt;br /&gt;
;coada1out.txt&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Înaintea primei întrebări, coada arată asa: &#039;&#039;&#039;3 6 8 2&#039;&#039;&#039;, deci &#039;&#039;&#039;6&#039;&#039;&#039; apare pe poziţia &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
Înaintea celei de-a doua întrebări, coada arată asa: &#039;&#039;&#039;8 2 6&#039;&#039;&#039;, deci &#039;&#039;&#039;4&#039;&#039;&#039; nu apare.&lt;br /&gt;
Înaintea ultimei întrebări, coada arată asa: &#039;&#039;&#039;6 7&#039;&#039;&#039;, deci &#039;&#039;&#039;6&#039;&#039;&#039; apare pe poziţia &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(m, operatii):  # funcția de validare a datelor de intrare&lt;br /&gt;
    if m &amp;lt; 1 or m &amp;gt; 50000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for operatie in operatii:&lt;br /&gt;
        if operatie[0] not in [&#039;push&#039;, &#039;query&#039;]:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
        x = operatie[1]&lt;br /&gt;
        if x &amp;lt; 1 or x &amp;gt; 1000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(operatii):  # funcția de rezolvare&lt;br /&gt;
    queue = []&lt;br /&gt;
    output = []&lt;br /&gt;
    for operatie in operatii:&lt;br /&gt;
        if operatie[0] == &#039;push&#039;:&lt;br /&gt;
            x = operatie[1]&lt;br /&gt;
            if x in queue:&lt;br /&gt;
                queue = queue[queue.index(x)+1:]&lt;br /&gt;
            queue.append(x)&lt;br /&gt;
        elif operatie[0] == &#039;query&#039;:&lt;br /&gt;
            x = operatie[1]&lt;br /&gt;
            if x in queue:&lt;br /&gt;
                output.append(queue.index(x) + 1)&lt;br /&gt;
            else:&lt;br /&gt;
                output.append(-1)&lt;br /&gt;
    return output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;coada1in.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;coada1out.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        M = int(file_in.readline())&lt;br /&gt;
        operations = []&lt;br /&gt;
        for _ in range(M):&lt;br /&gt;
            operation = file_in.readline().split()&lt;br /&gt;
            operation[1] = int(operation[1])&lt;br /&gt;
            operations.append(operation)&lt;br /&gt;
&lt;br /&gt;
        validare(M, operations)  # apelul funcției de validare&lt;br /&gt;
        results = solve(operations)  # apelul funcției de rezolvare&lt;br /&gt;
&lt;br /&gt;
        for result in results:&lt;br /&gt;
            file_out.write(str(result) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0864_-_Roboti&amp;diff=7426</id>
		<title>0864 - Roboti</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0864_-_Roboti&amp;diff=7426"/>
		<updated>2023-11-17T18:08:00Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane și elemente &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;, reprezentând planul unui teren în care &#039;&#039;&#039;0&#039;&#039;&#039; reprezintă o zonă accesibilă, iar &#039;&#039;&#039;1&#039;&#039;&#039; reprezintă o zonă inaccesibilă. O zonă a terenului are ca și coordonate linia și coloana corespunzătoare din matrice. Într-o zonă cunoscută a matricei se află un robot, iar în altă zonă, de asemenea cunoscută, se află o roboțică. Determinați numărul minim de pași prin care robotul va ajunge la roboțică. Dacă nu este posibil ca robotul să ajungă la roboțică, rezultatul va fi &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;robotiin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;. Următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii conțin câte &#039;&#039;&#039;m&#039;&#039;&#039; valori, &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;. Următoarele două linii conțin câte două valori, reprezentând coordonatele robotului, respectiv ale roboțicii.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;robotiout.txt&#039;&#039;&#039; va conține pe prima linie valoarea cerută.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n , m ≤ 1000&lt;br /&gt;
*zonele pe care se află inițial cei doi roboți sunt libere și sunt diferite&lt;br /&gt;
*un pas reprezintă trecerea robotului din zona curentă într-o zonă vecină cu aceasta pe linie sau pe coloană, fără a părăsi matricea.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;robotiin.txt&lt;br /&gt;
&lt;br /&gt;
 4 5&lt;br /&gt;
 1 0 0 0 1&lt;br /&gt;
 0 0 1 0 0&lt;br /&gt;
 0 0 0 0 1&lt;br /&gt;
 1 1 0 0 1&lt;br /&gt;
 1 2&lt;br /&gt;
 2 5&lt;br /&gt;
&lt;br /&gt;
;robotiout.txt&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;robotiin.txt&lt;br /&gt;
&lt;br /&gt;
 robot&lt;br /&gt;
&lt;br /&gt;
;robotiout.txt&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Un traseu al robotului format din &#039;&#039;&#039;4&#039;&#039;&#039; pași este evidențiat mai jos.&lt;br /&gt;
&lt;br /&gt;
1	&#039;&#039;&#039;0	0	0&#039;&#039;&#039;	1&lt;br /&gt;
0	0	1	&#039;&#039;&#039;0	0&#039;&#039;&#039;&lt;br /&gt;
0	0	0	0	1&lt;br /&gt;
1	1	0	0	1&lt;br /&gt;
Există și alte trasee posibile, dar lungimea lor este mai mare.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, nr_m, matrix, x_inceput, y_inceput, x_sfarsit, y_sfarsit, fisier_out):&lt;br /&gt;
    if not (1 &amp;lt;= nr_n &amp;lt;= 1000 and 1 &amp;lt;= nr_m &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for linie in matrix:&lt;br /&gt;
        for elem in linie:&lt;br /&gt;
            if not isinstance(elem, int):&lt;br /&gt;
                raise ValueError&lt;br /&gt;
    if not (0 &amp;lt;= x_inceput &amp;lt; nr_n and 0 &amp;lt;= y_inceput &amp;lt; nr_m and 0 &amp;lt;= x_sfarsit &amp;lt; nr_n and 0 &amp;lt;= y_sfarsit &amp;lt; nr_m):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if matrix[x_inceput][y_inceput] != 0 or matrix[x_sfarsit][y_sfarsit] != 0 or (x_inceput == x_sfarsit and y_inceput == y_sfarsit):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    fisier_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bfs(nr_n, nr_m, matrix, x_inceput, y_inceput, x_sfarsit, y_sfarsit):&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    distanta = [[-1 for _ in range(nr_m)] for _ in range(nr_n)]&lt;br /&gt;
    coada = deque()&lt;br /&gt;
    coada.append((x_inceput, y_inceput))&lt;br /&gt;
    distanta[x_inceput][y_inceput] = 0&lt;br /&gt;
    while coada:&lt;br /&gt;
        x, y = coada.popleft()&lt;br /&gt;
        for directie in range(4):&lt;br /&gt;
            new_x, new_y = x + dx[directie], y + dy[directie]&lt;br /&gt;
            if 0 &amp;lt;= new_x &amp;lt; nr_n and 0 &amp;lt;= new_y &amp;lt; nr_m and matrix[new_x][new_y] == 0 and distanta[new_x][new_y] == -1:&lt;br /&gt;
                coada.append((new_x, new_y))&lt;br /&gt;
                distanta[new_x][new_y] = distanta[x][y] + 1&lt;br /&gt;
    return distanta[x_sfarsit][y_sfarsit]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    file_in = open(&#039;robotiin.txt&#039;, &#039;r&#039;)&lt;br /&gt;
    file_out = open(&#039;robotiout.txt&#039;, &#039;w&#039;)&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        matrice = [list(map(int, file_in.readline().split())) for _ in range(n)]&lt;br /&gt;
        x_start, y_start = map(int, file_in.readline().split())&lt;br /&gt;
        x_end, y_end = map(int, file_in.readline().split())&lt;br /&gt;
        validare(n, m, matrice, x_start-1, y_start-1, x_end-1, y_end-1, file_out)&lt;br /&gt;
        rezultat = bfs(n, m, matrice, x_start-1, y_start-1, x_end-1, y_end-1)&lt;br /&gt;
        file_out.write(str(rezultat))&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2088_-_decodif&amp;diff=7425</id>
		<title>2088 - decodif</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2088_-_decodif&amp;diff=7425"/>
		<updated>2023-11-17T16:59:41Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră următorul model (pattern): &#039;&#039;&#039;n[string]&#039;&#039;&#039; care este echivalent cu șirul &#039;&#039;&#039;(string)(string)...(string)&#039;&#039;&#039; (&#039;&#039;&#039;string&#039;&#039;&#039; repetat de de &#039;&#039;&#039;n&#039;&#039;&#039; ori). Pornind de la acest model orice șir de caractere poate fi codificat.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple&#039;&#039;&#039; :&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Șir codificat&#039;&#039;&#039;	&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1[a]&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2[ab]&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;2[a2[b]]&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;3[b2[ca]]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Șir decodificat&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;abab&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;abbabb&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;bcacabcacabcaca&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Fiind dat un șir de caractere corect codificat să se afișeze decodificarea acestuia.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură un șir de caractere &#039;&#039;&#039;S&#039;&#039;&#039; corect codificat.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran un șir de caractere ce va reprezenta decodificarea șirului &#039;&#039;&#039;S&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;3 ≤&#039;&#039;&#039; lungimea șirului &#039;&#039;&#039;S ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
*lungimea șirului decodificat  &#039;&#039;&#039;≤ 100000&#039;&#039;&#039;&lt;br /&gt;
*șirul &#039;&#039;&#039;S&#039;&#039;&#039; va conține doar caractere literă mică ale alfabetului englez&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 3[a1[b2[c]]]&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 abccabccabcc&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 3[a2[c]]2[x3[y]]&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 accaccaccxyyyxyyy&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
 2024&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(sir):  # functia de validare a datelor de intrare&lt;br /&gt;
    if len(sir) &amp;lt; 3 or len(sir) &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if not sir.islower():&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decode_string(sir):  # functia de rezolvare&lt;br /&gt;
    stack = [[&amp;quot;&amp;quot;, 1]]&lt;br /&gt;
    num = &amp;quot;&amp;quot;&lt;br /&gt;
    for ch in sir:&lt;br /&gt;
        if ch.isdigit():&lt;br /&gt;
            num += ch&lt;br /&gt;
        elif ch == &#039;[&#039;:&lt;br /&gt;
            stack.append([&amp;quot;&amp;quot;, int(num)])&lt;br /&gt;
            num = &amp;quot;&amp;quot;&lt;br /&gt;
        elif ch == &#039;]&#039;:&lt;br /&gt;
            st, k = stack.pop()&lt;br /&gt;
            stack[-1][0] += st*k&lt;br /&gt;
        else:&lt;br /&gt;
            stack[-1][0] += ch&lt;br /&gt;
    return stack[0][0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        s = input(&amp;quot;Introduceți șirul codificat: &amp;quot;).strip()&lt;br /&gt;
        validare(s)&lt;br /&gt;
        result = decode_string(s)&lt;br /&gt;
        print(result)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3949_-_mindist&amp;diff=7387</id>
		<title>3949 - mindist</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3949_-_mindist&amp;diff=7387"/>
		<updated>2023-11-15T19:54:30Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
MăcGregăr se află într-o matrice pătratică cu &#039;&#039;&#039;N&#039;&#039;&#039; linii și &#039;&#039;&#039;N&#039;&#039;&#039; coloane. Aflându-se în celula &#039;&#039;&#039;(i, j)&#039;&#039;&#039; acesta se poate deplasa printr-un pas într-una din celulele &#039;&#039;&#039;(i + 1, j), (i, j + 1), (i - 1, j), (i, j - 1)&#039;&#039;&#039;. Sunt &#039;&#039;&#039;M&#039;&#039;&#039; celule distincte prin care el nu poate trece, deoarece sunt ocupate cu echipamentul lui sportiv. De asemenea, mai sunt &#039;&#039;&#039;K&#039;&#039;&#039; celule distincte, diferite de cele ocupate, în care se află proteina lui MăcGregăr. Pentru fiecare celulă din matrice din care acesta ar pleca, MăcGregăr se întreabă care este numărul minim de pași pentru a ajunge la cea mai apropiată proteină.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;mindistin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;N&#039;&#039;&#039;, &#039;&#039;&#039;M&#039;&#039;&#039; și &#039;&#039;&#039;K&#039;&#039;&#039; separate printr-un spațiu. Pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii se află câte două numere naturale reprezentând linia și coloana pe care se află o celulă ocupată. Pe următoarele &#039;&#039;&#039;K&#039;&#039;&#039; linii se află câte două numere naturale reprezentând linia și coloana pe care se află o proteină.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;mindistout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;N&#039;&#039;&#039; linii, fiecare linie va conține &#039;&#039;&#039;N&#039;&#039;&#039; numere întregi, separate printr-un spațiu. Pe linia &#039;&#039;&#039;i&#039;&#039;&#039;, a &#039;&#039;&#039;j&#039;&#039;&#039;-a valoare reprezintă numărul minim de pași pentru a ajunge din celula &#039;&#039;&#039;(i, j)&#039;&#039;&#039; la cea mai apropiată proteină, dacă un astfel de drum există, &#039;&#039;&#039;-1&#039;&#039;&#039; altfel.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ M ≤ N * N&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ K ≤ N * N&#039;&#039;&#039;&lt;br /&gt;
*Pentru 30p, avem &#039;&#039;&#039;1 ≤ N ≤ 50&#039;&#039;&#039;&lt;br /&gt;
*Pentru alte 30p, avem &#039;&#039;&#039;1 ≤ N ≤ 1000&#039;&#039;&#039; și &#039;&#039;&#039;1 ≤ K ≤ 10&#039;&#039;&#039;&lt;br /&gt;
*Pentru restul de 40p, avem &#039;&#039;&#039;1 ≤ N ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mindistin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 4 5 3&lt;br /&gt;
 4 3&lt;br /&gt;
 2 1&lt;br /&gt;
 4 2&lt;br /&gt;
 4 1&lt;br /&gt;
 3 4&lt;br /&gt;
 3 3&lt;br /&gt;
 2 3&lt;br /&gt;
 1 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mindistout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
 0 1 1 2 &lt;br /&gt;
 -1 1 0 1 &lt;br /&gt;
 2 1 0 -1 &lt;br /&gt;
 -1 -1 -1 -1 &lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mindistin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 51&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;mindistout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(numar_n, numar_m, numar_k):  # functia de validare a datelor de intrare&lt;br /&gt;
    if numar_n &amp;lt; 1 or numar_n &amp;gt; 1000 or numar_m &amp;lt; 1 or numar_m &amp;gt; numar_n*numar_n or numar_k &amp;lt; 1 or numar_k &amp;gt; n*n:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mindist(numar_n, blocked, proteins):  # functia de rezolvare&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    matrix = [[-1 for _ in range(numar_n)] for _ in range(numar_n)]&lt;br /&gt;
    queue = deque()&lt;br /&gt;
    for b in blocked:&lt;br /&gt;
        matrix[b[0]-1][b[1]-1] = -2&lt;br /&gt;
    for p in proteins:&lt;br /&gt;
        queue.append((p[0]-1, p[1]-1))&lt;br /&gt;
        matrix[p[0]-1][p[1]-1] = 0&lt;br /&gt;
    while queue:&lt;br /&gt;
        x, y = queue.popleft()&lt;br /&gt;
        for i in range(4):&lt;br /&gt;
            nx, ny = x + dx[i], y + dy[i]&lt;br /&gt;
            if 0 &amp;lt;= nx &amp;lt; numar_n and 0 &amp;lt;= ny &amp;lt; numar_n and matrix[nx][ny] == -1:&lt;br /&gt;
                matrix[nx][ny] = matrix[x][y] + 1&lt;br /&gt;
                queue.append((nx, ny))&lt;br /&gt;
    return matrix&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        file_in = open(&amp;quot;mindistin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
        file_out = open(&amp;quot;mindistout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
        n, m, k = map(int, file_in.readline().split())&lt;br /&gt;
        blocat = [tuple(map(int, file_in.readline().split())) for _ in range(m)]&lt;br /&gt;
        proteine = [tuple(map(int, file_in.readline().split())) for _ in range(k)]&lt;br /&gt;
        validare(n, m, k)&lt;br /&gt;
        result = mindist(n, blocat, proteine)&lt;br /&gt;
        for row in result:&lt;br /&gt;
            file_out.write(&#039; &#039;.join(str(x) if x != -2 else &#039;-1&#039; for x in row))&lt;br /&gt;
            file_out.write(&#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0882_-_Lac&amp;diff=7375</id>
		<title>0882 - Lac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0882_-_Lac&amp;diff=7375"/>
		<updated>2023-11-15T18:34:54Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă harta unui lac de formă dreptunghiulară, împărțit în &#039;&#039;&#039;n*m&#039;&#039;&#039; zone dispuse sub forma unei matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane. Zonele pot fi acoperite cu apă, sau pot fi zone de uscat. Zonele de uscat care sunt învecinate pe linie sau pe coloană formează insule sau peninsule. Peninsule conțin cel puțin o zonă de uscat pe marginea lacului (matricei), în timp ce insulele sunt situate în întregime în interiorul lacului.&lt;br /&gt;
&lt;br /&gt;
Cunoscând harta lacului, determinați numărul de insule și numărul de peninsule.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;lacin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;. Următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii conțin câte &#039;&#039;&#039;m&#039;&#039;&#039; valori &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;, separate prin câte un spațiu. Valoarea &#039;&#039;&#039;0&#039;&#039;&#039; reprezintă o zonă acoperită cu apă, iar valoarea &#039;&#039;&#039;1&#039;&#039;&#039; reprezintă o zonă acoperită cu uscat.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;lacout.txt&#039;&#039;&#039; va conține pe prima două numerele &#039;&#039;&#039;nrI nrP&#039;&#039;&#039;, separate prin exact un spațiu, reprezentând numărul de insule, respectiv numărul de peninsule existente pe lac.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n , m ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lacin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 6 9&lt;br /&gt;
 1 1 0 0 1 1 1 0 0 &lt;br /&gt;
 0 0 1 0 1 0 1 0 0 &lt;br /&gt;
 1 1 0 0 0 0 0 0 0 &lt;br /&gt;
 1 0 0 0 1 1 1 0 0 &lt;br /&gt;
 1 1 1 1 0 1 0 0 0 &lt;br /&gt;
 1 0 0 0 0 0 1 1 0 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lacout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
 2 4&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lacin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 harta unui lac&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lacout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
 Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, nr_m, matrix):  # functia de validare a datelor de intrare&lt;br /&gt;
    if nr_n &amp;lt; 1 or nr_n &amp;gt; 1000 or nr_m &amp;lt; 1 or nr_m &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for linie in matrix:&lt;br /&gt;
        if len(linie) != nr_m:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dfs(i, j, nr_n, nr_m, matrix, vizitat):&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    vizitat[i][j] = True&lt;br /&gt;
    for directie in range(4):&lt;br /&gt;
        x_nou, y_nou = i + dx[directie], j + dy[directie]&lt;br /&gt;
        if 0 &amp;lt;= x_nou &amp;lt; nr_n and 0 &amp;lt;= y_nou &amp;lt; nr_m and matrix[x_nou][y_nou] == 1 and not vizitat[x_nou][y_nou]:&lt;br /&gt;
            dfs(x_nou, y_nou, n, m, matrix, vizitat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numara_insule_peninsule(nr_n, nr_m, matrix):  # functia de rezolvare&lt;br /&gt;
    vizitat = [[False]*nr_m for _ in range(nr_n)]&lt;br /&gt;
    insule = peninsule = 0&lt;br /&gt;
    for i in range(nr_n):&lt;br /&gt;
        for j in range(nr_m):&lt;br /&gt;
            if matrix[i][j] == 1 and not vizitat[i][j]:&lt;br /&gt;
                if i == 0 or i == nr_n-1 or j == 0 or j == nr_m-1:&lt;br /&gt;
                    peninsule += 1&lt;br /&gt;
                else:&lt;br /&gt;
                    insule += 1&lt;br /&gt;
                dfs(i, j, nr_n, nr_m, matrix, vizitat)&lt;br /&gt;
    file_out.write(f&#039;{insule} {peninsule}\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        file_in = open(&#039;lacin.txt&#039;, &#039;r&#039;)&lt;br /&gt;
        file_out = open(&#039;lacout.txt&#039;, &#039;w&#039;)&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        matrice = [list(map(int, file_in.readline().split())) for _ in range(n)]&lt;br /&gt;
        validare(n, m, matrice)&lt;br /&gt;
        numara_insule_peninsule(n, m, matrice)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0882_-_Lac&amp;diff=7351</id>
		<title>0882 - Lac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0882_-_Lac&amp;diff=7351"/>
		<updated>2023-11-15T17:16:20Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: Pagină nouă: ==Cerința==  Se dă harta unui lac de formă dreptunghiulară, împărțit în &amp;#039;&amp;#039;&amp;#039;n*m&amp;#039;&amp;#039;&amp;#039; zone dispuse sub forma unei matrice cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii și &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; coloane. Zonele pot fi acoperite cu apă, sau pot fi zone de uscat. Zonele de uscat care sunt învecinate pe linie sau pe coloană formează insule sau peninsule. Peninsule conțin cel puțin o zonă de uscat pe marginea lacului (matricei), în timp ce insulele sunt situate în întregime în interiorul lacului.  Cunoscând...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă harta unui lac de formă dreptunghiulară, împărțit în &#039;&#039;&#039;n*m&#039;&#039;&#039; zone dispuse sub forma unei matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane. Zonele pot fi acoperite cu apă, sau pot fi zone de uscat. Zonele de uscat care sunt învecinate pe linie sau pe coloană formează insule sau peninsule. Peninsule conțin cel puțin o zonă de uscat pe marginea lacului (matricei), în timp ce insulele sunt situate în întregime în interiorul lacului.&lt;br /&gt;
&lt;br /&gt;
Cunoscând harta lacului, determinați numărul de insule și numărul de peninsule.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;lacin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;. Următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii conțin câte &#039;&#039;&#039;m&#039;&#039;&#039; valori &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;, separate prin câte un spațiu. Valoarea &#039;&#039;&#039;0&#039;&#039;&#039; reprezintă o zonă acoperită cu apă, iar valoarea &#039;&#039;&#039;1&#039;&#039;&#039; reprezintă o zonă acoperită cu uscat.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;lacout.txt&#039;&#039;&#039; va conține pe prima două numerele &#039;&#039;&#039;nrI nrP&#039;&#039;&#039;, separate prin exact un spațiu, reprezentând numărul de insule, respectiv numărul de peninsule existente pe lac.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n , m ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lac.in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:6 9&lt;br /&gt;
:1 1 0 0 1 1 1 0 0 &lt;br /&gt;
:0 0 1 0 1 0 1 0 0 &lt;br /&gt;
:1 1 0 0 0 0 0 0 0 &lt;br /&gt;
:1 0 0 0 1 1 1 0 0 &lt;br /&gt;
:1 1 1 1 0 1 0 0 0 &lt;br /&gt;
:1 0 0 0 0 0 1 1 0 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lac.out&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
2 4&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(nr_n, nr_m, matrix):  # functia de validare a datelor de intrare&lt;br /&gt;
    if nr_n &amp;lt; 1 or nr_n &amp;gt; 1000 or nr_m &amp;lt; 1 or nr_m &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for linie in matrix:&lt;br /&gt;
        if len(linie) != nr_m:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dfs(i, j, nr_n, nr_m, matrix, vizitat):&lt;br /&gt;
    dx = [-1, 0, 1, 0]&lt;br /&gt;
    dy = [0, 1, 0, -1]&lt;br /&gt;
    vizitat[i][j] = True&lt;br /&gt;
    for directie in range(4):&lt;br /&gt;
        x_nou, y_nou = i + dx[directie], j + dy[directie]&lt;br /&gt;
        if 0 &amp;lt;= x_nou &amp;lt; nr_n and 0 &amp;lt;= y_nou &amp;lt; nr_m and matrix[x_nou][y_nou] == 1 and not vizitat[x_nou][y_nou]:&lt;br /&gt;
            dfs(x_nou, y_nou, n, m, matrix, vizitat)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numara_insule_peninsule(nr_n, nr_m, matrix):  # functia de rezolvare&lt;br /&gt;
    vizitat = [[False]*nr_m for _ in range(nr_n)]&lt;br /&gt;
    insule = peninsule = 0&lt;br /&gt;
    for i in range(nr_n):&lt;br /&gt;
        for j in range(nr_m):&lt;br /&gt;
            if matrix[i][j] == 1 and not vizitat[i][j]:&lt;br /&gt;
                if i == 0 or i == nr_n-1 or j == 0 or j == nr_m-1:&lt;br /&gt;
                    peninsule += 1&lt;br /&gt;
                else:&lt;br /&gt;
                    insule += 1&lt;br /&gt;
                dfs(i, j, nr_n, nr_m, matrix, vizitat)&lt;br /&gt;
    file_out.write(f&#039;{insule} {peninsule}\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        file_in = open(&#039;lacin.txt&#039;, &#039;r&#039;)&lt;br /&gt;
        file_out = open(&#039;lacout.txt&#039;, &#039;w&#039;)&lt;br /&gt;
        n, m = map(int, file_in.readline().split())&lt;br /&gt;
        matrice = [list(map(int, file_in.readline().split())) for _ in range(n)]&lt;br /&gt;
        validare(n, m, matrice)&lt;br /&gt;
        numara_insule_peninsule(n, m, matrice)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2645_-_minlex&amp;diff=7349</id>
		<title>2645 - minlex</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2645_-_minlex&amp;diff=7349"/>
		<updated>2023-11-14T23:03:35Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră un cuvânt format numai din litere mici și un număr natural nenul &#039;&#039;&#039;K&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
&lt;br /&gt;
Să se determine cuvântul minim lexicografic obținut prin eliminarea a exact &#039;&#039;&#039;K&#039;&#039;&#039; litere din cuvântul inițial.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;K&#039;&#039;&#039;, apoi cuvântul.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran cuvântul rămas după eliminarea a exact &#039;&#039;&#039;K&#039;&#039;&#039; litere, minim lexicografic.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;3 ≤ lungimea cuvântului ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
*Cuvântul este format numai din litere mici ale alfabetului englez.&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ K &amp;lt; lungimea cuvântului&#039;&#039;&#039;&lt;br /&gt;
*Literele rămase după eliminare nu-și pot schimba ordinea în cuvânt.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
:5 zyizxtnfo&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
:info&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(litera_k, word):  # functia de validare a datelor de intrare&lt;br /&gt;
    if 1 &amp;gt; litera_k or litera_k &amp;gt;= len(word) or len(word) &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if not word.islower():&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def elimina_litere(litera_k, word):  # functia de rezolvare&lt;br /&gt;
    stiva = []&lt;br /&gt;
    for litera in word:&lt;br /&gt;
        while litera_k &amp;gt; 0 and stiva and stiva[-1] &amp;gt; litera:&lt;br /&gt;
            stiva.pop()&lt;br /&gt;
            litera_k -= 1&lt;br /&gt;
        stiva.append(litera)&lt;br /&gt;
    while litera_k &amp;gt; 0:&lt;br /&gt;
        stiva.pop()&lt;br /&gt;
        litera_k -= 1&lt;br /&gt;
    return &#039;&#039;.join(stiva)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        k, cuvant = input(&amp;quot;Introduceți numărul K și cuvântul, separate printr-un spațiu: &amp;quot;).split()&lt;br /&gt;
        k = int(k)&lt;br /&gt;
        validare(k, cuvant)&lt;br /&gt;
        rezultat = elimina_litere(k, cuvant)&lt;br /&gt;
        print(str(rezultat) + &#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0852_-_Paranteze3&amp;diff=7333</id>
		<title>0852 - Paranteze3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0852_-_Paranteze3&amp;diff=7333"/>
		<updated>2023-11-14T22:07:58Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; șiruri de paranteze rotunde sau pătrate. Să se stabilească, despre fiecare șir, dacă este corect parantezat – adică dacă parantezele se închid corect.&lt;br /&gt;
&lt;br /&gt;
Un șir de paranteze &#039;&#039;&#039;S&#039;&#039;&#039; rotunde este corect parantezat dacă:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;S&#039;&#039;&#039; este șirul vid, sau&lt;br /&gt;
*&#039;&#039;&#039;S = (T)&#039;&#039;&#039; și &#039;&#039;&#039;T&#039;&#039;&#039; este corect parantezat, sau&lt;br /&gt;
*&#039;&#039;&#039;S = [T]&#039;&#039;&#039; și &#039;&#039;&#039;T&#039;&#039;&#039; este corect parantezat, sau&lt;br /&gt;
*&#039;&#039;&#039;S = AB&#039;&#039;&#039;, iar &#039;&#039;&#039;A&#039;&#039;&#039; și &#039;&#039;&#039;B&#039;&#039;&#039; sunt corect parantezate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;paranteze3in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte un șir de paranteze rotunde sau pătrate.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;paranteze3out.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;n&#039;&#039;&#039; linii: fiecare linie va conține valoarea &#039;&#039;&#039;1&#039;&#039;&#039;, dacă șirul corespunzător de paranteze este corect parantezat și &#039;&#039;&#039;0&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100&#039;&#039;&#039;&lt;br /&gt;
*fiecare șir va avea cel mult &#039;&#039;&#039;255&#039;&#039;&#039; de paranteze&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze3in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:4&lt;br /&gt;
:()[]&lt;br /&gt;
:)([]&lt;br /&gt;
:()[(()[])()]&lt;br /&gt;
([)]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze3out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare corespund restrictiilor impuse&lt;br /&gt;
:1&lt;br /&gt;
:0&lt;br /&gt;
:1&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze3in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:ana are mere&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze3out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(numar, strings):  # functia de validare a datelor de intrare&lt;br /&gt;
    if numar &amp;lt; 1 or numar &amp;gt; 100:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for sir in strings:&lt;br /&gt;
        if len(sir) &amp;gt; 255:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verifica_paranteze(sir):  # functia de rezolvare&lt;br /&gt;
    stiva = []&lt;br /&gt;
    for paranteza in sir:&lt;br /&gt;
        if paranteza in &amp;quot;([&amp;quot;:&lt;br /&gt;
            stiva.append(paranteza)&lt;br /&gt;
        else:&lt;br /&gt;
            if not stiva:&lt;br /&gt;
                return 0&lt;br /&gt;
            top = stiva.pop()&lt;br /&gt;
            if paranteza == &amp;quot;)&amp;quot; and top != &amp;quot;(&amp;quot;:&lt;br /&gt;
                return 0&lt;br /&gt;
            elif paranteza == &amp;quot;]&amp;quot; and top != &amp;quot;[&amp;quot;:&lt;br /&gt;
                return 0&lt;br /&gt;
    if stiva:&lt;br /&gt;
        return 0&lt;br /&gt;
    return 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;paranteze3in.txt&#039;, &#039;r&#039;)&lt;br /&gt;
    file_out = open(&#039;paranteze3out.txt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline().strip())&lt;br /&gt;
        siruri = [file_in.readline().strip() for _ in range(n)]&lt;br /&gt;
        validare(n, siruri)&lt;br /&gt;
        rezultate = [verifica_paranteze(sir) for sir in siruri]&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            file_out.write(str(rezultat) + &#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0849_-_Paranteze2&amp;diff=7316</id>
		<title>0849 - Paranteze2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0849_-_Paranteze2&amp;diff=7316"/>
		<updated>2023-11-13T22:05:06Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dă un șir de paranteze rotunde care se închid corect (corect parantezat). Să se determine adâncimea parantezării.&lt;br /&gt;
&lt;br /&gt;
Pentru un șir de paranteze închise corect &#039;&#039;&#039;S&#039;&#039;&#039;, adâncimea parantezării, &#039;&#039;&#039;D(S)&#039;&#039;&#039; este definită astfel:&lt;br /&gt;
&lt;br /&gt;
dacă șirul &#039;&#039;&#039;S&#039;&#039;&#039; este vid, &#039;&#039;&#039;D(S)=0&#039;&#039;&#039;&lt;br /&gt;
dacă &#039;&#039;&#039;S=(T)&#039;&#039;&#039;, unde &#039;&#039;&#039;T&#039;&#039;&#039; este un șir de paranteze corect, &#039;&#039;&#039;D(S)=1+D(T)&#039;&#039;&#039;&lt;br /&gt;
dacă &#039;&#039;&#039;S=AB&#039;&#039;&#039;, unde &#039;&#039;&#039;A&#039;&#039;&#039; și &#039;&#039;&#039;B&#039;&#039;&#039; sunt șiruri de paranteze corecte, &#039;&#039;&#039;D(S)=max{D(A),D(B)}&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;paranteze2in.txt&#039;&#039;&#039; conține pe prima un șir de paranteze rotunde, corect parantezat.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;paranteze2out.txt&#039;&#039;&#039; va conține pe prima linie un număr &#039;&#039;&#039;M&#039;&#039;&#039;, reprezentând adâncimea parantezării.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*șirul va conține cel mult &#039;&#039;&#039;254&#039;&#039;&#039; de paranteze&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze2in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:1&lt;br /&gt;
:()((()())())&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze2out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze2in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze2out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(strings):  # functia de validare a datelor de intrare&lt;br /&gt;
    for sir in strings:&lt;br /&gt;
        if len(sir) &amp;gt; 254:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def adancime_parantezare(sir):  # functia de rezolvare&lt;br /&gt;
    adancime_maxima = 0&lt;br /&gt;
    adancime_curenta = 0&lt;br /&gt;
    for paranteza in sir:&lt;br /&gt;
        if paranteza == &#039;(&#039;:&lt;br /&gt;
            adancime_curenta += 1&lt;br /&gt;
            if adancime_curenta &amp;gt; adancime_maxima:&lt;br /&gt;
                adancime_maxima = adancime_curenta&lt;br /&gt;
        elif paranteza == &#039;)&#039;:&lt;br /&gt;
            adancime_curenta -= 1&lt;br /&gt;
    return adancime_maxima&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;paranteze2in.txt&#039;, &#039;r&#039;)&lt;br /&gt;
    file_out = open(&#039;paranteze2out.txt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline().strip())&lt;br /&gt;
        siruri = [file_in.readline().strip() for _ in range(n)]&lt;br /&gt;
        validare(siruri)&lt;br /&gt;
        rezultate = [adancime_parantezare(sir) for sir in siruri]&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            file_out.write(str(rezultat) + &#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0848_-_Paranteze1&amp;diff=7315</id>
		<title>0848 - Paranteze1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0848_-_Paranteze1&amp;diff=7315"/>
		<updated>2023-11-13T21:35:19Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; șiruri de paranteze rotunde. Să se stabilească, despre fiecare șir, dacă este corect parantezat – adică dacă parantezele se închid corect.&lt;br /&gt;
&lt;br /&gt;
Un șir de paranteze &#039;&#039;&#039;S&#039;&#039;&#039; rotunde este corect parantezat dacă:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;S&#039;&#039;&#039; este șirul vid, sau&lt;br /&gt;
*&#039;&#039;&#039;S = (T)&#039;&#039;&#039; și &#039;&#039;&#039;T&#039;&#039;&#039; este corect parantezat, sau&lt;br /&gt;
*&#039;&#039;&#039;S = AB&#039;&#039;&#039;, iar &#039;&#039;&#039;A&#039;&#039;&#039; și &#039;&#039;&#039;B&#039;&#039;&#039; sunt corect parantezate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;paranteze1in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte un șir de paranteze rotunde.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;paranteze1out.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;n&#039;&#039;&#039; linii: fiecare linie va conține valoarea &#039;&#039;&#039;1&#039;&#039;&#039;, dacă șirul corespunzător de paranteze este corect parantezat și &#039;&#039;&#039;0&#039;&#039;&#039; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100&#039;&#039;&#039;&lt;br /&gt;
*fiecare șir va avea cel mult &#039;&#039;&#039;255&#039;&#039;&#039; de paranteze&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:4&lt;br /&gt;
:(())&lt;br /&gt;
:)(()&lt;br /&gt;
:()((()())())&lt;br /&gt;
:()(&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare corespund restrictiilor impuse.&lt;br /&gt;
:1&lt;br /&gt;
:0&lt;br /&gt;
:1&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2:==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:2h&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;paranteze1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
:Datele de intrare nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def validare(numar, string):  # functia de validare a datelor de intrare&lt;br /&gt;
    if numar &amp;lt; 1 or numar &amp;gt; 100:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for sir in string:&lt;br /&gt;
        if len(sir) &amp;gt; 255:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_corect_parantezat(s):  # functia de rezolvare&lt;br /&gt;
    stiva = []&lt;br /&gt;
    for paranteza in s:&lt;br /&gt;
        if paranteza == &#039;(&#039;:&lt;br /&gt;
            stiva.append(paranteza)&lt;br /&gt;
        elif paranteza == &#039;)&#039;:&lt;br /&gt;
            if len(stiva) == 0:&lt;br /&gt;
                return 0&lt;br /&gt;
            stiva.pop()&lt;br /&gt;
    return 1 if len(stiva) == 0 else 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&#039;paranteze1in.txt&#039;, &#039;r&#039;)&lt;br /&gt;
    file_out = open(&#039;paranteze1out.txt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline().strip())&lt;br /&gt;
        siruri = [file_in.readline().strip() for _ in range(n)]&lt;br /&gt;
        validare(n, siruri)&lt;br /&gt;
        rezultate = [este_corect_parantezat(sir) for sir in siruri]&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            file_out.write(str(rezultat) + &#039;\n&#039;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3410_-_Submatrix_Sum_Max&amp;diff=7299</id>
		<title>3410 - Submatrix Sum Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3410_-_Submatrix_Sum_Max&amp;diff=7299"/>
		<updated>2023-11-13T17:33:06Z</updated>

		<summary type="html">&lt;p&gt;Bonte Lucas Gabriel: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dă o matrice de numere întregi cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;n&#039;&#039;&#039; coloane.&lt;br /&gt;
&lt;br /&gt;
==Cerință==&lt;br /&gt;
&lt;br /&gt;
Să se determine suma maximă care se poate obține dintr-o submatrice.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi elementele matricei cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;n&#039;&#039;&#039; coloane.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran suma maximă care se poate obține dintr-o submatrice.&lt;br /&gt;
&lt;br /&gt;
==Restricții de precizări==&lt;br /&gt;
&lt;br /&gt;
* 1 &amp;amp;les; n &amp;amp;les; 300&lt;br /&gt;
* Elementele matricei sunt numere întregi din intervalul &#039;&#039;&#039;[-1000, 1000]&#039;&#039;&#039;&lt;br /&gt;
* O submatrice poate fi formată dintr-un singur element&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
:5&lt;br /&gt;
:2 4 -1 2 -1&lt;br /&gt;
:4 -7 1 -6 -1&lt;br /&gt;
:-9 2 4 5 -7&lt;br /&gt;
:1 3 -2 6 2&lt;br /&gt;
:1 -4 -6 -5 8&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
:18&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
&lt;br /&gt;
:1x&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot; start=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verificare_restrictii(numar, matrix):    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 1 &amp;lt;= numar &amp;lt;= 300 and all(-1000 &amp;lt;= element &amp;lt;= 1000 for rand in matrix for element in rand):&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_maxima_submatrice(numar, matrix):&lt;br /&gt;
    # inițializăm matricea de sume prefix cu 0&lt;br /&gt;
    prefix_sum = [[0 for _ in range(numar + 1)] for _ in range(numar + 1)]&lt;br /&gt;
&lt;br /&gt;
    # calculăm matricea de sume prefix&lt;br /&gt;
    for i in range(numar):&lt;br /&gt;
        for j in range(numar):&lt;br /&gt;
            prefix_sum[i + 1][j + 1] = matrix[i][j] - prefix_sum[i][j] + prefix_sum[i][j + 1] + prefix_sum[i + 1][j]&lt;br /&gt;
&lt;br /&gt;
    max_sum = float(&#039;-inf&#039;)  # inițializăm suma maximă cu -infinit&lt;br /&gt;
    # parcurgem toate submatricile posibile&lt;br /&gt;
    for i in range(1, numar + 1):&lt;br /&gt;
        for j in range(1, numar + 1):&lt;br /&gt;
            for k in range(i, numar + 1):&lt;br /&gt;
                for lenght in range(j, numar + 1):&lt;br /&gt;
                    # calculăm suma submatricei curente folosind sumele prefix&lt;br /&gt;
                    curr_sum = prefix_sum[k][lenght] - prefix_sum[k][j - 1] - prefix_sum[i - 1][lenght] + prefix_sum[i - 1][j - 1]&lt;br /&gt;
                    max_sum = max(max_sum, curr_sum)  # actualizăm suma maximă dacă este cazul&lt;br /&gt;
&lt;br /&gt;
    return max_sum  # returnăm suma maximă&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceti numarul de linii/coloane: &amp;quot;))     # citirea numarului de linii si coloane&lt;br /&gt;
        matrice = [list(map(int, input().split())) for _ in range(n)]  # citirea matricei&lt;br /&gt;
&lt;br /&gt;
        if verificare_restrictii(n, matrice):             # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            print(suma_maxima_submatrice(n, matrice))  # apelam functia de rezolvare&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Submatricea de sumă maximă este:&lt;br /&gt;
:&#039;&#039;&#039;2 4 5&#039;&#039;&#039;&lt;br /&gt;
:&#039;&#039;&#039;3 -2 6&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Bonte Lucas Gabriel</name></author>
	</entry>
</feed>