<?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=Tita+Marian</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=Tita+Marian"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Tita_Marian"/>
	<updated>2026-05-03T11:58:10Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=E:15345&amp;diff=10553</id>
		<title>E:15345</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=E:15345&amp;diff=10553"/>
		<updated>2025-01-11T20:54:14Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;E:15345 (Călin Dănuț Hossu, Baia Mare)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Determinați numerele &amp;#039;&amp;#039;&amp;lt;math&amp;gt;\overline{xyz}&amp;lt;/math&amp;gt; &amp;#039;&amp;#039;, scrise în baza &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt;, știind că &amp;lt;math&amp;gt;x^{y+z} + x^y + x^z - 584 = 0&amp;lt;/math&amp;gt;.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție&amp;#039;&amp;#039;&amp;#039;  Ecuația se scrie:  &amp;lt;math&amp;gt; x^y \cdot x^z + x^y + x^z = 584&amp;lt;/math&amp;gt;, sau &amp;lt;math&amp;gt;x^y \cdot x^z + x^y + x^z= 585.&amp;lt;/math&amp;gt;  De aici &amp;lt;math&amp;gt;x^y \cdot(x^z+1) + (x^z + 1) = 585&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;(x^y + 1) \cdot (x^z + 1) = 585.&amp;lt;/math&amp;gt;  Deoarece &amp;lt;math&amp;gt;585&amp;lt;/math&amp;gt; este numă...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;E:15345 (Călin Dănuț Hossu, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele &#039;&#039;&amp;lt;math&amp;gt;\overline{xyz}&amp;lt;/math&amp;gt; &#039;&#039;, scrise în baza &amp;lt;math&amp;gt;10&amp;lt;/math&amp;gt;, știind că &amp;lt;math&amp;gt;x^{y+z} + x^y + x^z - 584 = 0&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;
Ecuația se scrie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt; x^y \cdot x^z + x^y + x^z = 584&amp;lt;/math&amp;gt;,&lt;br /&gt;
sau &amp;lt;math&amp;gt;x^y \cdot x^z + x^y + x^z= 585.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
De aici&lt;br /&gt;
&amp;lt;math&amp;gt;x^y \cdot(x^z+1) + (x^z + 1) = 585&amp;lt;/math&amp;gt;&lt;br /&gt;
sau &amp;lt;math&amp;gt;(x^y + 1) \cdot (x^z + 1) = 585.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deoarece &amp;lt;math&amp;gt;585&amp;lt;/math&amp;gt; este număr impar deducem că cele două paranteze sunt numere impare; mai mult &amp;lt;math&amp;gt;x&amp;lt;/math&amp;gt; este număr par. Cum &amp;lt;math&amp;gt; 585 = 3 \cdot 195 = 5 \cdot 117 = 9 \cdot 65 = 13 \cdot 45 = 15 \cdot 39&amp;lt;/math&amp;gt; putem avea &amp;lt;math&amp;gt;x^y + 1 = 3&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt; x^z + 1 = 195; x^y + 1 = 5 &amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt; x^z + 1 = 117; x^y + 1 = 9 &amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt; x^z + 1 = 65; x^y + 1 = 13 &amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt; x^z + 1 = 45; x^y + 1 = 15 &amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt; x^z + 1 = 39 &amp;lt;/math&amp;gt;, sau invers. Soluții naturale obținem numai pentru &amp;lt;math&amp;gt; x^y + 1 = 9 &amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt; x^y + 1 = 65 &amp;lt;/math&amp;gt;. &lt;br /&gt;
Găsim &amp;lt;math&amp;gt; x = 2, y = 3, z = 6 &amp;lt;/math&amp;gt;, sau &amp;lt;math&amp;gt; x = 2, y = 6, z = 3 &amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=E:15344&amp;diff=10552</id>
		<title>E:15344</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=E:15344&amp;diff=10552"/>
		<updated>2025-01-11T20:04:12Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;E:15344 (Teodora Zetea și Bogdan Zetea, Sighetu Marmației)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Un număr se numește primial dacă este format din cifre prime, distincte.&amp;#039;&amp;#039;  a) Câte numere primiale de trei cifre există?  b) Arătați că suma tuturor numerelor primiale nu este un pătrat perfect.  &amp;#039;&amp;#039;&amp;#039;Soluție&amp;#039;&amp;#039;&amp;#039;  Cifrele prime sunt &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt;.  a) La un număr format din trei cifre diferite, cifrele sutelor se pot alege din &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;E:15344 (Teodora Zetea și Bogdan Zetea, Sighetu Marmației)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Un număr se numește primial dacă este format din cifre prime, distincte.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
a) Câte numere primiale de trei cifre există?&lt;br /&gt;
&lt;br /&gt;
b) Arătați că suma tuturor numerelor primiale nu este un pătrat perfect.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Cifrele prime sunt &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
a) La un număr format din trei cifre diferite, cifrele sutelor se pot alege din &amp;lt;math&amp;gt;4&amp;lt;/math&amp;gt; valori, cifra zecilor cu &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt; valori și cifra unităților cu &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt; valori. În aceste condiții, obținem:&lt;br /&gt;
&amp;lt;math&amp;gt;4 \cdot 3 \cdot 2 = 24&amp;lt;/math&amp;gt; de numere.&lt;br /&gt;
&lt;br /&gt;
b) La numerele primiale de o cifră, cifra unităților este o dată &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, o dată &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;, o dată &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; și o dată &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La numerele primiale de două cifre, cifra unităților este de trei ori &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, de trei ori &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;, de trei ori &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; și de trei ori &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La numerele primiale de trei cifre, cifra unităților este de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;, de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; și de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
La numerele primiale de patru cifre, cifra unităților este de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;3&amp;lt;/math&amp;gt;, de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;5&amp;lt;/math&amp;gt; și de &amp;lt;math&amp;gt;6&amp;lt;/math&amp;gt; ori &amp;lt;math&amp;gt;7&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Atunci, cifra unităților sumei este cifra unităților numărului&lt;br /&gt;
&amp;lt;math&amp;gt;16 \cdot ( 2 + 3 + 5 + 7),&amp;lt;/math&amp;gt; adică &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;. Un pătrat perfect nu poate avea cifra unităților &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=E:15343&amp;diff=10551</id>
		<title>E:15343</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=E:15343&amp;diff=10551"/>
		<updated>2025-01-11T19:50:23Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;E:15343 (Mihaela Berindeanu, București)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Determinați numerele naturale a, b, c pentru care &amp;lt;math&amp;gt;3^a + 3^b + 3^c = 81 \cdot 2018&amp;lt;/math&amp;gt;.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție&amp;#039;&amp;#039;&amp;#039;  Presupunem, fără a restrânge generalitatea problemei, că &amp;lt;math&amp;gt;a \leq b \leq c&amp;lt;/math&amp;gt;. Ecuația devine   &amp;lt;math&amp;gt;3^a \cdot (1 + 3^{b-a} + 3^{c-a}) = 3^{8072}.&amp;lt;/math&amp;gt;   Numărul &amp;lt;math&amp;gt;3^{8072}&amp;lt;/math&amp;gt; se divide numai cu puteri ale lui 3. Dacă &amp;lt;math&amp;gt;b - a \neq 0&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt; c - a \neq 0 &amp;lt;/math&amp;gt;, atunci...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;E:15343 (Mihaela Berindeanu, București)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele naturale a, b, c pentru care &amp;lt;math&amp;gt;3^a + 3^b + 3^c = 81 \cdot 2018&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;
Presupunem, fără a restrânge generalitatea problemei, că &amp;lt;math&amp;gt;a \leq b \leq c&amp;lt;/math&amp;gt;. Ecuația devine  &lt;br /&gt;
&amp;lt;math&amp;gt;3^a \cdot (1 + 3^{b-a} + 3^{c-a}) = 3^{8072}.&amp;lt;/math&amp;gt;  &lt;br /&gt;
Numărul &amp;lt;math&amp;gt;3^{8072}&amp;lt;/math&amp;gt; se divide numai cu puteri ale lui 3. Dacă &amp;lt;math&amp;gt;b - a \neq 0&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt; c - a \neq 0 &amp;lt;/math&amp;gt;, atunci &amp;lt;math&amp;gt;1 + 3^{b-a} + 3^{c-a}&amp;lt;/math&amp;gt; este un număr care nu se divide cu 3, dar care divide &amp;lt;math&amp;gt;3^{8072}&amp;lt;/math&amp;gt;, imposibil.  &lt;br /&gt;
&lt;br /&gt;
Deducem că &amp;lt;math&amp;gt;b - a = 0&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;c - a = 0&amp;lt;/math&amp;gt;, adică &amp;lt;math&amp;gt;a = b = c.&amp;lt;/math&amp;gt; Cu aceasta, ecuația devine  &lt;br /&gt;
&amp;lt;math&amp;gt;3^a \cdot 3 = 3^{8072}&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;3^{a+1} = 3^{8072},&amp;lt;/math&amp;gt;  &lt;br /&gt;
de unde &amp;lt;math&amp;gt;a = 8071&amp;lt;/math&amp;gt; și atunci &amp;lt;math&amp;gt;a = b = c = 8071.&amp;lt;/math&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=E:15342&amp;diff=10550</id>
		<title>E:15342</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=E:15342&amp;diff=10550"/>
		<updated>2025-01-11T18:24:22Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;E:15342 (Marian Haiducu, Pitești)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Determinați restul împărțirii numărului 1234567898999 la 8.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție&amp;#039;&amp;#039;&amp;#039;  Putem scrie:  &amp;lt;math&amp;gt;1234567898999 = 1234567898 \cdot 1000 + 999 = 1234567898 \cdot 125 \cdot 8 + 124 \cdot 8 + 7 =&amp;lt;/math&amp;gt;  &amp;lt;math&amp;gt;= 8 \cdot (1234567898 \cdot 125 + 124) + 7.&amp;lt;/math&amp;gt;  Cum &amp;lt;math&amp;gt;7 &amp;lt; 8&amp;lt;/math&amp;gt;, rezultă că restul împărțirii este 7.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;E:15342 (Marian Haiducu, Pitești)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați restul împărțirii numărului 1234567898999 la 8.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Putem scrie:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;1234567898999 = 1234567898 \cdot 1000 + 999 = 1234567898 \cdot 125 \cdot 8 + 124 \cdot 8 + 7 =&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;math&amp;gt;= 8 \cdot (1234567898 \cdot 125 + 124) + 7.&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cum &amp;lt;math&amp;gt;7 &amp;lt; 8&amp;lt;/math&amp;gt;, rezultă că restul împărțirii este 7.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3811_-_Bisectoare1&amp;diff=9362</id>
		<title>3811 - Bisectoare1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3811_-_Bisectoare1&amp;diff=9362"/>
		<updated>2024-01-10T20:27:24Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau lungimile laturilor unui triunghi &#039;&#039;&#039; ABC&#039;&#039;&#039;. Aflati lungimile bisectoarelor duse din &#039;&#039;&#039; C, A, B&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039; a, b, c&#039;&#039;&#039;, reprezentand lungimile laturilor &#039;&#039;&#039; AB, BC, AC&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran lungimile bisectoarelor cu 2 zecimale exacte daca triunghiul este valid, altfel se afiseaza mesajul &#039;&#039;&#039; Imposibil&#039;&#039;&#039;.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; , iar daca se indeplinesc, se afiseaza mesajul &amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;a, b, c&#039;&#039;&#039; &amp;amp;les; 100&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 3&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respectă cerințele impuse.&lt;br /&gt;
 3.20&lt;br /&gt;
 2.14&lt;br /&gt;
 2.54&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Imposibil&lt;br /&gt;
 Datele de intrare nu respectă cerințele impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def citeste_laturi():&lt;br /&gt;
    a = float(input())  # Citirea valorii pentru latura AB&lt;br /&gt;
    b = float(input())  # Citirea valorii pentru latura BC&lt;br /&gt;
    c = float(input())  # Citirea valorii pentru latura AC&lt;br /&gt;
    return a, b, c&lt;br /&gt;
&lt;br /&gt;
def sunt_lungimi_valide(a, b, c):&lt;br /&gt;
    return 1 &amp;lt;= a &amp;lt;= 100 and 1 &amp;lt;= b &amp;lt;= 100 and 1 &amp;lt;= c &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
def este_triunghi_valid(a, b, c):&lt;br /&gt;
    return a + b &amp;gt; c and a + c &amp;gt; b and b + c &amp;gt; a&lt;br /&gt;
&lt;br /&gt;
def calculeaza_bisectoare(a, b, c):&lt;br /&gt;
    s = (a + b + c) / 2&lt;br /&gt;
    bisectoare_c = 2 * (s * b * c / (2 * s * s - b * b)) ** 0.5&lt;br /&gt;
    bisectoare_a = 2 * (s * a * c / (2 * s * s - a * a)) ** 0.5&lt;br /&gt;
    bisectoare_b = 2 * (s * a * b / (2 * s * s - c * c)) ** 0.5&lt;br /&gt;
    return bisectoare_c, bisectoare_a, bisectoare_b&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    a, b, c = citeste_laturi()&lt;br /&gt;
&lt;br /&gt;
    if sunt_lungimi_valide(a, b, c) and este_triunghi_valid(a, b, c):&lt;br /&gt;
        bisectoare_c, bisectoare_a, bisectoare_b = calculeaza_bisectoare(a, b, c)&lt;br /&gt;
        print(&amp;quot;{:.2f} {:.2f} {:.2f}&amp;quot;.format(bisectoare_c, bisectoare_a, bisectoare_b))&lt;br /&gt;
        print(&amp;quot;Datele de intrare respectă cerințele impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Imposibil&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respectă cerințele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație rezolvare ==&lt;br /&gt;
Primul pas implică citirea lungimilor laturilor triunghiului (a, b, c) de la tastatură&lt;br /&gt;
Funcția &#039;&#039;&#039;sunt_lungimi_valide(a, b, c) &#039;&#039;&#039; returnează True dacă lungimile sunt valide și False în caz contrar.&lt;br /&gt;
Funcția &#039;&#039;&#039;este_triunghi_valid&#039;&#039;&#039; (a, b, c) returnează True dacă acestea formează un triunghi valid și False în caz contrar.&lt;br /&gt;
Pasul 4 presupune calculul lungimilor bisectoarelor și le returnează sub formă de tuplă (bisectoare_c, bisectoare_a, bisectoare_b).&lt;br /&gt;
Ultimul pas implică afișarea lungimilor bisectoarelor cu 2 zecimale exacte.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3811_-_Bisectoare1&amp;diff=9361</id>
		<title>3811 - Bisectoare1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3811_-_Bisectoare1&amp;diff=9361"/>
		<updated>2024-01-10T20:27:06Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau lungimile laturilor unui triunghi &#039;&#039;&#039; ABC&#039;&#039;&#039;. Aflati lungimile bisectoarelor duse din &#039;&#039;&#039; C, A, B&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039; a, b, c&#039;&#039;&#039;, reprezentand lungimile laturilor &#039;&#039;&#039; AB, BC, AC&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran lungimile bisectoarelor cu 2 zecimale exacte daca triunghiul este valid, altfel se afiseaza mesajul &#039;&#039;&#039; Imposibil&#039;&#039;&#039;.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; , iar daca se indeplinesc, se afiseaza mesajul &amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;a, b, c&#039;&#039;&#039; &amp;amp;les; 100&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 3&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respectă cerințele impuse.&lt;br /&gt;
 3.20&lt;br /&gt;
 2.14&lt;br /&gt;
 2.54&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Imposibil&lt;br /&gt;
 Datele de intrare nu respectă cerințele impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def citeste_laturi():&lt;br /&gt;
    a = float(input())  # Citirea valorii pentru latura AB&lt;br /&gt;
    b = float(input())  # Citirea valorii pentru latura BC&lt;br /&gt;
    c = float(input())  # Citirea valorii pentru latura AC&lt;br /&gt;
    return a, b, c&lt;br /&gt;
&lt;br /&gt;
def sunt_lungimi_valide(a, b, c):&lt;br /&gt;
    return 1 &amp;lt;= a &amp;lt;= 100 and 1 &amp;lt;= b &amp;lt;= 100 and 1 &amp;lt;= c &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
def este_triunghi_valid(a, b, c):&lt;br /&gt;
    return a + b &amp;gt; c and a + c &amp;gt; b and b + c &amp;gt; a&lt;br /&gt;
&lt;br /&gt;
def calculeaza_bisectoare(a, b, c):&lt;br /&gt;
    s = (a + b + c) / 2&lt;br /&gt;
    bisectoare_c = 2 * (s * b * c / (2 * s * s - b * b)) ** 0.5&lt;br /&gt;
    bisectoare_a = 2 * (s * a * c / (2 * s * s - a * a)) ** 0.5&lt;br /&gt;
    bisectoare_b = 2 * (s * a * b / (2 * s * s - c * c)) ** 0.5&lt;br /&gt;
    return bisectoare_c, bisectoare_a, bisectoare_b&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    a, b, c = citeste_laturi()&lt;br /&gt;
&lt;br /&gt;
    if sunt_lungimi_valide(a, b, c) and este_triunghi_valid(a, b, c):&lt;br /&gt;
        bisectoare_c, bisectoare_a, bisectoare_b = calculeaza_bisectoare(a, b, c)&lt;br /&gt;
        print(&amp;quot;{:.2f} {:.2f} {:.2f}&amp;quot;.format(bisectoare_c, bisectoare_a, bisectoare_b))&lt;br /&gt;
        print(&amp;quot;Datele de intrare respectă cerințele impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Imposibil&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respectă cerințele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicație rezolvare ==&lt;br /&gt;
Primul pas implică citirea lungimilor laturilor triunghiului (a, b, c) de la tastatură&lt;br /&gt;
Funcția &#039;&#039;&#039;sunt_lungimi_valide(a, b, c) &#039;&#039;&#039; returnează True dacă lungimile sunt valide și False în caz contrar.&lt;br /&gt;
Funcția &#039;&#039;&#039;este_triunghi_valid&#039;&#039;&#039; (a, b, c) returnează True dacă acestea formează un triunghi valid și False în caz contrar.&lt;br /&gt;
Pasul 4 presupune calculul lungimilor bisectoarelor și le returnează sub formă de tuplă (bisectoare_c, bisectoare_a, bisectoare_b).&lt;br /&gt;
Ultimul pas implică afișarea lungimilor bisectoarelor cu 2 zecimale exacte.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0418_-_Subgraf&amp;diff=9360</id>
		<title>0418 - Subgraf</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0418_-_Subgraf&amp;diff=9360"/>
		<updated>2024-01-10T20:12:19Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă lista muchiilor unui graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri, etichetate de la 1 la n. Din acest graf se elimină toate vârfurile etichetate cu valori prime. Să se determine câte muchii va avea subgraful obținut.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;subgrafin.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie între &#039;&#039;&#039;i&#039;&#039;&#039; și &#039;&#039;&#039;j&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Pe ecran se va afișa mesajul: &#039;&#039;&#039;&amp;quot;Datele de intrare respectă cerințele impuse&amp;quot;&#039;&#039;&#039; daca se respecta datele de intrare iar in caz contrar se afiseaza mesajul &#039;&#039;&#039; “Datele de intrare nu respectă cerințele impuse” &#039;&#039;&#039;&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;subgrafout.txt&#039;&#039;&#039;va conţine pe prima linie numărul &#039;&#039;&#039;M&#039;&#039;&#039; de muchii ale subgrafului obținut.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 100 &lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;i, j&#039;&#039;&#039; &amp;amp;les; n&lt;br /&gt;
* muchiile se pot repeta în fișierul de intrare&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Subgrafin.txt&lt;br /&gt;
 5&lt;br /&gt;
 1 4&lt;br /&gt;
 2 5&lt;br /&gt;
 2 3&lt;br /&gt;
 2 1&lt;br /&gt;
 4 5&lt;br /&gt;
 3 2&lt;br /&gt;
 4 3&lt;br /&gt;
;Subgrafout.txt&lt;br /&gt;
 Datele de intrare respectă cerințele impuse&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Se elimină vârfurile 2 3 5. Subgraful va conține vârfurile 1 4, cu o singură muchie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Subgrafin.txt&lt;br /&gt;
 0&lt;br /&gt;
;Subgrafout.txt&lt;br /&gt;
 Datele de intrare nu respectă cerințele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def is_prime(num):&lt;br /&gt;
    if num &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(num ** 0.5) + 1):&lt;br /&gt;
        if num % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def count_edges_after_prime_removal(graph, n):&lt;br /&gt;
    primes = [i for i in range(2, n + 1) if is_prime(i)]&lt;br /&gt;
    vertices_to_remove = set(primes)&lt;br /&gt;
&lt;br /&gt;
    # Eliminăm vârfurile etichetate cu valori prime din graful original&lt;br /&gt;
    new_graph = [(i, j) for (i, j) in graph if i not in vertices_to_remove and j not in vertices_to_remove]&lt;br /&gt;
&lt;br /&gt;
    # Numărăm câte muchii rămân în subgraful obținut&lt;br /&gt;
    return len(new_graph)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_adjacency_matrix(matrix, dimensiune):&lt;br /&gt;
    # Verificăm dacă matricea este pătratică&lt;br /&gt;
    if len(matrix) != dimensiune:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă matricea este simetrică&lt;br /&gt;
    for i in range(dimensiune):&lt;br /&gt;
        for j in range(i + 1, dimensiune):&lt;br /&gt;
            if matrix[i][j] != matrix[j][i]:&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele de intrare din fișierul &amp;quot;subgraf.in&amp;quot;&lt;br /&gt;
        with open(&amp;quot;subgrafin.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
            n = int(fin.readline().strip())&lt;br /&gt;
            graph = [tuple(map(int, line.split())) for line in fin.readlines()]&lt;br /&gt;
&lt;br /&gt;
        # Verificăm respectarea restricțiilor&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 100) or any(not (1 &amp;lt;= i &amp;lt;= n and 1 &amp;lt;= j &amp;lt;= n) for i, j in graph):&lt;br /&gt;
            with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
                fout.write(&amp;quot;Datele de intrare nu respectă cerințele impuse\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        else:&lt;br /&gt;
            with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
                fout.write(&amp;quot;Datele de intrare respectă cerințele impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm numărul de muchii în subgraful obținut&lt;br /&gt;
        result_edges = count_edges_after_prime_removal(graph, n)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul în fișierul &amp;quot;subgrafout.txt&amp;quot;&lt;br /&gt;
        with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
            fout.write(f&amp;quot;{result_edges}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
            fout.write(f&amp;quot;Datele de intrare nu respectă cerințele impuse: {e}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0418_-_Subgraf&amp;diff=9359</id>
		<title>0418 - Subgraf</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0418_-_Subgraf&amp;diff=9359"/>
		<updated>2024-01-10T20:11:44Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă lista muchiilor unui graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri, etichetate de la 1 la n. Din acest graf se elimină toate vârfurile etichetate cu valori prime. Să se determine câte muchii va avea subgraful obținut.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;subgrafin.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând numărul de vârfuri ale grafului. Fiecare dintre următoarele linii conține câte o pereche de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie între &#039;&#039;&#039;i&#039;&#039;&#039; și &#039;&#039;&#039;j&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Pe ecran se va afișa mesajul: &#039;&#039;&#039;&amp;quot;Datele de intrare respectă cerințele impuse&amp;quot;&#039;&#039;&#039; daca se respecta datele de intrare iar in caz contrar se afiseaza mesajul &#039;&#039;&#039; “Datele de intrare nu respectă cerințele impuse” &#039;&#039;&#039;&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;subgrafout.txt&#039;&#039;&#039;va conţine pe prima linie numărul &#039;&#039;&#039;M&#039;&#039;&#039; de muchii ale subgrafului obținut.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 100 &lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;i, j&#039;&#039;&#039; &amp;amp;les; n&lt;br /&gt;
* muchiile se pot repeta în fișierul de intrare&lt;br /&gt;
&lt;br /&gt;
 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
Subgrafin.txt&lt;br /&gt;
 5&lt;br /&gt;
 1 4&lt;br /&gt;
 2 5&lt;br /&gt;
 2 3&lt;br /&gt;
 2 1&lt;br /&gt;
 4 5&lt;br /&gt;
 3 2&lt;br /&gt;
 4 3&lt;br /&gt;
Subgrafout.txt&lt;br /&gt;
 Datele de intrare respectă cerințele impuse&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Se elimină vârfurile 2 3 5. Subgraful va conține vârfurile 1 4, cu o singură muchie.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
Subgrafin.txt&lt;br /&gt;
 0&lt;br /&gt;
Subgrafout.txt&lt;br /&gt;
 Datele de intrare nu respectă cerințele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def is_prime(num):&lt;br /&gt;
    if num &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(num ** 0.5) + 1):&lt;br /&gt;
        if num % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def count_edges_after_prime_removal(graph, n):&lt;br /&gt;
    primes = [i for i in range(2, n + 1) if is_prime(i)]&lt;br /&gt;
    vertices_to_remove = set(primes)&lt;br /&gt;
&lt;br /&gt;
    # Eliminăm vârfurile etichetate cu valori prime din graful original&lt;br /&gt;
    new_graph = [(i, j) for (i, j) in graph if i not in vertices_to_remove and j not in vertices_to_remove]&lt;br /&gt;
&lt;br /&gt;
    # Numărăm câte muchii rămân în subgraful obținut&lt;br /&gt;
    return len(new_graph)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_adjacency_matrix(matrix, dimensiune):&lt;br /&gt;
    # Verificăm dacă matricea este pătratică&lt;br /&gt;
    if len(matrix) != dimensiune:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă matricea este simetrică&lt;br /&gt;
    for i in range(dimensiune):&lt;br /&gt;
        for j in range(i + 1, dimensiune):&lt;br /&gt;
            if matrix[i][j] != matrix[j][i]:&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele de intrare din fișierul &amp;quot;subgraf.in&amp;quot;&lt;br /&gt;
        with open(&amp;quot;subgrafin.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
            n = int(fin.readline().strip())&lt;br /&gt;
            graph = [tuple(map(int, line.split())) for line in fin.readlines()]&lt;br /&gt;
&lt;br /&gt;
        # Verificăm respectarea restricțiilor&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 100) or any(not (1 &amp;lt;= i &amp;lt;= n and 1 &amp;lt;= j &amp;lt;= n) for i, j in graph):&lt;br /&gt;
            with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
                fout.write(&amp;quot;Datele de intrare nu respectă cerințele impuse\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        else:&lt;br /&gt;
            with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
                fout.write(&amp;quot;Datele de intrare respectă cerințele impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm numărul de muchii în subgraful obținut&lt;br /&gt;
        result_edges = count_edges_after_prime_removal(graph, n)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul în fișierul &amp;quot;subgrafout.txt&amp;quot;&lt;br /&gt;
        with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;a&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
            fout.write(f&amp;quot;{result_edges}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        with open(&amp;quot;subgrafout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as fout:&lt;br /&gt;
            fout.write(f&amp;quot;Datele de intrare nu respectă cerințele impuse: {e}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3163_-_Secv_Max_Val&amp;diff=9358</id>
		<title>3163 - Secv Max Val</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3163_-_Secv_Max_Val&amp;diff=9358"/>
		<updated>2024-01-10T19:54:28Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir de &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; numere naturale și un număr natural &#039;&#039;&#039;valoare_maxima&#039;&#039;&#039;. Determinați lungimea maximă a unei secvențe cu proprietatea că suma numerelor din aceasta este mai mică sau egală cu &#039;&#039;&#039;valoare_maxima&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;secvmaxvalin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; și &#039;&#039;&#039;valoare_maxima&#039;&#039;&#039;, iar pe a două linie &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;secvmaxvalout.txt&#039;&#039;&#039; va conține pe prima linie lungimea maximă a unei secvențe care satisface proprietatea dată.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund cerintelor impuse.&amp;quot; , iar daca se indeplinesc, se afiseaza mesajul &amp;quot;Datele de intrare corespund cerintelor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; &amp;amp;les; 200000 &lt;br /&gt;
* numerele de pe a două linie a fișierului de intrare vor fi mai mici decât 1.000.000.000&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;valoare_maxima&#039;&#039;&#039; &amp;amp;les; 2^63 &lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; secvmaxvalin.txt&lt;br /&gt;
 5 11&lt;br /&gt;
 4 5 2 3 9&lt;br /&gt;
&lt;br /&gt;
; secvmaxvalout.txt&lt;br /&gt;
 Datele de intrare corespund cerintelor impuse.&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
==Explicatie==&lt;br /&gt;
O secvență de lungime maximă cu suma elementelor mai mică sau egală cu 11 este 5 2 3.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; secvmaxvalin.txt&lt;br /&gt;
 5 10&lt;br /&gt;
 1000000001 8 5 19 1&lt;br /&gt;
; secvmaxvalout.txt&lt;br /&gt;
 Datele de intrare nu corespund cerintelor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def lungime_maxima_secventa(numar_elemente, valoare_maxima, numere):&lt;br /&gt;
    # Verificare restricții date de intrare&lt;br /&gt;
    if not (1 &amp;lt;= numar_elemente &amp;lt;= 200000 and 1 &amp;lt;= valoare_maxima &amp;lt;= 263 and all(1 &amp;lt;= num &amp;lt;= 1000000000 for num in numere)):&lt;br /&gt;
        with open(&amp;quot;secvmaxvalout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    suma_actuala = 0&lt;br /&gt;
    lungime_maxima = 0&lt;br /&gt;
    stanga = 0&lt;br /&gt;
&lt;br /&gt;
    for dreapta in range(numar_elemente):&lt;br /&gt;
        suma_actuala += numere[dreapta]&lt;br /&gt;
&lt;br /&gt;
        while suma_actuala &amp;gt; valoare_maxima:&lt;br /&gt;
            suma_actuala -= numere[stanga]&lt;br /&gt;
            stanga += 1&lt;br /&gt;
&lt;br /&gt;
        lungime_maxima = max(lungime_maxima, dreapta - stanga + 1)&lt;br /&gt;
&lt;br /&gt;
    # Scrierea mesajului în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;secvmaxvalout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as output_file:&lt;br /&gt;
        output_file.write(&amp;quot;Datele de intrare corespund restricțiilor impuse.\n&amp;quot;)&lt;br /&gt;
        output_file.write(str(lungime_maxima))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor din fișierul de intrare&lt;br /&gt;
    with open(&amp;quot;secvmaxvalin.txt&amp;quot;, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as input_file:&lt;br /&gt;
        numar_elemente, valoare_maxima = map(int, input_file.readline().split())&lt;br /&gt;
        numere = list(map(int, input_file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Determinarea lungimii maxime a unei secvențe&lt;br /&gt;
    lungime_maxima_secventa(numar_elemente, valoare_maxima, numere)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9357</id>
		<title>1608 - Sortare Divizori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9357"/>
		<updated>2024-01-10T19:31:26Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: /* Exemplul 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Ordonați descrescător cele &#039;&#039;&#039;n&#039;&#039;&#039; numere după numărul lor de divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sortare_divizoriin.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 nenule separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sortare_divizoriout.txt&#039;&#039;&#039; va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;le; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 1.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;
* dacă există mai multe numere care au același număr de divizori, acestea vor fi ordonate crescător&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sortare_divizoriin.txt&lt;br /&gt;
 5&lt;br /&gt;
 12 20 4 100 13&lt;br /&gt;
;sortare_divizoriout.txt&lt;br /&gt;
 Datele de intrare respectă cerințele impuse.&lt;br /&gt;
 100 12 20 4 13&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
12 are 6 divizori, 20 are 6 divizori, 4 are 3 divizori, 100 are 9 divizori, 13 are 2 divizori, 12 și 20 au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13.&lt;br /&gt;
==Exemplul2==&lt;br /&gt;
; sortare_divizoriin.txt&lt;br /&gt;
 5&lt;br /&gt;
 12 20 4 100 1000000001&lt;br /&gt;
; sortare_divizoriout.txt&lt;br /&gt;
 Datele de intrare nu respectă cerințele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 def numar_divizori(numar):&lt;br /&gt;
    divizori = 0&lt;br /&gt;
    for i in range(1, numar + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            divizori += 1&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
def sortare_divizori(n, numere):&lt;br /&gt;
    # Calculează numărul de divizori pentru fiecare număr și creează o listă de tupluri (număr, număr_divizori)&lt;br /&gt;
    numere_divizori = [(nr, numar_divizori(nr)) for nr in numere]&lt;br /&gt;
&lt;br /&gt;
    # Sortează lista de tupluri în funcție de numărul de divizori descrescător și apoi după valoarea numărului crescător&lt;br /&gt;
    numere_divizori.sort(key=lambda x: (-x[1], x[0]))&lt;br /&gt;
&lt;br /&gt;
    return [nr for nr, _ in numere_divizori]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;sortare_divizoriin.txt&amp;quot;, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            if not 1 &amp;lt;= n &amp;lt;= 1000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
            numere = list(map(int, f.readline().split()))&lt;br /&gt;
            if not all(1 &amp;lt;= nr &amp;lt; 1000000000 for nr in numere):&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
        with open(&amp;quot;sortare_divizoriout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
            f_out.write(&amp;quot;Datele de intrare respectă cerințele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            rezultat = sortare_divizori(n, numere)&lt;br /&gt;
            f_out.write(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        with open(&amp;quot;sortare_divizoriout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
            f_out.write(f&amp;quot;Datele de intrare nu respectă cerințele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9356</id>
		<title>1608 - Sortare Divizori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9356"/>
		<updated>2024-01-10T19:30:43Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Ordonați descrescător cele &#039;&#039;&#039;n&#039;&#039;&#039; numere după numărul lor de divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sortare_divizoriin.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 nenule separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sortare_divizoriout.txt&#039;&#039;&#039; va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;le; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 1.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;
* dacă există mai multe numere care au același număr de divizori, acestea vor fi ordonate crescător&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sortare_divizoriin.txt&lt;br /&gt;
 5&lt;br /&gt;
 12 20 4 100 13&lt;br /&gt;
;sortare_divizoriout.txt&lt;br /&gt;
 100 12 20 4 13&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
12 are 6 divizori, 20 are 6 divizori, 4 are 3 divizori, 100 are 9 divizori, 13 are 2 divizori, 12 și 20 au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13.&lt;br /&gt;
==Exemplul2==&lt;br /&gt;
; sortare_divizoriin.txt&lt;br /&gt;
 5&lt;br /&gt;
 12 20 4 100 1000000001&lt;br /&gt;
; sortare_divizoriout.txt&lt;br /&gt;
 Datele de intrare nu respectă cerințele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 def numar_divizori(numar):&lt;br /&gt;
    divizori = 0&lt;br /&gt;
    for i in range(1, numar + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            divizori += 1&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
def sortare_divizori(n, numere):&lt;br /&gt;
    # Calculează numărul de divizori pentru fiecare număr și creează o listă de tupluri (număr, număr_divizori)&lt;br /&gt;
    numere_divizori = [(nr, numar_divizori(nr)) for nr in numere]&lt;br /&gt;
&lt;br /&gt;
    # Sortează lista de tupluri în funcție de numărul de divizori descrescător și apoi după valoarea numărului crescător&lt;br /&gt;
    numere_divizori.sort(key=lambda x: (-x[1], x[0]))&lt;br /&gt;
&lt;br /&gt;
    return [nr for nr, _ in numere_divizori]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;sortare_divizoriin.txt&amp;quot;, &amp;quot;r&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f:&lt;br /&gt;
            n = int(f.readline())&lt;br /&gt;
            if not 1 &amp;lt;= n &amp;lt;= 1000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
            numere = list(map(int, f.readline().split()))&lt;br /&gt;
            if not all(1 &amp;lt;= nr &amp;lt; 1000000000 for nr in numere):&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
        with open(&amp;quot;sortare_divizoriout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
            f_out.write(&amp;quot;Datele de intrare respectă cerințele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            rezultat = sortare_divizori(n, numere)&lt;br /&gt;
            f_out.write(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        with open(&amp;quot;sortare_divizoriout.txt&amp;quot;, &amp;quot;w&amp;quot;, encoding=&amp;quot;utf-8&amp;quot;) as f_out:&lt;br /&gt;
            f_out.write(f&amp;quot;Datele de intrare nu respectă cerințele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9354</id>
		<title>1608 - Sortare Divizori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9354"/>
		<updated>2024-01-10T19:01:52Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Ordonați descrescător cele &#039;&#039;&#039;n&#039;&#039;&#039; numere după numărul lor de divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sortare_divizoriin.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 nenule separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sortare_divizoriout.txt&#039;&#039;&#039; va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;le; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 1.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;
* dacă există mai multe numere care au același număr de divizori, acestea vor fi ordonate crescător&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; sortare_divizoriin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 12 20 4 100 13&lt;br /&gt;
;sortare_divizoriout.txt&lt;br /&gt;
: 100 12 20 4 13&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 def numar_divizori(numar):&lt;br /&gt;
    divizori = 0&lt;br /&gt;
    for i in range(1, numar + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            divizori += 1&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citim numărul n și lista de numere din fișierul de intrare&lt;br /&gt;
    with open(&amp;quot;sortare_divizoriin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        numere = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm restricțiile impuse pentru numere&lt;br /&gt;
    numere = [numar for numar in numere if numar &amp;lt; 1000000000]&lt;br /&gt;
&lt;br /&gt;
    # Calculăm numărul de divizori pentru fiecare număr și sortăm numerele în ordine descrescătoare după numărul de divizori,&lt;br /&gt;
    # iar în caz de egalitate, sortăm crescător&lt;br /&gt;
    numere.sort(key=lambda x: (numar_divizori(x), -x), reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;sortare_divizoriout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        for numar in numere:&lt;br /&gt;
            f.write(str(numar) + &amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație==&lt;br /&gt;
12 are 6 divizori, 20 are 6 divizori, 4 are 3 divizori, 100 are 9 divizori, 13 are 2 divizori, 12 și 20 au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9353</id>
		<title>1608 - Sortare Divizori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1608_-_Sortare_Divizori&amp;diff=9353"/>
		<updated>2024-01-10T18:59:58Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Ordonați descrescător cele &#039;&#039;&#039;n&#039;&#039;&#039; numere după numărul lor de divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sortare_divizoriin.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 nenule separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sortare_divizoriout.txt&#039;&#039;&#039; va conține cele n numere aflate pe a doua linie a fișierului de intrare ordonate descrescător după numărul de divizori.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;le; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 1.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;
* dacă există mai multe numere care au același număr de divizori, acestea vor fi ordonate crescător&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; sortare_divizoriin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 12 20 4 100 13&lt;br /&gt;
;sortare_divizoriout.txt&lt;br /&gt;
: 100 12 20 4 13&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 def numar_divizori(numar):&lt;br /&gt;
    divizori = 0&lt;br /&gt;
    for i in range(1, numar + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            divizori += 1&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citim numărul n și lista de numere din fișierul de intrare&lt;br /&gt;
    with open(&amp;quot;sortare_divizori.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        numere = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm restricțiile impuse pentru numere&lt;br /&gt;
    numere = [numar for numar in numere if numar &amp;lt; 1000000000]&lt;br /&gt;
&lt;br /&gt;
    # Calculăm numărul de divizori pentru fiecare număr și sortăm numerele în ordine descrescătoare după numărul de divizori,&lt;br /&gt;
    # iar în caz de egalitate, sortăm crescător&lt;br /&gt;
    numere.sort(key=lambda x: (numar_divizori(x), -x), reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;sortare_divizori.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        for numar in numere:&lt;br /&gt;
            f.write(str(numar) + &amp;quot; &amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație==&lt;br /&gt;
12 are 6 divizori, 20 are 6 divizori, 4 are 3 divizori, 100 are 9 divizori, 13 are 2 divizori, 12 și 20 au același număr de divizori. Așadar ordinea va fi 100 12 20 4 13.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2224_-_Mset&amp;diff=9351</id>
		<title>2224 - Mset</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2224_-_Mset&amp;diff=9351"/>
		<updated>2024-01-09T20:06:08Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Context ==&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039;, inițial vid. Se definesc următoarele operații:&lt;br /&gt;
*&#039;&#039;&#039;1 x&#039;&#039;&#039; – introduce valoarea &#039;&#039;&#039;x&#039;&#039;&#039; în șirul &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;2 x&#039;&#039;&#039; – șterge toate aparițiile lui &#039;&#039;&#039;x &#039;&#039;&#039;din &#039;&#039;&#039;A &#039;&#039;&#039; (dacă &#039;&#039;&#039;x &#039;&#039;&#039;nu apare deloc în &#039;&#039;&#039;A&#039;&#039;&#039;, operația nu se execută)&lt;br /&gt;
*&#039;&#039;&#039;3 &#039;&#039;&#039;– interogare: care este cea mai mică valoare din &#039;&#039;&#039;A &#039;&#039;&#039;și de câte ori apare (dacă &#039;&#039;&#039;A &#039;&#039;&#039;este șir vid, se va afișa doar valoarea &#039;&#039;&#039;-1&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Dându-se &#039;&#039;&#039;N&#039;&#039;&#039; operații, trebuie să afișați răspunsul la fiecare operație de tip &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;msetin.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;N&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii sunt date cele &#039;&#039;&#039;N&#039;&#039;&#039; operații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;msetout.txt&#039;&#039;&#039; se vor afișa pe câte o linie răspunsurile la operațiile de tip 3.În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ N ≤ 200 000&#039;&#039;&#039;&lt;br /&gt;
*	Va exista cel puțin o operație de tip &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
*	Valorile care se introduc în mulțime sunt numere naturale mai mici decât &#039;&#039;&#039;2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; msetin.txt &lt;br /&gt;
 14&lt;br /&gt;
 3&lt;br /&gt;
 1 55&lt;br /&gt;
 1 55&lt;br /&gt;
 3&lt;br /&gt;
 1 40&lt;br /&gt;
 3&lt;br /&gt;
 1 7&lt;br /&gt;
 1 7&lt;br /&gt;
 3&lt;br /&gt;
 2 7 &lt;br /&gt;
 1 50&lt;br /&gt;
 3&lt;br /&gt;
 2 40&lt;br /&gt;
 3&lt;br /&gt;
; msetout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 -1 0&lt;br /&gt;
 55 2&lt;br /&gt;
 40 1&lt;br /&gt;
 7 2&lt;br /&gt;
 40 1&lt;br /&gt;
 50 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; msetin.txt &lt;br /&gt;
 3&lt;br /&gt;
 1 4&lt;br /&gt;
 2 3&lt;br /&gt;
 2 5&lt;br /&gt;
; msetout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def process_operations(operations):&lt;br /&gt;
    result = []&lt;br /&gt;
    values = []&lt;br /&gt;
&lt;br /&gt;
    for op, *args in operations:&lt;br /&gt;
        if op == 1:&lt;br /&gt;
            x, = args&lt;br /&gt;
            values.append(x)&lt;br /&gt;
        elif op == 2:&lt;br /&gt;
            x, = args&lt;br /&gt;
            values = [val for val in values if val != x]&lt;br /&gt;
        elif op == 3:&lt;br /&gt;
            if values:&lt;br /&gt;
                min_value = min(values)&lt;br /&gt;
                count = values.count(min_value)&lt;br /&gt;
                result.append((min_value, count))&lt;br /&gt;
            else:&lt;br /&gt;
                result.append((-1, 0))&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def validate_input(operations):&lt;br /&gt;
    for op, *args in operations:&lt;br /&gt;
        if op == 3:&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;msetin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        operations = [list(map(int, line.split())) for line in file]&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(operations):&lt;br /&gt;
        with open(&amp;quot;msetout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    results = process_operations(operations)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;msetout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        output_file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        for min_value, count in results:&lt;br /&gt;
            output_file.write(f&amp;quot;{min_value} {count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1794_-_Aint&amp;diff=9350</id>
		<title>1794 - Aint</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1794_-_Aint&amp;diff=9350"/>
		<updated>2024-01-09T20:05:17Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un vector cu &#039;&#039;&#039;N&#039;&#039;&#039; elemente numere naturale numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;M&#039;&#039;&#039; operații de forma:&lt;br /&gt;
*&#039;&#039;&#039;1 x y&#039;&#039;&#039;, cu semnificația: elementul de poziția &#039;&#039;&#039;x&#039;&#039;&#039; ia valoarea valoarea &#039;&#039;&#039;y&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;2 x y&#039;&#039;&#039;: se determină valoarea minimă a elementelor cu indici cuprinși între &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039;.&lt;br /&gt;
Afișați rezultatele operațiilor de tipul &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;aintin.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;. Pe următoarea linie se află &#039;&#039;&#039;N&#039;&#039;&#039; elemente ce reprezintă elementele vectorului. Pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii se află operațiile efectuate pe vector.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;aintout.txt&#039;&#039;&#039; va conține răspunsurile operațiilor de tipul &#039;&#039;&#039;2&#039;&#039;&#039;, în ordinea în care apar în fișierul de intrare.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ N,M ≤ 100000&#039;&#039;&#039;&lt;br /&gt;
*Elementele vectorului sunt &#039;&#039;&#039;≤ 1000000000&#039;&#039;&#039;&lt;br /&gt;
*Pentru operațiile de tipul 1, &#039;&#039;&#039;1 ≤ x ≤ N, 0 ≤ y ≤ 1000000000&#039;&#039;&#039;&lt;br /&gt;
*Pentru operațiile de tipul 2, &#039;&#039;&#039;1 ≤ x ≤ y ≤ N&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; aintin.txt&lt;br /&gt;
 7 4&lt;br /&gt;
 2 3 4 1 2 7 2&lt;br /&gt;
 1 2 3&lt;br /&gt;
 1 4 6&lt;br /&gt;
 2 2 6&lt;br /&gt;
 2 1 7&lt;br /&gt;
; aintout.txt&lt;br /&gt;
 2&lt;br /&gt;
 2 &lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; aintin.txt&lt;br /&gt;
 8 3&lt;br /&gt;
 2 3 4 1 2 7 2&lt;br /&gt;
 1 2 3&lt;br /&gt;
 1 10 6&lt;br /&gt;
 2 2 6&lt;br /&gt;
; aintout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;aintin.txt&amp;quot;, &amp;quot;r&amp;quot;) as infile, open(&amp;quot;aintout.txt&amp;quot;, &amp;quot;w&amp;quot;) as outfile:&lt;br /&gt;
        N, M = map(int, infile.readline().split())&lt;br /&gt;
        nums = list(map(int, infile.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        for _ in range(M):&lt;br /&gt;
            op, x, y = map(int, infile.readline().split())&lt;br /&gt;
&lt;br /&gt;
            if not (1 &amp;lt;= N &amp;lt;= 100000 and 1 &amp;lt;= M &amp;lt;= 100000 and all(1 &amp;lt;= num &amp;lt;= 1000000000 for num in nums) and&lt;br /&gt;
                    (op == 1 and 1 &amp;lt;= x &amp;lt;= N and 0 &amp;lt;= y &amp;lt;= 1000000000 or op == 2 and 1 &amp;lt;= x &amp;lt;= y &amp;lt;= N)):&lt;br /&gt;
                outfile.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
                return&lt;br /&gt;
&lt;br /&gt;
            if op == 1:&lt;br /&gt;
                nums[x - 1] = y&lt;br /&gt;
            elif op == 2:&lt;br /&gt;
                subvec = nums[x - 1:y]&lt;br /&gt;
                subvec.sort()&lt;br /&gt;
                outfile.write(f&amp;quot;{subvec[0]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        outfile.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3589_-_probleme&amp;diff=9349</id>
		<title>3589 - probleme</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3589_-_probleme&amp;diff=9349"/>
		<updated>2024-01-09T19:35:49Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
O culegere de probleme de informatică conține &#039;&#039;&#039;n&#039;&#039;&#039; probleme, dintre care &#039;&#039;&#039;m&#039;&#039;&#039; sunt probleme ușoare. Bubu dorește să rezolve &#039;&#039;&#039;k&#039;&#039;&#039; probleme din culegere. În câte moduri poate alege Bubu cele &#039;&#039;&#039;k&#039;&#039;&#039; probleme, astfel încât între cele &#039;&#039;&#039;k&#039;&#039;&#039; probleme alese să existe cel puțin &#039;&#039;&#039;s&#039;&#039;&#039; probleme ușoare? Deoarece numărul obținut poate fi foarte mare, valoarea acestuia trebuie precizată modulo &#039;&#039;&#039;1000003&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;problemein.txt&#039;&#039;&#039; conține patru numere naturale &#039;&#039;&#039;n&#039;&#039;&#039; (numărul problemelor din culegere), &#039;&#039;&#039;m&#039;&#039;&#039; (numărul problemelor ușoare), &#039;&#039;&#039;k&#039;&#039;&#039; (numărul de probleme care trebuie rezolvate) și &#039;&#039;&#039;s&#039;&#039;&#039; (numărul minim de probleme ușoare din cele &#039;&#039;&#039;k&#039;&#039;&#039;), despărțite prin câte un spațiu.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;problemeout.txt&#039;&#039;&#039; va conține pe prima linie un număr natural reprezentând numărul de moduri în care poate alege Bubu cele &#039;&#039;&#039;k&#039;&#039;&#039; probleme, astfel încât între acestea să existe cel puțin &#039;&#039;&#039;s&#039;&#039;&#039; probleme ușoare. Acestă valoare trebuie precizată modulo &#039;&#039;&#039;1000003&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*1 &amp;amp;le; s &amp;amp;le;  m &amp;amp;le;  n &amp;amp;le;  100000 (numere naturale)&lt;br /&gt;
*1 &amp;amp;le;  k &amp;amp;le;  n&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; problemein.txt &lt;br /&gt;
 6 4 3 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; problemeout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
  16&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; problemein.txt &lt;br /&gt;
 4 5 3 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; problemeout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def combinari_modulo(n, k, modulo):&lt;br /&gt;
    result = 1&lt;br /&gt;
    for i in range(k):&lt;br /&gt;
        result = (result * (n - i)) % modulo&lt;br /&gt;
        result = (result * pow(i + 1, -1, modulo)) % modulo  # calculul inversului modular&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def moduri_alegere_probleme(n, m, k, s, modulo):&lt;br /&gt;
    result = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(s, min(m, k) + 1):&lt;br /&gt;
        result = (result + combinari_modulo(m, i, modulo) * combinari_modulo(n - m, k - i, modulo)) % modulo&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;problemein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            n, m, k, s = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
        # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
        if 1 &amp;lt;= s &amp;lt;= m &amp;lt;= n &amp;lt;= 100000 and 1 &amp;lt;= k &amp;lt;= n:&lt;br /&gt;
            # Afisare mesaj inainte de rezolvare&lt;br /&gt;
            with open(&amp;quot;problemeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
                f_out.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
                result = moduri_alegere_probleme(n, m, k, s, 1000003)&lt;br /&gt;
                f_out.write(f&amp;quot;{result}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
            with open(&amp;quot;problemeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
                f_out.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1297_-_triunghiul&amp;diff=9348</id>
		<title>1297 - triunghiul</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1297_-_triunghiul&amp;diff=9348"/>
		<updated>2024-01-09T19:35:08Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă următoarul triunghi de numere:&lt;br /&gt;
     1&lt;br /&gt;
    1 1&lt;br /&gt;
   1 2 1&lt;br /&gt;
  1 3 3 1&lt;br /&gt;
 1 4 6 4 1&lt;br /&gt;
 ..........&lt;br /&gt;
Deduceți regula după care a fost format triunghiul si afișați numerele aflate pe a &#039;&#039;&#039;n&#039;&#039;&#039;-lea linie a triunghiului.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;triunghiulin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;triunghiulout.txt&#039;&#039;&#039; va conține pe prima linie numerele care se află pe a &#039;&#039;&#039;n&#039;&#039;&#039;-lea linie din triunghi, separate prin câte un spațiu.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*0 &amp;amp;le; n &amp;amp;le; 19&lt;br /&gt;
*prima linie din triunghi se numerotează cu 0&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; triunghiulin.txt&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
; triunghiulout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
  1 5 10 10 5 1&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; triunghiulin.txt&lt;br /&gt;
 20&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; triunghiulout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def combinari(n, k):&lt;br /&gt;
    if k == 0 or k == n:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        return combinari(n-1, k-1) + combinari(n-1, k)&lt;br /&gt;
&lt;br /&gt;
def linie_triunghi(n):&lt;br /&gt;
    return [combinari(n, k) for k in range(n + 1)]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;triunghiulin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
        # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
        if 0 &amp;lt;= n &amp;lt;= 19:&lt;br /&gt;
            # Afisare mesaj inainte de rezolvare&lt;br /&gt;
            with open(&amp;quot;triunghiulout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
                f_out.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
                f_out.write(&amp;quot; &amp;quot;.join(map(str, linie_triunghi(n))) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            with open(&amp;quot;triunghiulout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
                f_out.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2034_-_Archpsod&amp;diff=9347</id>
		<title>2034 - Archpsod</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2034_-_Archpsod&amp;diff=9347"/>
		<updated>2024-01-09T19:34:15Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
Vrăjitorul Arpsod s-a plictisit groaznic așa că s-a gândit să își cheme prietenii (vrăjitori din regatele vecine) la un joc. Deoarece nu crede în “noroc”, Arpsod i-a provocat la tir cu arcul. Câștigătorul va fi cel ce va avea distanța maximă între două săgeți aflate pe țintă&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Arpsod vă roagă să faceți un program care, pentru un număr &#039;&#039;&#039;N&#039;&#039;&#039; cunoscut de trageri și poziția fiecărei săgeți pe țintă, determină distanța maximă dintre două săgeți.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
În fișierul &#039;&#039;&#039;archpsodin.txt&#039;&#039;&#039;, pe prima linie, se va afla numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de trageri. Pe fiecare din următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii, se află două numere întregi &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039;, reprezentând coordonatele săgeților pe țintă.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
În fișierul &#039;&#039;&#039;archpsodout.txt&#039;&#039;&#039;, pe prima și singura linie se va afișa un număr real reprezentând distanța maximă dintre două săgeți. Răspunsul este considerat corect dacă diferența față de răspunsul oficial este mai mică de &#039;&#039;&#039;10-6&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*2 ≤ &#039;&#039;&#039;N&#039;&#039;&#039; ≤ 100.000&lt;br /&gt;
*-1.000 ≤ &#039;&#039;&#039;x, y&#039;&#039;&#039; ≤ 1.000&lt;br /&gt;
*Se garantează că toate cele &#039;&#039;&#039;N&#039;&#039;&#039; săgeți sunt pe țintă.&lt;br /&gt;
*Coordonatele planului sunt carteziene&lt;br /&gt;
*Originea planului este considerată centrul țintei.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; archpsodin.txt&lt;br /&gt;
 2&lt;br /&gt;
 2 2&lt;br /&gt;
 -1 -2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; archpsodout.txt&lt;br /&gt;
  Datele de intrare respecta cerintele impuse.&lt;br /&gt;
  5.0000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; archpsodin.txt&lt;br /&gt;
 5&lt;br /&gt;
 -4 1&lt;br /&gt;
 -100 0&lt;br /&gt;
 0 4&lt;br /&gt;
 2 -3&lt;br /&gt;
 2 300&lt;br /&gt;
&lt;br /&gt;
; archpsodout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 316.865902&lt;br /&gt;
==Explicatie==&lt;br /&gt;
În exemplul al doilea, distanța maximă este dată de punctele &#039;&#039;&#039; (-100, 0) &#039;&#039;&#039; și &#039;&#039;&#039; (2, 300) &#039;&#039;&#039;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 1&lt;br /&gt;
 2 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def distanta_euclidiana(p1, p2):&lt;br /&gt;
    return math.sqrt((p1[0] - p2[0])**2 + (p1[1] - p2[1])**2)&lt;br /&gt;
&lt;br /&gt;
def distanta_maxima_sagetilor(N, sageți):&lt;br /&gt;
    distanta_maxima = 0.0&lt;br /&gt;
&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(i + 1, N):&lt;br /&gt;
            distanta = distanta_euclidiana(sageți[i], sageți[j])&lt;br /&gt;
            distanta_maxima = max(distanta_maxima, distanta)&lt;br /&gt;
&lt;br /&gt;
    return distanta_maxima&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;archpsodin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        N = int(f.readline().strip())&lt;br /&gt;
        sageți = [tuple(map(float, f.readline().strip().split())) for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
    # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
    if 2 &amp;lt;= N &amp;lt;= 100000 and all(-1000 &amp;lt;= x &amp;lt;= 1000 and -1000 &amp;lt;= y &amp;lt;= 1000 for x, y in sageți):&lt;br /&gt;
        # Afisare mesaj inainte de rezolvare&lt;br /&gt;
        with open(&amp;quot;archpsodout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
            f.write(f&amp;quot;{distanta_maxima_sagetilor(N, sageți):.6f}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(&amp;quot;archpsodout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0934_-_Distanta_Punct_Segment&amp;diff=9346</id>
		<title>0934 - Distanta Punct Segment</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0934_-_Distanta_Punct_Segment&amp;diff=9346"/>
		<updated>2024-01-09T19:32:25Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau în plan, un punct și un segment. Să se determine distanța minimă de la punctul dat la un punct aparținând segmentului.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;distantapunctsegmentin.txt&#039;&#039;&#039; conține pe prima linie 6 numere naturale separate prin spații, respectiv: &#039;&#039;&#039;X1, Y1, X2, Y2, X3, Y3&#039;&#039;&#039;. Se cere determinarea distanței minime de la punctul de coordonate &#039;&#039;&#039;(X1, Y1)&#039;&#039;&#039; la un punct aparținând segmentului cu capetele în punctele &#039;&#039;&#039;(X2, Y2)&#039;&#039;&#039; și &#039;&#039;&#039;(X3, Y3)&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;distantapunctsegmentout.txt&#039;&#039;&#039; va conține pe prima linie un număr real cu exact două zecimale exacte (fără rotunjire).&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între -1001 și 1001.&lt;br /&gt;
*Punctele care determină segmentul sunt distincte.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; distantapunctsegmentin.txt&lt;br /&gt;
 0 1 0 0 1 0&lt;br /&gt;
; distantapunctsegmentout.txt&lt;br /&gt;
  Datele de intrare respecta cerintele impuse.&lt;br /&gt;
  1.00&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; distantapunctsegmentin.txt&lt;br /&gt;
 1 2 3 4 3 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; distantapunctsegmentout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def distanta_punct_la_segment(X1, Y1, X2, Y2, X3, Y3):&lt;br /&gt;
    # Calculează distanța de la punct la linia dreaptă&lt;br /&gt;
    numer = (X3 - X2) * (X2 - X1) + (Y3 - Y2) * (Y2 - Y1)&lt;br /&gt;
    denom = (X3 - X2)**2 + (Y3 - Y2)**2&lt;br /&gt;
    u = numer / denom&lt;br /&gt;
&lt;br /&gt;
    # Determină punctul cel mai apropiat de dreaptă&lt;br /&gt;
    if u &amp;lt; 0:&lt;br /&gt;
        xp, yp = X2, Y2&lt;br /&gt;
    elif u &amp;gt; 1:&lt;br /&gt;
        xp, yp = X3, Y3&lt;br /&gt;
    else:&lt;br /&gt;
        xp = X2 + u * (X3 - X2)&lt;br /&gt;
        yp = Y2 + u * (Y3 - Y2)&lt;br /&gt;
&lt;br /&gt;
    # Calculează distanța de la punct la punctul cel mai apropiat de dreaptă&lt;br /&gt;
    distanta = math.sqrt((X1 - xp)**2 + (Y1 - yp)**2)&lt;br /&gt;
    return distanta&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;distantapunctsegmentin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        X1, Y1, X2, Y2, X3, Y3 = map(int, f.readline().strip().split())&lt;br /&gt;
&lt;br /&gt;
    # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
    if (-1001 &amp;lt;= X1 &amp;lt;= 1001) and (-1001 &amp;lt;= Y1 &amp;lt;= 1001) and (-1001 &amp;lt;= X2 &amp;lt;= 1001) and (-1001 &amp;lt;= Y2 &amp;lt;= 1001) and (-1001 &amp;lt;= X3 &amp;lt;= 1001) and (-1001 &amp;lt;= Y3 &amp;lt;= 1001) and (X2, Y2) != (X3, Y3):&lt;br /&gt;
        # Afisare mesaj inainte de rezolvare&lt;br /&gt;
        with open(&amp;quot;distantapunctsegmentout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
            f.write(f&amp;quot;{distanta_punct_la_segment(X1, Y1, X2, Y2, X3, Y3):.2f}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(&amp;quot;distantapunctsegmentout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0934_-_Distanta_Punct_Segment&amp;diff=9345</id>
		<title>0934 - Distanta Punct Segment</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0934_-_Distanta_Punct_Segment&amp;diff=9345"/>
		<updated>2024-01-09T19:31:48Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau în plan, un punct și un segment. Să se determine distanța minimă de la punctul dat la un punct aparținând segmentului.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;distantapunctsegmentin.txt&#039;&#039;&#039; conține pe prima linie 6 numere naturale separate prin spații, respectiv: &#039;&#039;&#039;X1, Y1, X2, Y2, X3, Y3&#039;&#039;&#039;. Se cere determinarea distanței minime de la punctul de coordonate &#039;&#039;&#039;(X1, Y1)&#039;&#039;&#039; la un punct aparținând segmentului cu capetele în punctele &#039;&#039;&#039;(X2, Y2)&#039;&#039;&#039; și &#039;&#039;&#039;(X3, Y3)&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;distantapunctsegmentout.txt&#039;&#039;&#039; va conține pe prima linie un număr real cu exact două zecimale exacte (fără rotunjire).&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între -1001 și 1001.&lt;br /&gt;
*Punctele care determină segmentul sunt distincte.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; distantapunctsegmentin.txt&lt;br /&gt;
 0 1 0 0 1 0&lt;br /&gt;
; distantapunctsegmentout.txt&lt;br /&gt;
  Datele de intrare respecta cerintele impuse.&lt;br /&gt;
  1.00&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; distantapunctsegmentin&lt;br /&gt;
 1 2 3 4 3 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; distantapunctsegmentout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def distanta_punct_la_segment(X1, Y1, X2, Y2, X3, Y3):&lt;br /&gt;
    # Calculează distanța de la punct la linia dreaptă&lt;br /&gt;
    numer = (X3 - X2) * (X2 - X1) + (Y3 - Y2) * (Y2 - Y1)&lt;br /&gt;
    denom = (X3 - X2)**2 + (Y3 - Y2)**2&lt;br /&gt;
    u = numer / denom&lt;br /&gt;
&lt;br /&gt;
    # Determină punctul cel mai apropiat de dreaptă&lt;br /&gt;
    if u &amp;lt; 0:&lt;br /&gt;
        xp, yp = X2, Y2&lt;br /&gt;
    elif u &amp;gt; 1:&lt;br /&gt;
        xp, yp = X3, Y3&lt;br /&gt;
    else:&lt;br /&gt;
        xp = X2 + u * (X3 - X2)&lt;br /&gt;
        yp = Y2 + u * (Y3 - Y2)&lt;br /&gt;
&lt;br /&gt;
    # Calculează distanța de la punct la punctul cel mai apropiat de dreaptă&lt;br /&gt;
    distanta = math.sqrt((X1 - xp)**2 + (Y1 - yp)**2)&lt;br /&gt;
    return distanta&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;distantapunctsegmentin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        X1, Y1, X2, Y2, X3, Y3 = map(int, f.readline().strip().split())&lt;br /&gt;
&lt;br /&gt;
    # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
    if (-1001 &amp;lt;= X1 &amp;lt;= 1001) and (-1001 &amp;lt;= Y1 &amp;lt;= 1001) and (-1001 &amp;lt;= X2 &amp;lt;= 1001) and (-1001 &amp;lt;= Y2 &amp;lt;= 1001) and (-1001 &amp;lt;= X3 &amp;lt;= 1001) and (-1001 &amp;lt;= Y3 &amp;lt;= 1001) and (X2, Y2) != (X3, Y3):&lt;br /&gt;
        # Afisare mesaj inainte de rezolvare&lt;br /&gt;
        with open(&amp;quot;distantapunctsegmentout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
            f.write(f&amp;quot;{distanta_punct_la_segment(X1, Y1, X2, Y2, X3, Y3):.2f}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(&amp;quot;distantapunctsegmentout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0933_-_Distanta_Punct_Dreapta&amp;diff=9344</id>
		<title>0933 - Distanta Punct Dreapta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0933_-_Distanta_Punct_Dreapta&amp;diff=9344"/>
		<updated>2024-01-09T19:30:07Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau în plan, un punct și o dreaptă. Să se determine distanța de la punct la dreaptă.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;distantapunctdreapta.in&#039;&#039;&#039; conține pe prima linie 6 numere naturale separate prin spații, respectiv: &#039;&#039;&#039;X1, Y1, X2, Y2, X3, Y3&#039;&#039;&#039;. Se cere determinarea distanței de la punctul de coordonate &#039;&#039;&#039;(X1, Y1)&#039;&#039;&#039; la dreapta care trece prin punctele de coordonate &#039;&#039;&#039;(X2, Y2)&#039;&#039;&#039; și &#039;&#039;&#039;(X3, Y3)&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;distantapunctdreapta.out&#039;&#039;&#039; va conține pe prima linie un număr real cu exact două zecimale exacte (fără rotunjire), distanţa cerută.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între &#039;&#039;&#039;-1001&#039;&#039;&#039; și &#039;&#039;&#039;1001&#039;&#039;&#039;.&lt;br /&gt;
*Punctele care determină dreapta sunt distincte.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; distantapunctdreapta.in&lt;br /&gt;
 0 1 0 0 1 0&lt;br /&gt;
&lt;br /&gt;
; distantapunctdreapta.out&lt;br /&gt;
  Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 1.00&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; distantapunctdreapta.in&lt;br /&gt;
 1 2 3 4 3 4&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; distantapunctdreapta.out&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def distanta_punct_la_dreapta(X1, Y1, X2, Y2, X3, Y3):&lt;br /&gt;
    numitor = math.sqrt((X2 - X3) ** 2 + (Y2 - Y3) ** 2)&lt;br /&gt;
    numarator = abs(X1 * Y2 + X2 * Y3 + X3 * Y1 - Y1 * X2 - Y2 * X3 - Y3 * X1)&lt;br /&gt;
    distanta = numarator / numitor&lt;br /&gt;
    return distanta&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;distantapunctdreaptain.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        X1, Y1, X2, Y2, X3, Y3 = map(int, f.readline().strip().split())&lt;br /&gt;
&lt;br /&gt;
    # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
    if (-1001 &amp;lt;= X1 &amp;lt;= 1001) and (-1001 &amp;lt;= Y1 &amp;lt;= 1001) and (-1001 &amp;lt;= X2 &amp;lt;= 1001) and (-1001 &amp;lt;= Y2 &amp;lt;= 1001) and (-1001 &amp;lt;= X3 &amp;lt;= 1001) and (-1001 &amp;lt;= Y3 &amp;lt;= 1001) and (X2, Y2) != (X3, Y3):&lt;br /&gt;
        # Afisare mesaj inainte de rezolvare&lt;br /&gt;
        with open(&amp;quot;distantapunctdreaptaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
            f.write(f&amp;quot;{distanta_punct_la_dreapta(X1, Y1, X2, Y2, X3, Y3):.2f}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(&amp;quot;distantapunctdreaptaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0978_-_Coliniare&amp;diff=9343</id>
		<title>0978 - Coliniare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0978_-_Coliniare&amp;diff=9343"/>
		<updated>2024-01-09T19:29:33Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; puncte distincte în plan prin coordonatele lor. Determinați numărul maxim de puncte coliniare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;coliniarein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039; de puncte, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii coordonatele acestor puncte separate prin spațiu (abscisa și ordonata).&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;coliniareout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;m&#039;&#039;&#039;, reprezentând numărul maxim de puncte coliniare aflate printre punctele date.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*3 ≤ &#039;&#039;&#039;n&#039;&#039;&#039; ≤ 1000&lt;br /&gt;
*coordonatele celor &#039;&#039;&#039;n&#039;&#039;&#039; puncte sunt numere naturale mai mici decât 50.&lt;br /&gt;
*nu există două puncte identice printre cele date.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; coliniarein.txt&lt;br /&gt;
 7&lt;br /&gt;
 1 2&lt;br /&gt;
 2 4&lt;br /&gt;
 3 6&lt;br /&gt;
 1 4&lt;br /&gt;
 2 5&lt;br /&gt;
 4 7&lt;br /&gt;
 6 1&lt;br /&gt;
; coliniareout.txt&lt;br /&gt;
 4 &lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; coliniarein.txt&lt;br /&gt;
 4&lt;br /&gt;
 5 10&lt;br /&gt;
 12 20&lt;br /&gt;
 8 4&lt;br /&gt;
 5 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; coliniareout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def numar_puncte_coliniare(n, puncte):&lt;br /&gt;
    if n &amp;lt; 3:&lt;br /&gt;
        return n  # Dacă avem mai puțin de 3 puncte, toate sunt coliniare&lt;br /&gt;
&lt;br /&gt;
    max_puncte_coliniare = 2  # Inițializăm cu minim 2 puncte coliniare (cele două puncte inițiale)&lt;br /&gt;
&lt;br /&gt;
    for i in range(n - 1):&lt;br /&gt;
        for j in range(i + 1, n):&lt;br /&gt;
            coliniare = 2  # Inițializăm cu cele două puncte inițiale&lt;br /&gt;
            for k in range(n):&lt;br /&gt;
                if k != i and k != j:&lt;br /&gt;
                    # Verificăm dacă punctul k se află pe dreapta formată de punctele i și j&lt;br /&gt;
                    if (puncte[j][1] - puncte[i][1]) * (puncte[k][0] - puncte[i][0]) == (puncte[k][1] - puncte[i][1]) * (puncte[j][0] - puncte[i][0]):&lt;br /&gt;
                        coliniare += 1&lt;br /&gt;
&lt;br /&gt;
            max_puncte_coliniare = max(max_puncte_coliniare, coliniare)&lt;br /&gt;
&lt;br /&gt;
    return max_puncte_coliniare&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;coliniarein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        puncte = [tuple(map(int, f.readline().strip().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    # Verificare dacă datele respectă cerințele impuse&lt;br /&gt;
    if 3 &amp;lt;= n &amp;lt;= 1000 and all(0 &amp;lt;= x[0] &amp;lt; 50 and 0 &amp;lt;= x[1] &amp;lt; 50 for x in puncte) and len(set(puncte)) == n:&lt;br /&gt;
        # Calcul și afișare rezultat în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;coliniareout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(f&amp;quot;{numar_puncte_coliniare(n, puncte)}\n&amp;quot;)&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(&amp;quot;coliniarein.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(f&amp;quot;O eroare a apărut: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0930_-_Intersectie_Segmente&amp;diff=9342</id>
		<title>0930 - Intersectie Segmente</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0930_-_Intersectie_Segmente&amp;diff=9342"/>
		<updated>2024-01-09T19:28:20Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau două segmente în plan, specificate prin coordonatele capetelor. Să se verifice dacă au cel puțin un punct comun.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;intersectiesegmentein.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;8&#039;&#039;&#039; numere naturale separate prin spații, respectiv: &#039;&#039;&#039;X1&#039;&#039;&#039;, &#039;&#039;&#039;Y1&#039;&#039;&#039;, &#039;&#039;&#039;X2&#039;&#039;&#039;, &#039;&#039;&#039;Y2&#039;&#039;&#039;, &#039;&#039;&#039;X3&#039;&#039;&#039;, &#039;&#039;&#039;Y3&#039;&#039;&#039;, &#039;&#039;&#039;X4&#039;&#039;&#039;, &#039;&#039;&#039;Y4&#039;&#039;&#039;. Primul segment are capetele &#039;&#039;&#039; (X1, Y1) &#039;&#039;&#039; și &#039;&#039;&#039; (X2, Y2) &#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;intersectiesegmenteout.txt&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;DA&#039;&#039;&#039; (când segmentele se intersectează) sau &#039;&#039;&#039;NU&#039;&#039;&#039; (în caz contrar).&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între &#039;&#039;&#039;-1001&#039;&#039;&#039; și &#039;&#039;&#039;1001&#039;&#039;&#039;.&lt;br /&gt;
*Ambele segmente au lungimea nenulă.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; intersectiesegmentein.txt&lt;br /&gt;
 -1 -1 1 1 -1 1 1 -1&lt;br /&gt;
&lt;br /&gt;
; intersectiesegmenteout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; intersectiesegmentein.txt&lt;br /&gt;
 -1500 500 1000 800 -1500 500 -1500 500&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; intersectiesegmenteout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def verifica_intersectie_segmente(x1, y1, x2, y2, x3, y3, x4, y4):&lt;br /&gt;
    # Verifica daca segmentele au cel putin un punct comun&lt;br /&gt;
    if (min(x1, x2) &amp;lt;= max(x3, x4) and min(x3, x4) &amp;lt;= max(x1, x2) and&lt;br /&gt;
            min(y1, y2) &amp;lt;= max(y3, y4) and min(y3, y4) &amp;lt;= max(y1, y2)):&lt;br /&gt;
        return &amp;quot;DA&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;NU&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def verificare_restricții(x1, y1, x2, y2, x3, y3, x4, y4):&lt;br /&gt;
    return (-1001 &amp;lt;= x1 &amp;lt;= 1001 and -1001 &amp;lt;= y1 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x2 &amp;lt;= 1001 and -1001 &amp;lt;= y2 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x3 &amp;lt;= 1001 and -1001 &amp;lt;= y3 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x4 &amp;lt;= 1001 and -1001 &amp;lt;= y4 &amp;lt;= 1001 and&lt;br /&gt;
            (x1, y1) != (x2, y2) and (x3, y3) != (x4, y4))&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare din fisier&lt;br /&gt;
with open(&#039;intersectiesegmentein.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    input_data = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verificare_restricții(*input_data):&lt;br /&gt;
    # Extrage coordonatele capetelor segmentelor din lista de intrare&lt;br /&gt;
    x1, y1, x2, y2, x3, y3, x4, y4 = input_data&lt;br /&gt;
&lt;br /&gt;
    # Verificare intersectie segmente&lt;br /&gt;
    rezultat = verifica_intersectie_segmente(x1, y1, x2, y2, x3, y3, x4, y4)&lt;br /&gt;
&lt;br /&gt;
    # Scrie rezultatul in fisierul de iesire&lt;br /&gt;
    with open(&#039;intersectiesegmenteout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        file.write(rezultat + &amp;quot;\n&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Scrie mesajul de eroare in fisierul de iesire&lt;br /&gt;
    with open(&#039;intersectiesegmenteout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0929_-_Punct_Segment&amp;diff=9341</id>
		<title>0929 - Punct Segment</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0929_-_Punct_Segment&amp;diff=9341"/>
		<updated>2024-01-09T19:27:14Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau un punct și un segment în plan. Să se verifice dacă punctul se găsește pe segment.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;punctsegmentin.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;6&#039;&#039;&#039; numere naturale separate prin spații, respectiv: &#039;&#039;&#039;X1&#039;&#039;&#039;, &#039;&#039;&#039;Y1&#039;&#039;&#039;, &#039;&#039;&#039;X2&#039;&#039;&#039;, &#039;&#039;&#039;Y2&#039;&#039;&#039;, &#039;&#039;&#039;X3&#039;&#039;&#039;, &#039;&#039;&#039;Y3&#039;&#039;&#039;. Segmentul are capetele &#039;&#039;&#039; (X2, Y2)&#039;&#039;&#039;și &#039;&#039;&#039; (X3, Y3) &#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;punctsegmentout.txt&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;DA &#039;&#039;&#039; (dacă punctul de coordonate &#039;&#039;&#039; (X1, Y1) &#039;&#039;&#039; se găsește pe segment) sau &#039;&#039;&#039;NU&#039;&#039;&#039; (în caz contrar).&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între &#039;&#039;&#039;-1001&#039;&#039;&#039; și &#039;&#039;&#039;1001&#039;&#039;&#039;.&lt;br /&gt;
*Segmentul are lungimea nenulă.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; punctsegmentin.txt&lt;br /&gt;
 2 2 1 1 3 3&lt;br /&gt;
&lt;br /&gt;
; punctsegmentout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; punctsegmentin.txt&lt;br /&gt;
 -1500 500 -1500 500 1000 800&lt;br /&gt;
&lt;br /&gt;
; punctsegmentout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def punct_pe_segment(x1, y1, x2, y2, x3, y3):&lt;br /&gt;
    # Verifica daca punctul (x1, y1) se afla pe segmentul determinat de punctele (x2, y2) si (x3, y3)&lt;br /&gt;
    if min(x2, x3) &amp;lt;= x1 &amp;lt;= max(x2, x3) and min(y2, y3) &amp;lt;= y1 &amp;lt;= max(y2, y3):&lt;br /&gt;
        return &amp;quot;DA&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;NU&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def verificare_restricții(x1, y1, x2, y2, x3, y3):&lt;br /&gt;
    return (-1001 &amp;lt;= x1 &amp;lt;= 1001 and -1001 &amp;lt;= y1 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x2 &amp;lt;= 1001 and -1001 &amp;lt;= y2 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x3 &amp;lt;= 1001 and -1001 &amp;lt;= y3 &amp;lt;= 1001 and&lt;br /&gt;
            (x2, y2) != (x3, y3))&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare din fisier&lt;br /&gt;
with open(&#039;punctsegmentin.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    input_data = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verificare_restricții(*input_data):&lt;br /&gt;
    # Extrage coordonatele punctelor din lista de intrare&lt;br /&gt;
    x1, y1, x2, y2, x3, y3 = input_data&lt;br /&gt;
&lt;br /&gt;
    # Verificare daca punctul se afla pe segment&lt;br /&gt;
    rezultat = punct_pe_segment(x1, y1, x2, y2, x3, y3)&lt;br /&gt;
&lt;br /&gt;
    # Scrie rezultatul in fisierul de iesire&lt;br /&gt;
    with open(&#039;punctsegmentout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        file.write(rezultat + &amp;quot;\n&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Scrie mesajul de eroare in fisierul de iesire&lt;br /&gt;
    with open(&#039;punctsegmentout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0927_-_Distanta_Puncte&amp;diff=9340</id>
		<title>0927 - Distanta Puncte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0927_-_Distanta_Puncte&amp;diff=9340"/>
		<updated>2024-01-09T19:26:36Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau coordonatele în plan a două puncte. Să se afișeze pătratul distanței dintre ele.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;distantapunctein.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;4&#039;&#039;&#039;numere naturale, respectiv: abscisa primului punct, ordonata primului punct, abscisa celui de-al doilea punct, ordonata celui de-al doilea punct.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;distantapuncteout.txt&#039;&#039;&#039; va conține pe prima linie un număr natural reprezentând valoarea cerută.În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între &#039;&#039;&#039;-1001&#039;&#039;&#039; și &#039;&#039;&#039;1001&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; distantapunctein.txt&lt;br /&gt;
 1 0 5 4&lt;br /&gt;
&lt;br /&gt;
; distantapuncteout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 32&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; distantapunctein.txt&lt;br /&gt;
 -1500 500 1000 800&lt;br /&gt;
; distantapuncteout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def calculeaza_distanta_patratica(x1, y1, x2, y2):&lt;br /&gt;
    return (x2 - x1)**2 + (y2 - y1)**2&lt;br /&gt;
&lt;br /&gt;
def verificare_restricții(x1, y1, x2, y2):&lt;br /&gt;
    return (-1001 &amp;lt;= x1 &amp;lt;= 1001 and -1001 &amp;lt;= y1 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x2 &amp;lt;= 1001 and -1001 &amp;lt;= y2 &amp;lt;= 1001)&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare din fisier&lt;br /&gt;
with open(&#039;distantapunctein.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    input_data = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verificare_restricții(*input_data):&lt;br /&gt;
    # Extrage coordonatele punctelor din lista de intrare&lt;br /&gt;
    x1, y1, x2, y2 = input_data&lt;br /&gt;
&lt;br /&gt;
    # Calculeaza patratul distantei dintre puncte&lt;br /&gt;
    distanta_patratica = calculeaza_distanta_patratica(x1, y1, x2, y2)&lt;br /&gt;
&lt;br /&gt;
    # Scrie rezultatul in fisierul de iesire&lt;br /&gt;
    with open(&#039;distantapuncteout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        file.write(&amp;quot;{}\n&amp;quot;.format(distanta_patratica))&lt;br /&gt;
else:&lt;br /&gt;
    # Scrie mesajul de eroare in fisierul de iesire&lt;br /&gt;
    with open(&#039;distantapuncteout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0928_-_Aria_Triunghi&amp;diff=9339</id>
		<title>0928 - Aria Triunghi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0928_-_Aria_Triunghi&amp;diff=9339"/>
		<updated>2024-01-09T19:26:00Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau coordonatele în plan a trei puncte. Să se afișeze valoarea ariei triunghiului pe care îl formează.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;ariatriunghiin.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;6&#039;&#039;&#039; numere naturale, respectiv: abscisa primului punct, ordonata primului punct, abscisa celui de-al doilea punct, ordonata celui de-al doilea punct, abscisa celui de-al treilea punct, ordonata celui de-al treilea punct.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;ariatriunghiout.txt&#039;&#039;&#039; va conține pe prima linie un număr real, cu exact o zecimală, reprezentând valoarea cerută.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Numerele din fișierul de intrare sunt întregi cuprinse între &#039;&#039;&#039;-1001&#039;&#039;&#039; și &#039;&#039;&#039;1001&#039;&#039;&#039;.&lt;br /&gt;
*Punctele nu sunt coliniare.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; ariatriunghiin.txt&lt;br /&gt;
 0 1 1 0 2 1&lt;br /&gt;
&lt;br /&gt;
; ariatriunghiout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 1.0&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; ariatriunghiin.txt&lt;br /&gt;
 0 0 1 1 2 2&lt;br /&gt;
; ariatriunghiout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def calculeaza_aria_triunghi(x1, y1, x2, y2, x3, y3):&lt;br /&gt;
    return abs((x1*(y2-y3) + x2*(y3-y1) + x3*(y1-y2)) / 2.0)&lt;br /&gt;
&lt;br /&gt;
def verificare_restricții(x1, y1, x2, y2, x3, y3):&lt;br /&gt;
    return (-1001 &amp;lt;= x1 &amp;lt;= 1001 and -1001 &amp;lt;= y1 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x2 &amp;lt;= 1001 and -1001 &amp;lt;= y2 &amp;lt;= 1001 and&lt;br /&gt;
            -1001 &amp;lt;= x3 &amp;lt;= 1001 and -1001 &amp;lt;= y3 &amp;lt;= 1001 and&lt;br /&gt;
            (x1, y1) != (x2, y2) and (x2, y2) != (x3, y3) and (x1, y1) != (x3, y3))&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare din fisier&lt;br /&gt;
with open(&#039;ariatriunghiin.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    input_data = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Extrage coordonatele punctelor din lista de intrare&lt;br /&gt;
x1, y1, x2, y2, x3, y3 = input_data&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verificare_restricții(x1, y1, x2, y2, x3, y3):&lt;br /&gt;
    # Calculeaza aria triunghiului&lt;br /&gt;
    aria_triunghi = calculeaza_aria_triunghi(x1, y1, x2, y2, x3, y3)&lt;br /&gt;
&lt;br /&gt;
    # Scrie rezultatul in fisierul de iesire&lt;br /&gt;
    with open(&#039;ariatriunghiout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        file.write(&amp;quot;{:.1f}\n&amp;quot;.format(aria_triunghi))&lt;br /&gt;
else:&lt;br /&gt;
    # Scrie mesajul de eroare in fisierul de iesire&lt;br /&gt;
    with open(&#039;ariatriunghiout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2996_%E2%80%93_Paritar&amp;diff=9338</id>
		<title>2996 – Paritar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2996_%E2%80%93_Paritar&amp;diff=9338"/>
		<updated>2024-01-09T19:23:10Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Un șir format din &#039;&#039;&#039;2•numar_elemente&#039;&#039;&#039; numere naturale se numește paritar dacă fiecare dintre primii săi &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; termeni fie are aceeași paritate cu oricare dintre ultimii săi &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; termeni, fie este strict mai mic decât oricare număr de paritate diferită aflat printre aceștia.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Dându-se un șir de &#039;&#039;&#039;2•numar_elemente&#039;&#039;&#039; numere naturale, să se afișeze mesajul &#039;&#039;&#039;DA&#039;&#039;&#039;, în cazul în care șirul aflat în fișier este paritar, sau mesajul &#039;&#039;&#039;NU&#039;&#039;&#039;, în caz contrar. Proiectați un algoritm eficient din punctul de vedere al timpului de executare și al memoriei utilizate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;paritarin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;numar_elemente&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;2•numar_elemente&#039;&#039;&#039; numere naturale separate prin spații reprezentând elementele șirului.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;paritarout.txt&#039;&#039;&#039; va conține pe prima linie mesajul &#039;&#039;&#039;DA&#039;&#039;&#039;, dacă șirul este paritar, sau mesajul &#039;&#039;&#039;NU&#039;&#039;&#039; dacă șirul nu este paritar.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; , iar daca se indeplinesc, se afiseaza mesajul &amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; &amp;amp;les; 250000&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&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; paritarin.txt&lt;br /&gt;
 5&lt;br /&gt;
 20 3 11 4 15 25 49 18 53 16&lt;br /&gt;
&lt;br /&gt;
; paritarout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 DA&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; paritarin.txt&lt;br /&gt;
 3&lt;br /&gt;
 8 6 4 10 7 6&lt;br /&gt;
&lt;br /&gt;
; paritarout.txt&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 NU&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; paritarin.txt&lt;br /&gt;
 0&lt;br /&gt;
 2 4 5 6 8 10&lt;br /&gt;
; paritarout.txt&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def este_paritar(numar_elemente, numere):&lt;br /&gt;
    numere_pare = 0&lt;br /&gt;
    numere_impare = 0&lt;br /&gt;
&lt;br /&gt;
    if len(numere) != 2 * numar_elemente:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        if numar % 2 == 0:&lt;br /&gt;
            numere_pare += 1&lt;br /&gt;
        else:&lt;br /&gt;
            numere_impare += 1&lt;br /&gt;
&lt;br /&gt;
    return numere_pare % 2 == 0 and numere_impare % 2 == 0&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;paritarin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f_input, open(&amp;quot;paritarout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_output:&lt;br /&gt;
        numar_elemente = int(f_input.readline().strip())&lt;br /&gt;
        numere = list(map(int, f_input.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        if not (1 &amp;lt;= numar_elemente &amp;lt;= 250000) or any(x &amp;gt;= 1000000 for x in numere):&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        elif este_paritar(numar_elemente, numere):&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare respecta cerintele impuse.\nDA\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare respecta cerintele impuse.\nNU\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație==&lt;br /&gt;
În primele &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; numere sunt două numere pare, iar în ultimele &#039;&#039;&#039;numar_elemnte&#039;&#039;&#039; numere nu există numere impare. Vom presupune deci că 20 și 30 sunt mai mici decât orice număr impar.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2901_%E2%80%93_Data_Pal&amp;diff=9337</id>
		<title>2901 – Data Pal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2901_%E2%80%93_Data_Pal&amp;diff=9337"/>
		<updated>2024-01-09T19:21:00Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
În vacanța de iarnă Adelina a decis să renunțe la teme și a ales să citească o parte din cărțile aduse de Moș Crăciun: cele cu teme istorice sau SF. Pe măsură ce citea își nota în caiet datele calendaristice ale acelor evenimente care au impresionat-o. După vacanță îi povestește colegului de bancă despre aceste evenimente și remarcă faptul că unele date calendaristice au o formă specială, de palindrom: citite de la dreapta la stânga reprezintă aceeași dată ca atunci când se citesc obișnuit, de la stânga la dreapta.&lt;br /&gt;
==Cerința==&lt;br /&gt;
Pentru cele &#039;&#039;&#039;nr_date&#039;&#039;&#039; date calendaristice din agenda Adelinei numărați și afișați câte date palindromice au fost găsite iar apoi precizați secolele cu cele mai multe date palindromice.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;datapalin.txt&#039;&#039;&#039; conține următoarele informații :&lt;br /&gt;
- pe prima linie un număr &#039;&#039;&#039;nr_date&#039;&#039;&#039; reprezentând numărul de date calendaristice;&lt;br /&gt;
- pe fiecare dintre următoarele &#039;&#039;&#039;nr_date&#039;&#039;&#039; linii câte o dată calendaristică de forma &#039;&#039;&#039;zz/ll/aaaa&#039;&#039;&#039; (două cifre pentru zi, două cifre pentru lună, patru cifre pentru an) .&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;datapalout.txt&#039;&#039;&#039; va conține pe prima linie numărul de date calendaristice palindrom iar pe a doua linie secolele cu cele mai multe date palindrom, în ordine cronologică.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;, iar daca indeplinesc cerintele enuntate se va afisa mesajul Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;amp;lt; &#039;&#039;&#039;nr_date&#039;&#039;&#039;&amp;amp;les; 1000&lt;br /&gt;
* toate datele calendaristice sunt valide;&lt;br /&gt;
* în colecția de date de test există întotdeauna cel puțin o dată palindromică&lt;br /&gt;
* anii aparțin perioadei 10-9999 și sunt d.Hr.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; datapalin.txt&lt;br /&gt;
 5&lt;br /&gt;
 01122110&lt;br /&gt;
 11111111&lt;br /&gt;
 19111111&lt;br /&gt;
 09122190&lt;br /&gt;
 12111121&lt;br /&gt;
&lt;br /&gt;
; datapalout.txt&lt;br /&gt;
 Datele de intrare corespund cerintelor impuse&lt;br /&gt;
 4 &lt;br /&gt;
 12 22&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; datapalin.txt&lt;br /&gt;
 5&lt;br /&gt;
 01122110&lt;br /&gt;
 11111111&lt;br /&gt;
 19111111&lt;br /&gt;
 0912190&lt;br /&gt;
 12111121&lt;br /&gt;
; datapalout.txt&lt;br /&gt;
 Datele de intrare nu corespund cerintelor impuse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_palindrom(data):&lt;br /&gt;
    return data == data[::-1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citeste_date_din_fisier(cale_fisier):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(cale_fisier, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            nr_date = int(f.readline().strip())&lt;br /&gt;
            date_agenda = [f.readline().strip() for _ in range(nr_date)]&lt;br /&gt;
    except (ValueError, FileNotFoundError):&lt;br /&gt;
        return None  # Returnăm None dacă nu se pot citi datele din fișier&lt;br /&gt;
&lt;br /&gt;
    return date_agenda&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gaseste_secole_cu_cele_mai_multe_date_palindromice(date_palindromice):&lt;br /&gt;
    secole_aparitii = defaultdict(list)&lt;br /&gt;
&lt;br /&gt;
    for data in date_palindromice:&lt;br /&gt;
        an = int(data[4:])&lt;br /&gt;
        secol = an // 100 + 1&lt;br /&gt;
        secole_aparitii[secol].append(an)&lt;br /&gt;
&lt;br /&gt;
    max_count = max(len(aparitii) for aparitii in secole_aparitii.values())&lt;br /&gt;
    secole_max_count = sorted([secol for secol, aparitii in secole_aparitii.items() if len(aparitii) == max_count])&lt;br /&gt;
&lt;br /&gt;
    return secole_max_count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    date_agenda = citeste_date_din_fisier(&amp;quot;datapalin.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if date_agenda is None or any(len(data) != 8 for data in date_agenda):&lt;br /&gt;
        with open(&amp;quot;datapalout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_output:&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare nu corespund cerintelor impuse\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Câte date palindromice au fost găsite&lt;br /&gt;
        date_palindromice = [data for data in date_agenda if este_palindrom(data)]&lt;br /&gt;
        numar_date_palindromice = len(date_palindromice)&lt;br /&gt;
&lt;br /&gt;
        # Găsește secolele cu cele mai multe date palindromice&lt;br /&gt;
        secole_max_count = gaseste_secole_cu_cele_mai_multe_date_palindromice(date_palindromice)&lt;br /&gt;
&lt;br /&gt;
        # Scrie rezultatele în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;datapalout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_output:&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare corespund cerintelor impuse\n&amp;quot;)&lt;br /&gt;
            f_output.write(str(numar_date_palindromice) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
            f_output.write(&amp;quot; &amp;quot;.join(map(str, secole_max_count)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație==&lt;br /&gt;
Sunt 4 date palindromice: două în secolul 12 și două în secolul 22&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3178_-_Copii2&amp;diff=9336</id>
		<title>3178 - Copii2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3178_-_Copii2&amp;diff=9336"/>
		<updated>2024-01-09T19:19:45Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Într-o clasă sunt &#039;&#039;&#039;numar_fete&#039;&#039;&#039; Fete și &#039;&#039;&#039;numar_baieti&#039;&#039;&#039; băieți. Fiecare fată citește 3 pagini pe zi și fiecare băiat citește 2 pagini pe zi. Câte pagini vor citi copiii în &#039;&#039;&#039;numar_zile&#039;&#039;&#039; zile?&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele naturale &#039;&#039;&#039;numar_fete&#039;&#039;&#039;, &#039;&#039;&#039;numar_baieti&#039;&#039;&#039;, &#039;&#039;&#039;numar_zile&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;, urmat pe rândul următor sa fie afișat pe ecran numărul total de pagini citite.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;numar_fete&#039;&#039;&#039;, &#039;&#039;&#039;numar_baieti&#039;&#039;&#039;, &#039;&#039;&#039;numar_zile&#039;&#039;&#039; &amp;amp;les; 1000 &lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 7&lt;br /&gt;
 5&lt;br /&gt;
 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 93&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
 5&lt;br /&gt;
 8&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 #3178 - Copii2 &lt;br /&gt;
def copii2():&lt;br /&gt;
    fete = int(input(&amp;quot;Introduceti numarul de fete: &amp;quot;))&lt;br /&gt;
    baieti = int(input(&amp;quot;Introduceti numarul de baieti: &amp;quot;))&lt;br /&gt;
    zile = int(input(&amp;quot;Introduceti numarul de zile: &amp;quot;))&lt;br /&gt;
    if fete &amp;gt;= 1 and baieti &amp;gt;=1 and zile &amp;lt;= 1000:&lt;br /&gt;
        solutie = (fete * 3 + baieti * 2) * zile&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print((fete * 3 + baieti * 2) * zile)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    copii2()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Explicatie==&lt;br /&gt;
Sunt 7 fete, 5 băieți și citesc 3 zile. Împreună vor citi 93 de pagini.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0332_-_Expresie2&amp;diff=9335</id>
		<title>0332 - Expresie2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0332_-_Expresie2&amp;diff=9335"/>
		<updated>2024-01-09T19:18:53Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Sursa: [https://www.pbinfo.ro/probleme/332/expresie2]&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește numărul natural &#039;&#039;&#039;numar&#039;&#039;&#039; și determină &#039;&#039;&#039;suma&#039;&#039;&#039;=1*2+2*3+3*4+...+&#039;&#039;&#039;numar&#039;&#039;&#039;*(&#039;&#039;&#039;numar&#039;&#039;&#039;+1).&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;numar&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
În următorul rând se va afișa pe ecran mesajul “Rezultatul este &#039;&#039;&#039;suma&#039;&#039;&#039;“ unde &#039;&#039;&#039;suma&#039;&#039;&#039; reprezintă valoarea calculată.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;.&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;amp;lt; &#039;&#039;&#039;numar&#039;&#039;&#039; &amp;amp;les; 100 &lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 4&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 Rezultatul este 40&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 6&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
 Rezultatul este 112&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 #0332 – Expresie2 &lt;br /&gt;
def expresie2():&lt;br /&gt;
    numar = int(input())&lt;br /&gt;
    suma = 0&lt;br /&gt;
    if numar &amp;gt; 0 and numar &amp;lt;= 100:&lt;br /&gt;
        print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        for i in range(1, numar+1):&lt;br /&gt;
            suma += i * (i + 1)&lt;br /&gt;
        print(&amp;quot;Rezultatul este&amp;quot;,suma)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    expresie2()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0249_-_PozitieX&amp;diff=9334</id>
		<title>0249 - PozitieX</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0249_-_PozitieX&amp;diff=9334"/>
		<updated>2024-01-09T19:14:59Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;X&#039;&#039;&#039; şi un şir cu &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale distincte două câte două. Să se determine poziţia pe care s-ar afla numărul &#039;&#039;&#039;X&#039;&#039;&#039; în şirul ordonat crescător.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;pozitiexin.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;X&#039;&#039;&#039; şi &#039;&#039;&#039;n&#039;&#039;&#039;. Urmează &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, dispuse pe mai multe linii, separate prin spaţii.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;pozitiexout.txt&#039;&#039;&#039; va conţine pe prima linie numărul &#039;&#039;&#039;p&#039;&#039;&#039;, reprezentând poziţia în şirul ordonat crescător a primului element din şirul dat. Dacă numărul &#039;&#039;&#039;X&#039;&#039;&#039; nu apare în şir, se va afişa mesajul &#039;&#039;&#039;NU EXISTA&#039;&#039;&#039;.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;, iar daca se indeplinesc se afiseaza mesajul &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;le; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 1.0000&lt;br /&gt;
* &#039;&#039;&#039;X&#039;&#039;&#039; şi elementele şirului vor avea cel mult 9 cifre&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; pozitiexin.txt&lt;br /&gt;
 79 6&lt;br /&gt;
 267 13 45 628 7 79&lt;br /&gt;
; pozitiexout.txt&lt;br /&gt;
 Datele de intrare corespund restrictilor impuse.&lt;br /&gt;
 4&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; pozitiexin.txt&lt;br /&gt;
 79 0&lt;br /&gt;
; pozitiexout.txt&lt;br /&gt;
 Datele de intrare nu corespund restrictilor impuse.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def gaseste_pozitie(X, sir):&lt;br /&gt;
    sir.sort()&lt;br /&gt;
    for i in range(len(sir)):&lt;br /&gt;
        if sir[i] == X:&lt;br /&gt;
            return i + 1  # Returnăm poziția (pornind de la 1)&lt;br /&gt;
    return -1  # Dacă nu găsim X în șir, returnăm -1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim X și n din fișierul de intrare&lt;br /&gt;
        with open(&amp;quot;pozitiexin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            X, n = map(int, f.readline().strip().split())&lt;br /&gt;
            sir = list(map(int, f.read().split()))&lt;br /&gt;
&lt;br /&gt;
        # Verificăm restricțiile impuse&lt;br /&gt;
        if 1 &amp;lt;= n &amp;lt;= 10000 and all(1 &amp;lt;= num &amp;lt;= 999999999 for num in sir) and 1 &amp;lt;= X &amp;lt;= 999999999:&lt;br /&gt;
            # Găsim poziția lui X în șir&lt;br /&gt;
            pozitie = gaseste_pozitie(X, sir)&lt;br /&gt;
&lt;br /&gt;
            # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
            with open(&amp;quot;pozitiexout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
                if pozitie != -1:&lt;br /&gt;
                    f.write(str(pozitie) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
                else:&lt;br /&gt;
                    f.write(&amp;quot;NU EXISTA\n&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            # Dacă datele de intrare nu respectă restricțiile, afișăm mesaj de eroare în fișierul de ieșire&lt;br /&gt;
            with open(&amp;quot;pozitiexout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
                f.write(&amp;quot;Date de intrare invalide\n&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        # Dacă apar erori neprevăzute, afișăm mesajul de eroare în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;pozitiexout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(f&amp;quot;O eroare a apărut: {str(e)}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație==&lt;br /&gt;
&lt;br /&gt;
Şirul sortat este &#039;&#039;&#039;7 13 45 79 267 628&#039;&#039;&#039;. În acest şir, valoarea &#039;&#039;&#039;79&#039;&#039;&#039; se află pe poziţia a &#039;&#039;&#039;4&#039;&#039;&#039;-a.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2337_-_Coad%C4%832&amp;diff=9333</id>
		<title>2337 - Coadă2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2337_-_Coad%C4%832&amp;diff=9333"/>
		<updated>2024-01-09T19:13:51Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Andrei și Mihai stau la coada la magazin pentru a-și cumpăra bomboane. Andrei este în fața lui Mihai la coadă, iar între cei doi se afla alte &#039;&#039;&#039;x&#039;&#039;&#039; persoane. Mihai a observat că în total, în fata lui , se afla &#039;&#039;&#039;y&#039;&#039;&#039; persoane, iar Andrei a observat că în spatele lui se află &#039;&#039;&#039;z&#039;&#039;&#039; persoane.&lt;br /&gt;
Știind numerele &#039;&#039;&#039;x y z&#039;&#039;&#039; , aflați câte persoane sunt la coadă în total. Uneori, însă, e posibil ca aceștia să fi numărat greșit numărul de persoane, și să nu se poată calcula numărul total de persoane din coada. În acest caz trebuie sa afișați &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului de intrare &#039;&#039;&#039;coada2in.txt&#039;&#039;&#039; se vor afla 3 numere naturale &#039;&#039;&#039;x y z&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;coada2out.txt&#039;&#039;&#039; se va afișa un singur număr, reprezentând lungimea cozii la care stau copiii. Dacă datele sunt incorecte, atunci afișați &#039;&#039;&#039;-1&#039;&#039;&#039;.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;, iar daca se indeplinesc se afiseaza mesajul &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;amp;le; &#039;&#039;&#039;x, y, z&#039;&#039;&#039; &amp;amp;les; 1.000.000.000.000.000.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; coada2in.txt&lt;br /&gt;
 0 1 1&lt;br /&gt;
; coada2out.txt&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
 2&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; coada2in.txt&lt;br /&gt;
 -1 1 1&lt;br /&gt;
; coada2out.txt&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def calculeaza_numar_persoane(x, y, z):&lt;br /&gt;
    if not (0 &amp;lt;= x &amp;lt;= 1000000000000000000 and 0 &amp;lt;= y &amp;lt;= 1000000000000000000 and 0 &amp;lt;= z &amp;lt;= 1000000000000000000):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    elif x &amp;gt;= y or x &amp;gt;= z:&lt;br /&gt;
        return -1&lt;br /&gt;
    else:&lt;br /&gt;
        return y + z - x&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele din fișierul de intrare&lt;br /&gt;
        with open(&amp;quot;coada2in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            x, y, z = map(int, f.readline().strip().split())&lt;br /&gt;
&lt;br /&gt;
        # Calculăm numărul total de persoane în linie utilizând funcția&lt;br /&gt;
        numar_persoane = calculeaza_numar_persoane(x, y, z)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;coada2out.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(str(numar_persoane))&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    except ValueError as ve:&lt;br /&gt;
        print(ve)&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;
La coada se afla doar Andrei și Mihai. Între cei doi nu este nicio persoană. în fața lui Mihai este doar o persoana – Andrei. În spatele lui Andrei este de asemenea o singura persoana – Mihai.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2876_-_Zmeu&amp;diff=9332</id>
		<title>2876 - Zmeu</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2876_-_Zmeu&amp;diff=9332"/>
		<updated>2024-01-09T19:13:07Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
În vacanță, Andrei și cu prietenii lui doresc să construiască împreună cât mai multe zmeie. Analizând materialele au constatat că au la dispoziție doar &#039;&#039;&#039;N&#039;&#039;&#039; metri de sfoară.&lt;br /&gt;
Au căutat pe internet tutoriale și au aflat că pentru fiecare zmeu sunt necesare câte două bucăți de sfoară de &#039;&#039;&#039;M&#039;&#039;&#039; metri. Astfel, având la dispoziție cei &#039;&#039;&#039;N&#039;&#039;&#039; metri de sfoară, pot construi maxim &#039;&#039;&#039;Z&#039;&#039;&#039; zmeie.&lt;br /&gt;
Scrieți un program care să determine:&lt;br /&gt;
a) Care este numărul maxim de zmeie care se pot construi;&lt;br /&gt;
b) Câți metri de sfoară le-ar mai fi trebuit lui Andrei și prietenilor să poată construi încă un zmeu.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;zmeuin.txt&#039;&#039;&#039; conține pe prima linie numărul natural &#039;&#039;&#039;N&#039;&#039;&#039;, iar pe următoarea linie numărul natural &#039;&#039;&#039;M&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;zmeuout.txt&#039;&#039;&#039; va conține&lt;br /&gt;
•	pe prima linie: numărul maxim de zmeie care se pot construi; dacă nu se poate construi niciun zmeu, pe prima linie se va scrie &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
•	pe cea de-a doua linie: câți metri de sfoară le-ar mai fi trebuit să mai poată construi încă un zmeu.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;, iar daca se indeplinesc se afiseaza mesajul &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;le; &#039;&#039;&#039;N, M&#039;&#039;&#039; &amp;amp;les; 100.000.000.000 &lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; zmeuin.txt&lt;br /&gt;
 72&lt;br /&gt;
 10&lt;br /&gt;
; zmeuout.txt&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
 3&lt;br /&gt;
 8&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; zmeuin.txt &lt;br /&gt;
 100&lt;br /&gt;
 50&lt;br /&gt;
; zmeuout.txt&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
 1&lt;br /&gt;
 100&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
; zmeuin.txt&lt;br /&gt;
 0&lt;br /&gt;
 50&lt;br /&gt;
; zmeuout.txt&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def calculeaza_zmeie(N, M):&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 100000000000 and 1 &amp;lt;= M &amp;lt;= 1000000000):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    numar_zmeie = N // (2 * M)&lt;br /&gt;
    sfoara_ramasa = N % (2 * M)&lt;br /&gt;
    return numar_zmeie, max(0, 2 * M - sfoara_ramasa)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele din fișierul de intrare&lt;br /&gt;
        with open(&amp;quot;zmeu.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            N = int(f.readline().strip())  # Numărul de metri de sfoară disponibili&lt;br /&gt;
            M = int(f.readline().strip())  # Lungimea a două bucăți de sfoară necesare pentru un zmeu&lt;br /&gt;
&lt;br /&gt;
        # Calculăm numărul maxim de zmeie și câți metri de sfoară mai sunt necesari&lt;br /&gt;
        numar_zmeie, sfoara_ramasa = calculeaza_zmeie(N, M)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatele în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;zmeu.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(str(numar_zmeie) + &amp;quot;\n&amp;quot;)  # Scriem numărul maxim de zmeie&lt;br /&gt;
            f.write(str(sfoara_ramasa) + &amp;quot;\n&amp;quot;)  # Scriem câți metri de sfoară mai sunt necesari pentru un zmeu suplimentar&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    except ValueError as ve:&lt;br /&gt;
        print(ve)&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;
Andrei și prietenii lui au la dispoziție 72m de sfoară. Pentru fiecare zmeu sunt necesare câte 2 bucăți de sfoară de 10m.&lt;br /&gt;
a) Se pot construi maxim 3 zmeie, din cei 72m de sfoară&lt;br /&gt;
b) Dacă ar mai avea 8m de sfoară ar mai putea construi încă un zmeu.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2917_-_Catalan&amp;diff=9014</id>
		<title>2917 - Catalan</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2917_-_Catalan&amp;diff=9014"/>
		<updated>2024-01-04T19:25:23Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Programul va afișa pe ecran al &#039;&#039;&#039;n&#039;&#039;&#039;-lea număr Catalan.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot; iar daca se indeplinesc se afiseaza &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;amp;les; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 1000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse&lt;br /&gt;
 42&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 -2&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def calculeaza_numar_catalan(n):&lt;br /&gt;
    return math.factorial(2 * n) // (math.factorial(n + 1) * math.factorial(n))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input())&lt;br /&gt;
        if 0 &amp;lt;= n &amp;lt;= 1000:&lt;br /&gt;
            rezultat = calculeaza_numar_catalan(n)&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            print(rezultat)&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;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3329_-_NumarareAnagrame&amp;diff=9012</id>
		<title>3329 - NumarareAnagrame</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3329_-_NumarareAnagrame&amp;diff=9012"/>
		<updated>2024-01-04T19:24:47Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: /* Date de ieșire */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un cuvânt format numai din litere mici ale alfabetului englez. Determinați câte cuvinte distincte se pot forma cu literele sale – numărul de anagrame ale sale.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un cuvânt.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;cuvant&#039;&#039;&#039;, reprezentând numărul cerut.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039; iar daca se indeplinesc se afiseaza &#039;&#039;&#039;&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* cuvântul dat va avea cel mult 20 de litere;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 ababa&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
==Explicatie==&lt;br /&gt;
Cele 10 cuvinte sunt: aaabb, aabab, aabba, abaab, ababa, abbaa, baaab, baaba, babaa, bbaaa.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 mucopolizaharidozelor&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 import math&lt;br /&gt;
&lt;br /&gt;
def numar_anagrame(cuvant):&lt;br /&gt;
    lungime_cuvant = len(cuvant)&lt;br /&gt;
    factoriale_duplicate = 1&lt;br /&gt;
&lt;br /&gt;
    for litera in set(cuvant):&lt;br /&gt;
        frecventa = cuvant.count(litera)&lt;br /&gt;
        factoriale_duplicate *= math.factorial(frecventa)&lt;br /&gt;
&lt;br /&gt;
    return math.factorial(lungime_cuvant) // factoriale_duplicate&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    cuvant = input()&lt;br /&gt;
&lt;br /&gt;
    if cuvant.isalpha() and cuvant.islower() and len(cuvant) &amp;lt;= 20:&lt;br /&gt;
        rezultat = numar_anagrame(cuvant)&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(rezultat)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3871_-_Xor_Pyramid&amp;diff=9011</id>
		<title>3871 - Xor Pyramid</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3871_-_Xor_Pyramid&amp;diff=9011"/>
		<updated>2024-01-04T19:22:15Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Considerăm o piramida xor unde fiecare valoare este egală cu xorul valorilor din stânga jos și dreapta jos. Dându-se cel mai de jos nivel, care este valoarea din vârf?&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;numar_valori&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;numar_valori&#039;&#039;&#039; numere naturale. &#039;&#039;&#039;numar_valori&#039;&#039;&#039; este mărimea bazei piramidei iar numerele naturale sunt valorile de la bază în ordinea în care sunt date.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;rezultat_xor_piramida&#039;&#039;&#039;, reprezentând valoarea din vârful piramidei.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot; iar daca se indeplinesc se afiseaza &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;numar_valori&#039;&#039;&#039; &amp;amp;les; 200000&lt;br /&gt;
* cele &#039;&#039;&#039;numar_valori&#039;&#039;&#039; numere citite vor fi mai mici sau egale cu 1.000.000.000.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
 8&lt;br /&gt;
 2 10 5 12 9 5 1 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
 9&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 5&lt;br /&gt;
 2 10 5 12 1000000001&lt;br /&gt;
;Ieșire&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def calcul_xor_piramida(baza_piramida):&lt;br /&gt;
    valori_intermediare = baza_piramida.copy()&lt;br /&gt;
    while len(valori_intermediare) &amp;gt; 1:&lt;br /&gt;
        valori_noi = []&lt;br /&gt;
        for i in range(len(valori_intermediare) - 1):&lt;br /&gt;
            valori_noi.append(valori_intermediare[i] ^ valori_intermediare[i + 1])&lt;br /&gt;
        valori_intermediare = valori_noi&lt;br /&gt;
    return valori_intermediare[0]&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        numar_valori = int(input())&lt;br /&gt;
        if not (1 &amp;lt;= numar_valori &amp;lt;= 200000):&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
        valori_baza_piramida = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
        if len(valori_baza_piramida) != numar_valori or any(val &amp;gt; 1000000000 for val in valori_baza_piramida):&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
        rezultat_xor_piramida = calcul_xor_piramida(valori_baza_piramida)&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(rezultat_xor_piramida)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicatie==&lt;br /&gt;
Problema implică calcularea valorii din vârful unei piramide XOR, având ca bază un șir de numere. Operația XOR este aplicată iterativ pe liniile piramidei, astfel încât valoarea din vârf să fie rezultatul final. Soluția propusă constă într-o funcție (calcul_xor_piramida) care primește lista de valori de la baza piramidei și aplică operația XOR iterativ până când rămâne doar o singură valoare, care reprezintă valoarea din vârf. Programul citește mărimea bazei piramidei și valorile de la bază, efectuând verificări pentru a se asigura că datele de intrare respectă cerințele. Dacă există discrepanțe, se afișează un mesaj corespunzător.&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3329_-_NumarareAnagrame&amp;diff=9010</id>
		<title>3329 - NumarareAnagrame</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3329_-_NumarareAnagrame&amp;diff=9010"/>
		<updated>2024-01-04T19:17:22Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un cuvânt format numai din litere mici ale alfabetului englez. Determinați câte cuvinte distincte se pot forma cu literele sale – numărul de anagrame ale sale.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un cuvânt.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;cuvant&#039;&#039;&#039;, reprezentând numărul cerut.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039; iar daca se indeplinesc se afiseaza &#039;&#039;&#039;&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* cuvântul dat va avea cel mult 20 de litere;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 ababa&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
 10&lt;br /&gt;
&lt;br /&gt;
==Explicatie==&lt;br /&gt;
Cele 10 cuvinte sunt: aaabb, aabab, aabba, abaab, ababa, abbaa, baaab, baaba, babaa, bbaaa.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 mucopolizaharidozelor&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
 import math&lt;br /&gt;
&lt;br /&gt;
def numar_anagrame(cuvant):&lt;br /&gt;
    lungime_cuvant = len(cuvant)&lt;br /&gt;
    factoriale_duplicate = 1&lt;br /&gt;
&lt;br /&gt;
    for litera in set(cuvant):&lt;br /&gt;
        frecventa = cuvant.count(litera)&lt;br /&gt;
        factoriale_duplicate *= math.factorial(frecventa)&lt;br /&gt;
&lt;br /&gt;
    return math.factorial(lungime_cuvant) // factoriale_duplicate&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    cuvant = input()&lt;br /&gt;
&lt;br /&gt;
    if cuvant.isalpha() and cuvant.islower() and len(cuvant) &amp;lt;= 20:&lt;br /&gt;
        rezultat = numar_anagrame(cuvant)&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(rezultat)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1472_-_Castel&amp;diff=9009</id>
		<title>1472 - Castel</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1472_-_Castel&amp;diff=9009"/>
		<updated>2024-01-04T19:10:13Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
Andrei vizitează un vechi castel cu mai multe camere. El are la dispoziţie un număr &#039;&#039;&#039;nr_coduri&#039;&#039;&#039; de coduri de acces. Fiecare cod este un număr natural format din cel mult 9 cifre. Pentru a deschide uşa unei camere, Andrei trebuie să afle ce cheie să aleagă, dintr-un set dat. Fiecare cheie este notată cu o cifră. Cheia ce deschide uşa din prima cameră este notată cu cifra ce se repetă de cele mai multe ori în codurile de acces.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Scrieţi un program care determină cheia ce va deschide prima uşă, cunoscându-se numărul &#039;&#039;&#039;nr_coduri&#039;&#039;&#039;, cele &#039;&#039;&#039;nr_coduri&#039;&#039;&#039; coduri de acces, numărul de chei, notat cu &#039;&#039;&#039;coduri_acces&#039;&#039;&#039; și valorile celor &#039;&#039;&#039;coduri_acces&#039;&#039;&#039; chei primite.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039; castelin.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;nr_coduri&#039;&#039;&#039;. Linia a doua din fişier conţine &#039;&#039;&#039;nr_coduri&#039;&#039;&#039; numere naturale, ce reprezintă codurile de acces. Linia a treia conţine numărul natural &#039;&#039;&#039;coduri_acces&#039;&#039;&#039; ce reprezinta numărul de chei primite. Linia a patra din fişier conţine &#039;&#039;&#039;coduri_acces&#039;&#039;&#039; cifre, ce reprezintă valorile cheilor.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039; castelout.txt&#039;&#039;&#039; conţine pe prima linie două numere naturale, separate printr-un singur spaţiu. Primul număr din fişier reprezintă cheia ce va deschide uşa din prima cameră si al doilea număr reprezinta numărul de repetări al cheii în şirul codurilor de acces.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta conditiile impuse.”&#039;&#039;&#039; iar daca datele introduse de la tastatură îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta conditiile impuse.”&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;coduri_acces&#039;&#039;&#039; &amp;amp;les; 10&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;nr_coduri&#039;&#039;&#039; &amp;amp;les; 1000&lt;br /&gt;
* Fiecare cod de acces este un număr cu cel mult 9 cifre&lt;br /&gt;
* Fiecare cheie este notată cu o cifră&lt;br /&gt;
* Cheile au valori distincte şi sunt date în ordine crescătoare&lt;br /&gt;
* O uşă poate fi deschisă de o singură cheie&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; castelin.txt &lt;br /&gt;
 5&lt;br /&gt;
 1243 527 89722 6232 678&lt;br /&gt;
 3&lt;br /&gt;
 2 5 7&lt;br /&gt;
&lt;br /&gt;
; castelout.txt &lt;br /&gt;
 Datele de intrare respecta conditiile impuse.&lt;br /&gt;
 2 6&lt;br /&gt;
&lt;br /&gt;
==Explicatie==&lt;br /&gt;
:Dintre cele 3 chei date, cheia ce apare de cele mai multe ori, în şirul codurilor de pe linia a doua, este 2 şi apare de 6 :ori.Cheia 5 apare o dată, iar cheia 7 apare de 3 ori.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; castelin.txt &lt;br /&gt;
 1001&lt;br /&gt;
; castelout.txt &lt;br /&gt;
 Datele de intrare nu respecta conditiile impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def gaseste_cheie_si_repetari(nr_coduri, coduri_acces):&lt;br /&gt;
    frecvente_chei = {}&lt;br /&gt;
&lt;br /&gt;
    # Calculează frecvența fiecărei chei în codurile de acces&lt;br /&gt;
    for cod in coduri_acces:&lt;br /&gt;
        for cifra in str(cod):&lt;br /&gt;
            frecvente_chei[cifra] = frecvente_chei.get(cifra, 0) + 1&lt;br /&gt;
&lt;br /&gt;
    # Găsește cheia cu cea mai mare frecvență&lt;br /&gt;
    cheie_maxima = max(frecvente_chei, key=frecvente_chei.get)&lt;br /&gt;
    repetari_cheie_maxima = frecvente_chei[cheie_maxima]&lt;br /&gt;
&lt;br /&gt;
    return cheie_maxima, repetari_cheie_maxima&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea din fișierul de intrare&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;castelin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
            nr_coduri = int(file.readline().strip())&lt;br /&gt;
            coduri_acces = list(map(int, file.readline().split()))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fisierul de intrare nu exista.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta conditiile impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if not (1 &amp;lt;= nr_coduri &amp;lt;= 1000):&lt;br /&gt;
        with open(&amp;quot;castelout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_output:&lt;br /&gt;
            file_output.write(&amp;quot;Datele de intrare nu respecta conditiile impuse.\n&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Calculul cheii și repetărilor&lt;br /&gt;
    cheie, repetari = gaseste_cheie_si_repetari(nr_coduri, coduri_acces)&lt;br /&gt;
&lt;br /&gt;
    # Scrierea în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;castelout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_output:&lt;br /&gt;
        file_output.write(&amp;quot;Datele de intrare corespund conditiilor impuse.\n&amp;quot;)&lt;br /&gt;
        file_output.write(f&amp;quot;{cheie} {repetari}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1931_-_Fantastice&amp;diff=9007</id>
		<title>1931 - Fantastice</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1931_-_Fantastice&amp;diff=9007"/>
		<updated>2024-01-04T18:55:51Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Definim un număr ca fiind fantastic dacă numărul de numere la care acesta se împarte exact este un număr prim.&lt;br /&gt;
Dându-se un șir cu &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; numere întregi strict pozitive, să se afișeze numărul de numere fantastice din șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;fantasticein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; de numere, iar pe cea de-a doua linie, separate prin câte un spaţiu, cele &#039;&#039;&#039;numar_elemente&#039;&#039;&#039;   numere.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;fantasticeout.txt&#039;&#039;&#039; va conține pe prima linie numărul de numere fantastice din șir.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund ceerintelor impuse.&amp;quot;, iar daca indeplinesc cerintele enuntate se va afisa mesajul &amp;quot;Datele de intrare corespund cerintelor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;numar_elemente&#039;&#039;&#039; &amp;amp;les; 1000000 &lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici sau egale cu 1.000.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; fantasticein.txt &lt;br /&gt;
 6&lt;br /&gt;
 21 19 25 16 27 729&lt;br /&gt;
&lt;br /&gt;
; fantasticeout.txt&lt;br /&gt;
 Datele de intrare corespund cerintelor impuse.&lt;br /&gt;
&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
==Explicatie==&lt;br /&gt;
 21 are divizorii 1, 3, 7, 21&lt;br /&gt;
 19 are divizorii 1, 19&lt;br /&gt;
 25 are divizorii 1, 5, 25&lt;br /&gt;
 16 are divizorii 1, 2, 4, 8, 16&lt;br /&gt;
 27 are divizorii 1, 3, 9, 27&lt;br /&gt;
 729 are divizorii 1, 3, 9, 27, 81, 243, 729&lt;br /&gt;
 Deci sunt 4 numere fantastice: 19 25 16 729&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; fantastice.in &lt;br /&gt;
 5&lt;br /&gt;
 1000001 500000 700000 900000 1200000&lt;br /&gt;
; fantastice.out &lt;br /&gt;
 Datele de intrare nu corespund cerintelor impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar**0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def numere_fantastice(șir):&lt;br /&gt;
    count_fantastice = 0&lt;br /&gt;
&lt;br /&gt;
    for numar in șir:&lt;br /&gt;
        if numar &amp;lt;= 0 or numar &amp;gt; 1000000:&lt;br /&gt;
            return -1  # Datele de intrare nu respectă condițiile&lt;br /&gt;
&lt;br /&gt;
        numar_divizori = 0&lt;br /&gt;
        for i in range(1, numar + 1):&lt;br /&gt;
            if numar % i == 0:&lt;br /&gt;
                numar_divizori += 1&lt;br /&gt;
&lt;br /&gt;
        if este_prim(numar_divizori):&lt;br /&gt;
            count_fantastice += 1&lt;br /&gt;
&lt;br /&gt;
    return count_fantastice&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea din fișierul de intrare&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;fantasticein.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
            numar_elemente = int(file.readline().strip())&lt;br /&gt;
            numere = list(map(int, file.readline().split()))&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fisierul de intrare nu exista.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund cerintelor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Verificarea restricțiilor și calculul numărului de numere fantastice&lt;br /&gt;
    rezultat = numere_fantastice(numere)&lt;br /&gt;
&lt;br /&gt;
    # Scrierea în fișierul de ieșire sau afișarea mesajului de eroare&lt;br /&gt;
    with open(&amp;quot;fantasticeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        if rezultat == -1:&lt;br /&gt;
            file.write(&amp;quot;Datele de intrare nu corespund cerintelor impuse.\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            file.write(&amp;quot;Datele de intrare corespund cerintelor impuse.\n&amp;quot;)&lt;br /&gt;
            file.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2273_-_Ssplit&amp;diff=9004</id>
		<title>2273 - Ssplit</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2273_-_Ssplit&amp;diff=9004"/>
		<updated>2024-01-04T18:36:28Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;a[1], a[2], …, a[n] &#039;&#039;&#039; de numere naturale nenule. Pentru doi indici &#039;&#039;&#039;1 ≤ i &amp;lt; j &amp;lt; n&#039;&#039;&#039;, notăm cu &#039;&#039;&#039;X = a[1] + a[2] + ... + a[i], Y = a[i+1] + a[i+2] + ... + a[j] &#039;&#039;&#039; și &#039;&#039;&#039;Z = a[j+1] + a[j+2] + ... + a[n] &#039;&#039;&#039;.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine doi indici &#039;&#039;&#039;i&#039;&#039;&#039; și &#039;&#039;&#039;j&#039;&#039;&#039; astfel încât diferența &#039;&#039;&#039;max(X, Y, Z) - min(X, Y, Z) &#039;&#039;&#039; să fie minimă.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi șirul de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran valorile indicilor &#039;&#039;&#039;i&#039;&#039;&#039; și &#039;&#039;&#039;j&#039;&#039;&#039;. Dacă sunt mai multe soluții, se va afișa aceea pentru care &#039;&#039;&#039;i&#039;&#039;&#039; este minim, iar dacă sunt mai multe soluții cu același &#039;&#039;&#039;i&#039;&#039;&#039; minim, se va afișa aceea cu indicele &#039;&#039;&#039;j&#039;&#039;&#039; minim.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;, iar daca indeplinesc cerintele enuntate se va afisa mesajul Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 200000&lt;br /&gt;
* 1 &amp;amp;les; &#039;&#039;&#039; a[i] &#039;&#039;&#039; &amp;amp;les; 10000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 10&lt;br /&gt;
 1 3 4 2 1 2 10 5 8 6&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 6 8&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
&#039;&#039;&#039;i = 6&#039;&#039;&#039; și &#039;&#039;&#039;j = 8&#039;&#039;&#039;. În acest caz &#039;&#039;&#039;X = 13&#039;&#039;&#039;, &#039;&#039;&#039;Y = 15&#039;&#039;&#039;, &#039;&#039;&#039;Z = 14&#039;&#039;&#039;. Diferența este &#039;&#039;&#039;max(X, Y, Z) - min(X, Y, Z) = 15-13 = 2&#039;&#039;&#039;. Nu există o împărțire pentru care diferența să fie mai mică.&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 3&lt;br /&gt;
 4000 12000 5000&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu indeplinesc cerintele impuse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def gaseste_indici_minim_diferenta(arr):&lt;br /&gt;
    n = len(arr)&lt;br /&gt;
    suma_totala = sum(arr)&lt;br /&gt;
    X = 0&lt;br /&gt;
    minim_diff = float(&#039;inf&#039;)  # Inițializăm cu infinit pentru a asigura găsirea unui minim&lt;br /&gt;
    rezultat_i = -1&lt;br /&gt;
    rezultat_j = -1&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n - 1):&lt;br /&gt;
        X += arr[i - 1]&lt;br /&gt;
        Y = suma_totala - X - arr[i]&lt;br /&gt;
        Z = suma_totala - Y - X&lt;br /&gt;
&lt;br /&gt;
        max_xyz = max(X, Y, Z)&lt;br /&gt;
        min_xyz = min(X, Y, Z)&lt;br /&gt;
&lt;br /&gt;
        diferenta = max_xyz - min_xyz&lt;br /&gt;
&lt;br /&gt;
        if diferenta &amp;lt; minim_diff:&lt;br /&gt;
            minim_diff = diferenta&lt;br /&gt;
            rezultat_i = i&lt;br /&gt;
            rezultat_j = i + 1&lt;br /&gt;
&lt;br /&gt;
    return rezultat_i, rezultat_j&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citirea șirului de numere&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 200000):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu indeplinesc cerintele impuse&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    arr = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    if any(not (1 &amp;lt;= x &amp;lt;= 10000) for x in arr):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu indeplinesc cerintele impuse&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    # Inițializarea rezultatelor cu valori mari&lt;br /&gt;
    rezultat_i = n&lt;br /&gt;
    rezultat_j = n&lt;br /&gt;
    minim_diff = float(&#039;inf&#039;)  # Inițializăm cu infinit pentru a asigura găsirea unui minim&lt;br /&gt;
&lt;br /&gt;
    # Căutarea tuturor posibilităților și găsirea celei mai bune&lt;br /&gt;
    for i in range(1, n - 1):&lt;br /&gt;
        for j in range(i + 1, n):&lt;br /&gt;
            X = sum(arr[:i])&lt;br /&gt;
            Y = sum(arr[i:j])&lt;br /&gt;
            Z = sum(arr[j:])&lt;br /&gt;
&lt;br /&gt;
            max_xyz = max(X, Y, Z)&lt;br /&gt;
            min_xyz = min(X, Y, Z)&lt;br /&gt;
&lt;br /&gt;
            diferenta = max_xyz - min_xyz&lt;br /&gt;
&lt;br /&gt;
            if diferenta &amp;lt; minim_diff:&lt;br /&gt;
                minim_diff = diferenta&lt;br /&gt;
                rezultat_i = i&lt;br /&gt;
                rezultat_j = j&lt;br /&gt;
&lt;br /&gt;
    # Afișarea mesajului și a rezultatului&lt;br /&gt;
    print(&amp;quot;Datele de intrare indeplinesc cerintele impuse&amp;quot;)&lt;br /&gt;
    print(rezultat_i, rezultat_j)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2901_%E2%80%93_Data_Pal&amp;diff=9002</id>
		<title>2901 – Data Pal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2901_%E2%80%93_Data_Pal&amp;diff=9002"/>
		<updated>2024-01-04T18:28:47Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
În vacanța de iarnă Adelina a decis să renunțe la teme și a ales să citească o parte din cărțile aduse de Moș Crăciun: cele cu teme istorice sau SF. Pe măsură ce citea își nota în caiet datele calendaristice ale acelor evenimente care au impresionat-o. După vacanță îi povestește colegului de bancă despre aceste evenimente și remarcă faptul că unele date calendaristice au o formă specială, de palindrom: citite de la dreapta la stânga reprezintă aceeași dată ca atunci când se citesc obișnuit, de la stânga la dreapta.&lt;br /&gt;
==Cerința==&lt;br /&gt;
Pentru cele &#039;&#039;&#039;nr_date&#039;&#039;&#039; date calendaristice din agenda Adelinei numărați și afișați câte date palindromice au fost găsite iar apoi precizați secolele cu cele mai multe date palindromice.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;datapalin.txt&#039;&#039;&#039; conține următoarele informații :&lt;br /&gt;
- pe prima linie un număr &#039;&#039;&#039;nr_date&#039;&#039;&#039; reprezentând numărul de date calendaristice;&lt;br /&gt;
- pe fiecare dintre următoarele &#039;&#039;&#039;nr_date&#039;&#039;&#039; linii câte o dată calendaristică de forma &#039;&#039;&#039;zz/ll/aaaa&#039;&#039;&#039; (două cifre pentru zi, două cifre pentru lună, patru cifre pentru an) .&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;datapalout.txt&#039;&#039;&#039; va conține pe prima linie numărul de date calendaristice palindrom iar pe a doua linie secolele cu cele mai multe date palindrom, în ordine cronologică.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;, iar daca indeplinesc cerintele enuntate se va afisa mesajul Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 0 &amp;amp;lt; &#039;&#039;&#039;nr_date&#039;&#039;&#039;&amp;amp;les; 1000&lt;br /&gt;
* toate datele calendaristice sunt valide;&lt;br /&gt;
* în colecția de date de test există întotdeauna cel puțin o dată palindromică&lt;br /&gt;
* anii aparțin perioadei 10-9999 și sunt d.Hr.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 5&lt;br /&gt;
 01122110&lt;br /&gt;
 11111111&lt;br /&gt;
 19111111&lt;br /&gt;
 09122190&lt;br /&gt;
 12111121&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare corespund cerintelor impuse&lt;br /&gt;
 4 &lt;br /&gt;
 12 22&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 5&lt;br /&gt;
 01122110&lt;br /&gt;
 11111111&lt;br /&gt;
 19111111&lt;br /&gt;
 0912190&lt;br /&gt;
 12111121&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu corespund cerintelor impuse&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_palindrom(data):&lt;br /&gt;
    return data == data[::-1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citeste_date_din_fisier(cale_fisier):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(cale_fisier, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
            nr_date = int(f.readline().strip())&lt;br /&gt;
            date_agenda = [f.readline().strip() for _ in range(nr_date)]&lt;br /&gt;
    except (ValueError, FileNotFoundError):&lt;br /&gt;
        return None  # Returnăm None dacă nu se pot citi datele din fișier&lt;br /&gt;
&lt;br /&gt;
    return date_agenda&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gaseste_secole_cu_cele_mai_multe_date_palindromice(date_palindromice):&lt;br /&gt;
    secole_aparitii = defaultdict(list)&lt;br /&gt;
&lt;br /&gt;
    for data in date_palindromice:&lt;br /&gt;
        an = int(data[4:])&lt;br /&gt;
        secol = an // 100 + 1&lt;br /&gt;
        secole_aparitii[secol].append(an)&lt;br /&gt;
&lt;br /&gt;
    max_count = max(len(aparitii) for aparitii in secole_aparitii.values())&lt;br /&gt;
    secole_max_count = sorted([secol for secol, aparitii in secole_aparitii.items() if len(aparitii) == max_count])&lt;br /&gt;
&lt;br /&gt;
    return secole_max_count&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    date_agenda = citeste_date_din_fisier(&amp;quot;datapalin.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if date_agenda is None or any(len(data) != 8 for data in date_agenda):&lt;br /&gt;
        with open(&amp;quot;datapalout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_output:&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare nu corespund cerintelor impuse\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Câte date palindromice au fost găsite&lt;br /&gt;
        date_palindromice = [data for data in date_agenda if este_palindrom(data)]&lt;br /&gt;
        numar_date_palindromice = len(date_palindromice)&lt;br /&gt;
&lt;br /&gt;
        # Găsește secolele cu cele mai multe date palindromice&lt;br /&gt;
        secole_max_count = gaseste_secole_cu_cele_mai_multe_date_palindromice(date_palindromice)&lt;br /&gt;
&lt;br /&gt;
        # Scrie rezultatele în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;datapalout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_output:&lt;br /&gt;
            f_output.write(&amp;quot;Datele de intrare corespund cerintelor impuse\n&amp;quot;)&lt;br /&gt;
            f_output.write(str(numar_date_palindromice) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
            f_output.write(&amp;quot; &amp;quot;.join(map(str, secole_max_count)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
==Explicație==&lt;br /&gt;
Sunt 4 date palindromice: două în secolul 12 și două în secolul 22&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2224_-_Mset&amp;diff=8944</id>
		<title>2224 - Mset</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2224_-_Mset&amp;diff=8944"/>
		<updated>2024-01-03T23:06:09Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: /* Cerinţa */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Context ==&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039;, inițial vid. Se definesc următoarele operații:&lt;br /&gt;
*&#039;&#039;&#039;1 x&#039;&#039;&#039; – introduce valoarea &#039;&#039;&#039;x&#039;&#039;&#039; în șirul &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;2 x&#039;&#039;&#039; – șterge toate aparițiile lui &#039;&#039;&#039;x &#039;&#039;&#039;din &#039;&#039;&#039;A &#039;&#039;&#039; (dacă &#039;&#039;&#039;x &#039;&#039;&#039;nu apare deloc în &#039;&#039;&#039;A&#039;&#039;&#039;, operația nu se execută)&lt;br /&gt;
*&#039;&#039;&#039;3 &#039;&#039;&#039;– interogare: care este cea mai mică valoare din &#039;&#039;&#039;A &#039;&#039;&#039;și de câte ori apare (dacă &#039;&#039;&#039;A &#039;&#039;&#039;este șir vid, se va afișa doar valoarea &#039;&#039;&#039;-1&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Dându-se &#039;&#039;&#039;N&#039;&#039;&#039; operații, trebuie să afișați răspunsul la fiecare operație de tip &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;msetin.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;N&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii sunt date cele &#039;&#039;&#039;N&#039;&#039;&#039; operații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;msetout.txt&#039;&#039;&#039; se vor afișa pe câte o linie răspunsurile la operațiile de tip 3.În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ N ≤ 200 000&#039;&#039;&#039;&lt;br /&gt;
*	Va exista cel puțin o operație de tip &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
*	Valorile care se introduc în mulțime sunt numere naturale mai mici decât &#039;&#039;&#039;2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 14&lt;br /&gt;
 3&lt;br /&gt;
 1 55&lt;br /&gt;
 1 55&lt;br /&gt;
 3&lt;br /&gt;
 1 40&lt;br /&gt;
 3&lt;br /&gt;
 1 7&lt;br /&gt;
 1 7&lt;br /&gt;
 3&lt;br /&gt;
 2 7 &lt;br /&gt;
 1 50&lt;br /&gt;
 3&lt;br /&gt;
 2 40&lt;br /&gt;
 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 -1 0&lt;br /&gt;
 55 2&lt;br /&gt;
 40 1&lt;br /&gt;
 7 2&lt;br /&gt;
 40 1&lt;br /&gt;
 50 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 3&lt;br /&gt;
 1 4&lt;br /&gt;
 2 3&lt;br /&gt;
 2 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def process_operations(operations):&lt;br /&gt;
    result = []&lt;br /&gt;
    values = []&lt;br /&gt;
&lt;br /&gt;
    for op, *args in operations:&lt;br /&gt;
        if op == 1:&lt;br /&gt;
            x, = args&lt;br /&gt;
            values.append(x)&lt;br /&gt;
        elif op == 2:&lt;br /&gt;
            x, = args&lt;br /&gt;
            values = [val for val in values if val != x]&lt;br /&gt;
        elif op == 3:&lt;br /&gt;
            if values:&lt;br /&gt;
                min_value = min(values)&lt;br /&gt;
                count = values.count(min_value)&lt;br /&gt;
                result.append((min_value, count))&lt;br /&gt;
            else:&lt;br /&gt;
                result.append((-1, 0))&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def validate_input(operations):&lt;br /&gt;
    for op, *args in operations:&lt;br /&gt;
        if op == 3:&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;msetin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        operations = [list(map(int, line.split())) for line in file]&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(operations):&lt;br /&gt;
        with open(&amp;quot;msetout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    results = process_operations(operations)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;msetout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        output_file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        for min_value, count in results:&lt;br /&gt;
            output_file.write(f&amp;quot;{min_value} {count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2224_-_Mset&amp;diff=8943</id>
		<title>2224 - Mset</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2224_-_Mset&amp;diff=8943"/>
		<updated>2024-01-03T23:05:45Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: == Context == Se consideră un șir &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;, inițial vid. Se definesc următoarele operații: *&amp;#039;&amp;#039;&amp;#039;1 x&amp;#039;&amp;#039;&amp;#039; – introduce valoarea &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; în șirul &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039; *&amp;#039;&amp;#039;&amp;#039;2 x&amp;#039;&amp;#039;&amp;#039; – șterge toate aparițiile lui &amp;#039;&amp;#039;&amp;#039;x &amp;#039;&amp;#039;&amp;#039;din &amp;#039;&amp;#039;&amp;#039;A &amp;#039;&amp;#039;&amp;#039; (dacă &amp;#039;&amp;#039;&amp;#039;x &amp;#039;&amp;#039;&amp;#039;nu apare deloc în &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;, operația nu se execută) *&amp;#039;&amp;#039;&amp;#039;3 &amp;#039;&amp;#039;&amp;#039;– interogare: care este cea mai mică valoare din &amp;#039;&amp;#039;&amp;#039;A &amp;#039;&amp;#039;&amp;#039;și de câte ori apare (dacă &amp;#039;&amp;#039;&amp;#039;A &amp;#039;&amp;#039;&amp;#039;este șir vid, se va afișa doar valoarea &amp;#039;&amp;#039;&amp;#039;-1&amp;#039;&amp;#039;&amp;#039;)  == Cerinţa == Dându-se N op...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Context ==&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039;, inițial vid. Se definesc următoarele operații:&lt;br /&gt;
*&#039;&#039;&#039;1 x&#039;&#039;&#039; – introduce valoarea &#039;&#039;&#039;x&#039;&#039;&#039; în șirul &#039;&#039;&#039;A&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;2 x&#039;&#039;&#039; – șterge toate aparițiile lui &#039;&#039;&#039;x &#039;&#039;&#039;din &#039;&#039;&#039;A &#039;&#039;&#039; (dacă &#039;&#039;&#039;x &#039;&#039;&#039;nu apare deloc în &#039;&#039;&#039;A&#039;&#039;&#039;, operația nu se execută)&lt;br /&gt;
*&#039;&#039;&#039;3 &#039;&#039;&#039;– interogare: care este cea mai mică valoare din &#039;&#039;&#039;A &#039;&#039;&#039;și de câte ori apare (dacă &#039;&#039;&#039;A &#039;&#039;&#039;este șir vid, se va afișa doar valoarea &#039;&#039;&#039;-1&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Dându-se N operații, trebuie să afișați răspunsul la fiecare operație de tip &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;msetin.txt&#039;&#039;&#039; conține pe prima linie &#039;&#039;&#039;N&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii sunt date cele &#039;&#039;&#039;N&#039;&#039;&#039; operații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;msetout.txt&#039;&#039;&#039; se vor afișa pe câte o linie răspunsurile la operațiile de tip 3.În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ N ≤ 200 000&#039;&#039;&#039;&lt;br /&gt;
*	Va exista cel puțin o operație de tip &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
*	Valorile care se introduc în mulțime sunt numere naturale mai mici decât &#039;&#039;&#039;2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 14&lt;br /&gt;
 3&lt;br /&gt;
 1 55&lt;br /&gt;
 1 55&lt;br /&gt;
 3&lt;br /&gt;
 1 40&lt;br /&gt;
 3&lt;br /&gt;
 1 7&lt;br /&gt;
 1 7&lt;br /&gt;
 3&lt;br /&gt;
 2 7 &lt;br /&gt;
 1 50&lt;br /&gt;
 3&lt;br /&gt;
 2 40&lt;br /&gt;
 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 -1 0&lt;br /&gt;
 55 2&lt;br /&gt;
 40 1&lt;br /&gt;
 7 2&lt;br /&gt;
 40 1&lt;br /&gt;
 50 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 3&lt;br /&gt;
 1 4&lt;br /&gt;
 2 3&lt;br /&gt;
 2 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def process_operations(operations):&lt;br /&gt;
    result = []&lt;br /&gt;
    values = []&lt;br /&gt;
&lt;br /&gt;
    for op, *args in operations:&lt;br /&gt;
        if op == 1:&lt;br /&gt;
            x, = args&lt;br /&gt;
            values.append(x)&lt;br /&gt;
        elif op == 2:&lt;br /&gt;
            x, = args&lt;br /&gt;
            values = [val for val in values if val != x]&lt;br /&gt;
        elif op == 3:&lt;br /&gt;
            if values:&lt;br /&gt;
                min_value = min(values)&lt;br /&gt;
                count = values.count(min_value)&lt;br /&gt;
                result.append((min_value, count))&lt;br /&gt;
            else:&lt;br /&gt;
                result.append((-1, 0))&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def validate_input(operations):&lt;br /&gt;
    for op, *args in operations:&lt;br /&gt;
        if op == 3:&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;msetin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        operations = [list(map(int, line.split())) for line in file]&lt;br /&gt;
&lt;br /&gt;
    if not validate_input(operations):&lt;br /&gt;
        with open(&amp;quot;msetout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    results = process_operations(operations)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;msetout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        output_file.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
        for min_value, count in results:&lt;br /&gt;
            output_file.write(f&amp;quot;{min_value} {count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1794_-_Aint&amp;diff=8940</id>
		<title>1794 - Aint</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1794_-_Aint&amp;diff=8940"/>
		<updated>2024-01-03T22:46:23Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: == Cerinţa == Se dă un vector cu &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; elemente numere naturale 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; și &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; operații de forma: *&amp;#039;&amp;#039;&amp;#039;1 x y&amp;#039;&amp;#039;&amp;#039;, cu semnificația: elementul de poziția &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; ia valoarea valoarea &amp;#039;&amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;#039;. *&amp;#039;&amp;#039;&amp;#039;2 x y&amp;#039;&amp;#039;&amp;#039;: se determină valoarea minimă a elementelor cu indici cuprinși între &amp;#039;&amp;#039;&amp;#039;x&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;y&amp;#039;&amp;#039;&amp;#039;. Afișați rezultatele operațiilor de tipul &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;. ==Date de intrare== Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;aintin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numerele &amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un vector cu &#039;&#039;&#039;N&#039;&#039;&#039; elemente numere naturale numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;M&#039;&#039;&#039; operații de forma:&lt;br /&gt;
*&#039;&#039;&#039;1 x y&#039;&#039;&#039;, cu semnificația: elementul de poziția &#039;&#039;&#039;x&#039;&#039;&#039; ia valoarea valoarea &#039;&#039;&#039;y&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;2 x y&#039;&#039;&#039;: se determină valoarea minimă a elementelor cu indici cuprinși între &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039;.&lt;br /&gt;
Afișați rezultatele operațiilor de tipul &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;aintin.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;. Pe următoarea linie se află &#039;&#039;&#039;N&#039;&#039;&#039; elemente ce reprezintă elementele vectorului. Pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii se află operațiile efectuate pe vector.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;aintout.txt&#039;&#039;&#039; va conține răspunsurile operațiilor de tipul &#039;&#039;&#039;2&#039;&#039;&#039;, în ordinea în care apar în fișierul de intrare.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ N,M ≤ 100000&#039;&#039;&#039;&lt;br /&gt;
*Elementele vectorului sunt &#039;&#039;&#039;≤ 1000000000&#039;&#039;&#039;&lt;br /&gt;
*Pentru operațiile de tipul 1, &#039;&#039;&#039;1 ≤ x ≤ N, 0 ≤ y ≤ 1000000000&#039;&#039;&#039;&lt;br /&gt;
*Pentru operațiile de tipul 2, &#039;&#039;&#039;1 ≤ x ≤ y ≤ N&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 7 4&lt;br /&gt;
 2 3 4 1 2 7 2&lt;br /&gt;
 1 2 3&lt;br /&gt;
 1 4 6&lt;br /&gt;
 2 2 6&lt;br /&gt;
 2 1 7&lt;br /&gt;
; Ieșire&lt;br /&gt;
 2&lt;br /&gt;
 2 &lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 8 3&lt;br /&gt;
 2 3 4 1 2 7 2&lt;br /&gt;
 1 2 3&lt;br /&gt;
 1 10 6&lt;br /&gt;
 2 2 6&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;aintin.txt&amp;quot;, &amp;quot;r&amp;quot;) as infile, open(&amp;quot;aintout.txt&amp;quot;, &amp;quot;w&amp;quot;) as outfile:&lt;br /&gt;
        N, M = map(int, infile.readline().split())&lt;br /&gt;
        nums = list(map(int, infile.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        for _ in range(M):&lt;br /&gt;
            op, x, y = map(int, infile.readline().split())&lt;br /&gt;
&lt;br /&gt;
            if not (1 &amp;lt;= N &amp;lt;= 100000 and 1 &amp;lt;= M &amp;lt;= 100000 and all(1 &amp;lt;= num &amp;lt;= 1000000000 for num in nums) and&lt;br /&gt;
                    (op == 1 and 1 &amp;lt;= x &amp;lt;= N and 0 &amp;lt;= y &amp;lt;= 1000000000 or op == 2 and 1 &amp;lt;= x &amp;lt;= y &amp;lt;= N)):&lt;br /&gt;
                outfile.write(&amp;quot;Datele de intrare nu respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
                return&lt;br /&gt;
&lt;br /&gt;
            if op == 1:&lt;br /&gt;
                nums[x - 1] = y&lt;br /&gt;
            elif op == 2:&lt;br /&gt;
                subvec = nums[x - 1:y]&lt;br /&gt;
                subvec.sort()&lt;br /&gt;
                outfile.write(f&amp;quot;{subvec[0]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        outfile.write(&amp;quot;Datele de intrare respecta cerintele impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3474_-_Squary&amp;diff=8936</id>
		<title>3474 - Squary</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3474_-_Squary&amp;diff=8936"/>
		<updated>2024-01-03T22:26:47Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: == Cerinţa == Se dau &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale. Aflați numărul subsecventelor care au produsul pătrat perfect. ==Date de intrare== Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar apoi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale, separate prin spații. == Date de ieșire ==  Programul va afișa pe ecran numărul subsecventelor care respectă condiția. În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;#039;&amp;#039;&amp;#039;&amp;quot;Datele de...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Aflați numărul subsecventelor care au produsul pătrat perfect.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul subsecventelor care respectă condiția.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;300&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 5&lt;br /&gt;
 1 2 4 8 16&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 7&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 3&lt;br /&gt;
 1 2 500&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from math import isqrt&lt;br /&gt;
&lt;br /&gt;
def numar_subsecvente_patrat_perfect(n, numere):&lt;br /&gt;
    numar_subsecvente = 0&lt;br /&gt;
    prefixe_produs = [1]&lt;br /&gt;
&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        prefixe_produs.append(prefixe_produs[-1] * numar)&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            produs = prefixe_produs[j + 1] // prefixe_produs[i]&lt;br /&gt;
&lt;br /&gt;
            if isqrt(produs) ** 2 == produs:&lt;br /&gt;
                numar_subsecvente += 1&lt;br /&gt;
&lt;br /&gt;
    return numar_subsecvente&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input())&lt;br /&gt;
        numere = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
        if 1 &amp;lt;= n &amp;lt;= 100000 and len(numere) == n and all(1 &amp;lt;= numar &amp;lt;= 300 for numar in numere):&lt;br /&gt;
            print(&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
            rezultat = numar_subsecvente_patrat_perfect(n, numere)&lt;br /&gt;
            print(rezultat)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3660_-_Unghi_Drept&amp;diff=8935</id>
		<title>3660 - Unghi Drept</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3660_-_Unghi_Drept&amp;diff=8935"/>
		<updated>2024-01-03T22:19:09Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: == Cerinţa == Se dau n puncte în plan. O operație constă în alegerea unui triunghi dreptunghic și adăugarea unui punct, astfel încât cele &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; puncte alese și cel adăugat să formeze un nou dreptunghi. Aflați numărul maxim de operații ce se pot efectua. ==Date de intrare== Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar apoi &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; linii cu câte &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; numere naturale. == Date de ieșire ==  Programul va afișa pe ecran numărul cerut. În cazul...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dau n puncte în plan. O operație constă în alegerea unui triunghi dreptunghic și adăugarea unui punct, astfel încât cele &#039;&#039;&#039;3&#039;&#039;&#039; puncte alese și cel adăugat să formeze un nou dreptunghi. Aflați numărul maxim de operații ce se pot efectua.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; linii cu câte &#039;&#039;&#039;2&#039;&#039;&#039; numere naturale.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul cerut.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;le; n &amp;amp;le; 200.000&#039;&#039;&#039;&lt;br /&gt;
*celelalte numere citite vor fi mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 4&lt;br /&gt;
 1 3&lt;br /&gt;
 2 3&lt;br /&gt;
 1 2&lt;br /&gt;
 3 3&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 2&lt;br /&gt;
==Explicație==&lt;br /&gt;
La prima operație, alegem triungiul cu coordonatele &#039;&#039;&#039; (1, 2), (1, 3), (2, 3) &#039;&#039;&#039; și adăugăm punctul &#039;&#039;&#039; (2, 2) &#039;&#039;&#039;. La al doilea, alegem triunghiul cu coordonatele &#039;&#039;&#039; (2, 2), (2, 3), (3, 3) &#039;&#039;&#039; și adăugăm punctul &#039;&#039;&#039; (3, 2) &#039;&#039;&#039;. De aici, nu mai putem efectua nicio operație.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def numar_maxim_operatii(puncte):&lt;br /&gt;
    coordonate_x = {}&lt;br /&gt;
    coordonate_y = {}&lt;br /&gt;
&lt;br /&gt;
    for x, y in puncte:&lt;br /&gt;
        if x in coordonate_x:&lt;br /&gt;
            coordonate_x[x] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            coordonate_x[x] = 1&lt;br /&gt;
&lt;br /&gt;
        if y in coordonate_y:&lt;br /&gt;
            coordonate_y[y] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            coordonate_y[y] = 1&lt;br /&gt;
&lt;br /&gt;
    numar_operatii = 0&lt;br /&gt;
&lt;br /&gt;
    for x, y in puncte:&lt;br /&gt;
        numar_operatii += (coordonate_x[x] - 1) * (coordonate_y[y] - 1)&lt;br /&gt;
&lt;br /&gt;
    return numar_operatii&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input())&lt;br /&gt;
&lt;br /&gt;
        if 1 &amp;lt;= n &amp;lt;= 200000:&lt;br /&gt;
            puncte = [tuple(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
            if all(1 &amp;lt;= x &amp;lt;= 2000000000 and 1 &amp;lt;= y &amp;lt;= 2000000000 for x, y in puncte):&lt;br /&gt;
                rezultat = numar_maxim_operatii(puncte)&lt;br /&gt;
                print(&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
                print(rezultat)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2631_-_H4&amp;diff=8931</id>
		<title>2631 - H4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2631_-_H4&amp;diff=8931"/>
		<updated>2024-01-03T21:56:53Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: ==Context== Spunem că două cuvinte sunt anagrame dacă au aceleași litere, eventual în altă ordine. De exemplu, &amp;#039;&amp;#039;&amp;#039;abac&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;baca&amp;#039;&amp;#039;&amp;#039; sunt anagrame, dar &amp;#039;&amp;#039;&amp;#039;abac&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;abbc&amp;#039;&amp;#039;&amp;#039; nu sunt. Dându-se un șir de cuvinte separate prin spații sau enter, vom considera că dacă mai multe cuvinte sunt anagrame, atunci ele fac parte din același grup. == Cerinţa == Să se determine numărul maxim de cuvinte dintr-un grup. ==Date de intrare== Programul citește de la tastat...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
Spunem că două cuvinte sunt anagrame dacă au aceleași litere, eventual în altă ordine. De exemplu, &#039;&#039;&#039;abac&#039;&#039;&#039; și &#039;&#039;&#039;baca&#039;&#039;&#039; sunt anagrame, dar &#039;&#039;&#039;abac&#039;&#039;&#039; și &#039;&#039;&#039;abbc&#039;&#039;&#039; nu sunt. Dându-se un șir de cuvinte separate prin spații sau enter, vom considera că dacă mai multe cuvinte sunt anagrame, atunci ele fac parte din același grup.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine numărul maxim de cuvinte dintr-un grup.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură o succesiune de cuvinte separate prin spații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran un singur număr reprezentând numărul maxim de cuvinte dintr-un grup.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*Cuvintele au lungimea cel mult &#039;&#039;&#039;14&#039;&#039;&#039; și conțin numai litere mici.&lt;br /&gt;
*Vor exista cel mult &#039;&#039;&#039;100.000&#039;&#039;&#039; de cuvinte în șir.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 alee leee   elea car   rac eela eeel  elee  elee&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 4&lt;br /&gt;
==Explicație==&lt;br /&gt;
Grupul maximal este format din cuvintele &#039;&#039;&#039;leee, eeel, elee, elee&#039;&#039;&#039;. &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 Alee leee   elea car   &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def numar_maxim_anagrame(cuvinte):&lt;br /&gt;
    grupuri_anagrame = {}&lt;br /&gt;
&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        cheie = &#039;&#039;.join(sorted(cuvant))&lt;br /&gt;
        if cheie in grupuri_anagrame:&lt;br /&gt;
            grupuri_anagrame[cheie].append(cuvant)&lt;br /&gt;
        else:&lt;br /&gt;
            grupuri_anagrame[cheie] = [cuvant]&lt;br /&gt;
&lt;br /&gt;
    numar_maxim = max(len(grup) for grup in grupuri_anagrame.values())&lt;br /&gt;
&lt;br /&gt;
    return numar_maxim&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        input_str = input()&lt;br /&gt;
        cuvinte = input_str.split()&lt;br /&gt;
&lt;br /&gt;
        if all(1 &amp;lt;= len(cuvant) &amp;lt;= 14 and cuvant.islower() for cuvant in cuvinte) and 1 &amp;lt;= len(cuvinte) &amp;lt;= 100000:&lt;br /&gt;
            rezultat = numar_maxim_anagrame(cuvinte)&lt;br /&gt;
            print(&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
            print(rezultat)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2628_-_H2&amp;diff=8920</id>
		<title>2628 - H2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2628_-_H2&amp;diff=8920"/>
		<updated>2024-01-03T20:56:46Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: ==Context== În urma referendumului a rămas doar un șir de numere naturale &amp;#039;&amp;#039;&amp;#039;a[1], a[2], …, a[n] &amp;#039;&amp;#039;&amp;#039;. == Cerinţa == Să se determine cel mai mic număr care apare exact o dată în șir. ==Date de intrare== Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, apoi șirul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale, separate prin spații. == Date de ieșire ==  Programul va afișa pe ecran numărul &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul minim care apare exact o dată în șir. În cazul în care...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
În urma referendumului a rămas doar un șir de numere naturale &#039;&#039;&#039;a[1], a[2], …, a[n] &#039;&#039;&#039;.&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Să se determine cel mai mic număr care apare exact o dată în șir.&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, apoi șirul &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;m&#039;&#039;&#039;, reprezentând numărul minim care apare exact o dată în șir.&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;10 ≤ n ≤ 1 000 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;0 ≤ a[i] ≤ 2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*Se garantează că există cel puțin un număr care apare o singură dată.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 10&lt;br /&gt;
 5 3 8 7 3 3 2 5 9 5&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 2&lt;br /&gt;
==Explicație==&lt;br /&gt;
Numerele care apar o singură dată în șir sunt: &#039;&#039;&#039;8, 7, 2, 9&#039;&#039;&#039;. Cel mai mic este &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 9&lt;br /&gt;
 5 3 8 7 3 3 2 5 9 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input())&lt;br /&gt;
        sir = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
        if len(sir) == n and all(0 &amp;lt;= numar &amp;lt;= 2000000000 for numar in sir):&lt;br /&gt;
            if 10 &amp;lt;= n &amp;lt;= 1000000:&lt;br /&gt;
                frecvente = {}&lt;br /&gt;
                aparitii = set()&lt;br /&gt;
&lt;br /&gt;
                for numar in sir:&lt;br /&gt;
                    if numar in frecvente:&lt;br /&gt;
                        aparitii.discard(frecvente[numar])&lt;br /&gt;
                    else:&lt;br /&gt;
                        frecvente[numar] = 0&lt;br /&gt;
                        aparitii.add(numar)&lt;br /&gt;
&lt;br /&gt;
                if aparitii:&lt;br /&gt;
                    numar_minim = min(aparitii)&lt;br /&gt;
                    print(f&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
                    print(f&amp;quot;Numărul minim care apare exact o dată în șir este: {numar_minim}&amp;quot;)&lt;br /&gt;
                else:&lt;br /&gt;
                    print(&amp;quot;Nu există niciun număr care să apară exact o dată în șir.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2937_-_Ora&amp;diff=8917</id>
		<title>2937 - Ora</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2937_-_Ora&amp;diff=8917"/>
		<updated>2024-01-03T20:39:42Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: ==Context== Gigel este la ora de informatică, iar profesorul i-a cerut să sorteze numele celor &amp;#039;&amp;#039;&amp;#039;n &amp;#039;&amp;#039;&amp;#039; colegi ai săi după o regulă specială. Fiecărui nume i se asociază un număr care iniţial este &amp;#039;&amp;#039;&amp;#039;0 &amp;#039;&amp;#039;&amp;#039; și crește cu &amp;#039;&amp;#039;&amp;#039;1 &amp;#039;&amp;#039;&amp;#039; pentru fiecare pereche de vocale consecutive și scade cu 1 pentru fiecare pereche de consoane consecutive din nume. Dacă perechea este formată dintr-o vocală și o consoană, numărul nu se modifică.  == Cerinţa == Dându-se cele &amp;#039;&amp;#039;&amp;#039;n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Context==&lt;br /&gt;
Gigel este la ora de informatică, iar profesorul i-a cerut să sorteze numele celor &#039;&#039;&#039;n &#039;&#039;&#039; colegi ai săi după o regulă specială. Fiecărui nume i se asociază un număr care iniţial este &#039;&#039;&#039;0 &#039;&#039;&#039; și crește cu &#039;&#039;&#039;1 &#039;&#039;&#039; pentru fiecare pereche de vocale consecutive și scade cu 1 pentru fiecare pereche de consoane consecutive din nume. Dacă perechea este formată dintr-o vocală și o consoană, numărul nu se modifică.&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Dându-se cele &#039;&#039;&#039;n &#039;&#039;&#039; nume ale colegilor, să se sorteze crescător după numerele asociate. La numere egale, se vor sorta alfabetic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n &#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n &#039;&#039;&#039; nume, fiecare pe câte o linie nouă.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran cele &#039;&#039;&#039;n &#039;&#039;&#039; nume sortate, pe linii separate.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 300.000 &#039;&#039;&#039;;&lt;br /&gt;
*numele conțin cel mult &#039;&#039;&#039;20 &#039;&#039;&#039; de caractere;&lt;br /&gt;
*numele copiilor sunt distincte două câte două.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 5&lt;br /&gt;
 George&lt;br /&gt;
 Steve&lt;br /&gt;
 Jotaro&lt;br /&gt;
 Aeioubc&lt;br /&gt;
 Star&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 Star&lt;br /&gt;
 Steve&lt;br /&gt;
 George&lt;br /&gt;
 Jotaro&lt;br /&gt;
 Aeioubc&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def calculeaza_numar(nume):&lt;br /&gt;
    numar = 0&lt;br /&gt;
    vocale = &amp;quot;aeiouAEIOU&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for i in range(len(nume) - 1):&lt;br /&gt;
        pereche = nume[i:i + 2]&lt;br /&gt;
        if pereche[0] in vocale and pereche[1] in vocale:&lt;br /&gt;
            numar += 1&lt;br /&gt;
        elif pereche[0] not in vocale and pereche[1] not in vocale:&lt;br /&gt;
            numar -= 1&lt;br /&gt;
&lt;br /&gt;
    return numar&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introdu numărul de colegi: &amp;quot;))&lt;br /&gt;
        if 1 &amp;lt;= n &amp;lt;= 300000:&lt;br /&gt;
            colegi = [input() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
            if len(set(colegi)) == n and all(1 &amp;lt;= len(nume) &amp;lt;= 20 for nume in colegi):&lt;br /&gt;
                print(&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
                # Sortare utilizând funcția cal0uleaza_numar și apoi numele în caz de egalitate&lt;br /&gt;
                colegi_sortati = sorted(colegi, key=lambda x: (calculeaza_numar(x), x))&lt;br /&gt;
&lt;br /&gt;
                # Afișare rezultat&lt;br /&gt;
                for coleg in colegi_sortati:&lt;br /&gt;
                    print(coleg)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2268_-_Colegi&amp;diff=8915</id>
		<title>2268 - Colegi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2268_-_Colegi&amp;diff=8915"/>
		<updated>2024-01-03T20:32:04Z</updated>

		<summary type="html">&lt;p&gt;Tita Marian: Pagină nouă: == Cerinţa == Dirigu’ vrea să știe care este cel mai frecvent prenume printre elevii din clasa noastră. Pentru aceasta a realizat o listă cu cele &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; prenume ale elevilor din clasă și acum vă cere să determinați prenumele cel mai frecvent și numărul său de apariții. Dacă sunt mai multe prenume cu număr maxim de apariții se va determina primul în ordine alfabetică. .  == Date de intrare == Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar apoi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Dirigu’ vrea să știe care este cel mai frecvent prenume printre elevii din clasa noastră. Pentru aceasta a realizat o listă cu cele &#039;&#039;&#039;n&#039;&#039;&#039; prenume ale elevilor din clasă și acum vă cere să determinați prenumele cel mai frecvent și numărul său de apariții.&lt;br /&gt;
Dacă sunt mai multe prenume cu număr maxim de apariții se va determina primul în ordine alfabetică.&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&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; prenume ale colegilor.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran &#039;&#039;&#039;S k&#039;&#039;&#039;, separate printr-un spațiu, reprezentând prenumele determinat și numărul de apariții a acestuia.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot; &#039;&#039;&#039;, iar daca se indeplinesc, se afiseaza mesajul &#039;&#039;&#039;&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;&#039;&#039;&#039;&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 ≤ n ≤ 100.000&#039;&#039;&#039; – mda, este o clasă cam mare…&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 8 &lt;br /&gt;
 Maria Tudor Andrei Tudor George Andrei Ioana Andrei&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare respecta cerintele impuse.&lt;br /&gt;
 Andrei 3&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
 0&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
; Ieșire&lt;br /&gt;
 Datele de intrare nu respecta cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare == &lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def cel_mai_frecvent_prenume(n, prenume):&lt;br /&gt;
    frecventa = {}&lt;br /&gt;
&lt;br /&gt;
    for nume in prenume:&lt;br /&gt;
        if nume in frecventa:&lt;br /&gt;
            frecventa[nume] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            frecventa[nume] = 1&lt;br /&gt;
&lt;br /&gt;
    prenume_max_frecventa = max(frecventa, key=lambda x: (frecventa[x], x))&lt;br /&gt;
    numar_aparitii = frecventa[prenume_max_frecventa]&lt;br /&gt;
&lt;br /&gt;
    return prenume_max_frecventa, numar_aparitii&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introdu numărul de prenume: &amp;quot;))&lt;br /&gt;
        if 1 &amp;lt;= n &amp;lt;= 100000:&lt;br /&gt;
            prenume = input(&amp;quot;Introdu lista de prenume separate de spațiu: &amp;quot;).split()&lt;br /&gt;
&lt;br /&gt;
            if len(prenume) != n or any(not nume.isalpha() for nume in prenume):&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele de intrare respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
                rezultat = cel_mai_frecvent_prenume(n, prenume)&lt;br /&gt;
                print(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respecta cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Tita Marian</name></author>
	</entry>
</feed>