<?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=Zmicala+Narcis</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=Zmicala+Narcis"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Zmicala_Narcis"/>
	<updated>2026-05-02T00:24:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15347&amp;diff=10478</id>
		<title>15347</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15347&amp;diff=10478"/>
		<updated>2025-01-02T17:01:06Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15347 (Meda Bojor, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele prime &amp;lt;math&amp;gt;p, q, r, s&amp;lt;/math&amp;gt; pentru care este adevărată relația &amp;lt;math&amp;gt;p \cdot q \cdot r \cdot s = 26(p + q + r + s)&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;
Deoarece &amp;lt;math&amp;gt;26 \mid p \cdot q \cdot r \cdot s&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;p, q, r, s&amp;lt;/math&amp;gt; sunt numere prime, deducem că unul dintre numere este &amp;lt;math&amp;gt;2&amp;lt;/math&amp;gt;, iar altul este &amp;lt;math&amp;gt;13&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Fie &amp;lt;math&amp;gt;p = 2&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q = 13&amp;lt;/math&amp;gt;. Atunci relația devine &amp;lt;math&amp;gt;r \cdot s = r + s + 15&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;r \cdot s - r - s + 1 = 16&amp;lt;/math&amp;gt;, pe care o putem scrie: &amp;lt;math&amp;gt;(r - 1)(s - 1) = 16&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cum &amp;lt;math&amp;gt;r&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;s&amp;lt;/math&amp;gt; sunt numere prime, găsim &amp;lt;math&amp;gt;r = s = 5&amp;lt;/math&amp;gt;. Dacă alegeam &amp;lt;math&amp;gt;p = 2&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;r = 13&amp;lt;/math&amp;gt;, găseam &amp;lt;math&amp;gt;q = s = 5&amp;lt;/math&amp;gt;, și așa mai departe; toate combinațiile posibile.&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15348&amp;diff=10477</id>
		<title>15348</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15348&amp;diff=10477"/>
		<updated>2025-01-02T16:49:14Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;15348 (Gheorghe Boroica, Baia Mare)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Determinați valorile naturale ale numărului &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; pentru care există &amp;lt;math&amp;gt;x, y \in \mathbb{N}^*&amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt;x^3 + 2y^3 = a \cdot (2x^2y + xy^2)&amp;lt;/math&amp;gt;.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție.&amp;#039;&amp;#039;&amp;#039;   Fie &amp;lt;math&amp;gt;d = (x, y)&amp;lt;/math&amp;gt;.  Atunci &amp;lt;math&amp;gt;x = dp&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;y = dq&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; sunt numere naturale prime între ele. Cu aceasta relația dată devine &amp;lt;math&amp;gt;p^3 + 2q^3 = a(2p^2q + pq^2)&amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15348 (Gheorghe Boroica, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați valorile naturale ale numărului &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; pentru care există &amp;lt;math&amp;gt;x, y \in \mathbb{N}^*&amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt;x^3 + 2y^3 = a \cdot (2x^2y + xy^2)&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;
Fie &amp;lt;math&amp;gt;d = (x, y)&amp;lt;/math&amp;gt;.  Atunci &amp;lt;math&amp;gt;x = dp&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;y = dq&amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; sunt numere naturale prime între ele. Cu aceasta relația dată devine &amp;lt;math&amp;gt;p^3 + 2q^3 = a(2p^2q + pq^2)&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;p^3 = aq(2p^2 + pq) - 2q^3&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(1)&amp;lt;/math&amp;gt;, de unde rezultă &amp;lt;math&amp;gt;q \mid p^3&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cum &amp;lt;math&amp;gt;(p, q) = 1&amp;lt;/math&amp;gt;, obținem &amp;lt;math&amp;gt;q = 1&amp;lt;/math&amp;gt;. Relația &amp;lt;math&amp;gt;(1)&amp;lt;/math&amp;gt; devine &amp;lt;math&amp;gt;p^3 = a(2p^2 + p) - 2&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;(2)&amp;lt;/math&amp;gt;. Din &amp;lt;math&amp;gt;(2)&amp;lt;/math&amp;gt; deducem că &amp;lt;math&amp;gt;p \mid 2&amp;lt;/math&amp;gt;, adică &amp;lt;math&amp;gt;p = 1&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;p = 2&amp;lt;/math&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Înlocuind în &amp;lt;math&amp;gt;(2)&amp;lt;/math&amp;gt; &amp;lt;math&amp;gt;p = 1&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;p = 2&amp;lt;/math&amp;gt; obținem, de fiecare dată, &amp;lt;math&amp;gt;a = 1&amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15347&amp;diff=10476</id>
		<title>15347</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15347&amp;diff=10476"/>
		<updated>2025-01-02T16:09:28Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;15347 (Meda Bojor, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Determinați numerele prime p, q, r, s pentru care este adevărată relația p · q · r · s = 26(p + q + r + s).&#039;&#039;  &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Deoarece 26 | p · q · r · s și p, q, r, s sunt numere prime, deducem că unul dintre numere este 2, iar altul este 13. Fie p = 2 și q = 13. Atunci relația devine:  &lt;br /&gt;
r · s = r + s + 15,  &lt;br /&gt;
sau  &lt;br /&gt;
r · s - r - s = 16,  &lt;br /&gt;
pe care o putem scrie:  &lt;br /&gt;
(r - 1)(s - 1) = 16.  &lt;br /&gt;
&lt;br /&gt;
Cum r și s sunt numere prime, găseam r = s = 5. Dacă alegem p = 2 și r = 13, găseam q = s = 5, și așa mai departe; toate combinațiile posibile.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=15347&amp;diff=10475</id>
		<title>15347</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=15347&amp;diff=10475"/>
		<updated>2025-01-02T16:07:56Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;E:15347 (Meda Bojor, Baia Mare)&amp;#039;&amp;#039;&amp;#039; &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;#039;&amp;#039;Determinați numerele prime p, q, r, s pentru care este adevărată relația p · q · r · s = 26(p + q + r + s).&amp;#039;&amp;#039;   &amp;lt;br /&amp;gt; &amp;lt;br /&amp;gt; &amp;#039;&amp;#039;&amp;#039;Soluție:&amp;#039;&amp;#039;&amp;#039;   &amp;lt;br /&amp;gt; Deoarece 26 | p · q · r · s și p, q, r, s sunt numere prime, deducem că unul dintre numere este 2, iar altul este 13. Fie p = 2 și q = 13. Atunci relația devine:   r · s = r + s + 15,   sau   r · s - r - s = 16,   pe care o putem scrie:   (r - 1)(s - 1)...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;E:15347 (Meda Bojor, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;Determinați numerele prime p, q, r, s pentru care este adevărată relația p · q · r · s = 26(p + q + r + s).&#039;&#039;  &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039;  &lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
Deoarece 26 | p · q · r · s și p, q, r, s sunt numere prime, deducem că unul dintre numere este 2, iar altul este 13. Fie p = 2 și q = 13. Atunci relația devine:  &lt;br /&gt;
r · s = r + s + 15,  &lt;br /&gt;
sau  &lt;br /&gt;
r · s - r - s = 16,  &lt;br /&gt;
pe care o putem scrie:  &lt;br /&gt;
(r - 1)(s - 1) = 16.  &lt;br /&gt;
&lt;br /&gt;
Cum r și s sunt numere prime, găseam r = s = 5. Dacă alegem p = 2 și r = 13, găseam q = s = 5, și așa mai departe; toate combinațiile posibile.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1835_-_twoop&amp;diff=8894</id>
		<title>1835 - twoop</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1835_-_twoop&amp;diff=8894"/>
		<updated>2024-01-03T17:05:51Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Se dă un șir de &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; elemente, numere întregi. Pe acest șir se aplică operații de două tipuri : Tip 1: &amp;#039;&amp;#039;&amp;#039;st dr val&amp;#039;&amp;#039;&amp;#039; – elementele de pe pozițiile din intervalul &amp;#039;&amp;#039;&amp;#039;[st, dr]&amp;#039;&amp;#039;&amp;#039; cresc cu valoarea &amp;#039;&amp;#039;&amp;#039;val&amp;#039;&amp;#039;&amp;#039; Tip 2: &amp;#039;&amp;#039;&amp;#039;poz&amp;#039;&amp;#039;&amp;#039; – să se afișeze valoarea elementului de pe poziția &amp;#039;&amp;#039;&amp;#039;poz&amp;#039;&amp;#039;&amp;#039; . Toate operațiile de tipul &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; se aplică numai după ce s-au aplicat toate operațiile de tipul &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;. == Cerința == Dându-se șirul de elemente și operațiile, înce...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dă un șir de &#039;&#039;&#039;N&#039;&#039;&#039; elemente, numere întregi. Pe acest șir se aplică operații de două tipuri :&lt;br /&gt;
Tip 1: &#039;&#039;&#039;st dr val&#039;&#039;&#039; – elementele de pe pozițiile din intervalul &#039;&#039;&#039;[st, dr]&#039;&#039;&#039; cresc cu valoarea &#039;&#039;&#039;val&#039;&#039;&#039;&lt;br /&gt;
Tip 2: &#039;&#039;&#039;poz&#039;&#039;&#039; – să se afișeze valoarea elementului de pe poziția &#039;&#039;&#039;poz&#039;&#039;&#039; .&lt;br /&gt;
Toate operațiile de tipul &#039;&#039;&#039;2&#039;&#039;&#039; se aplică numai după ce s-au aplicat toate operațiile de tipul &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Dându-se șirul de elemente și operațiile, începand cu cele de tipul 1, aplicați operațiile pe șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;twoopin.txt&#039;&#039;&#039; conține pe prima linie numărul de elemente, &#039;&#039;&#039;N&#039;&#039;&#039; , numărul de operații de tip 1, &#039;&#039;&#039;nrOp1&#039;&#039;&#039; , și numărul de operații de tip 2, &#039;&#039;&#039;nrOp2&#039;&#039;&#039;.&lt;br /&gt;
Pe următoarea linie se află cele &#039;&#039;&#039;N&#039;&#039;&#039; elemente separate printr-un spațiu.&lt;br /&gt;
Pe următoarele &#039;&#039;&#039;nrOp1&#039;&#039;&#039; linii se află câte o operație de tip 1 sub forma: &#039;&#039;&#039;st dr val&#039;&#039;&#039;.&lt;br /&gt;
Pe următoarele &#039;&#039;&#039;nrOp2&#039;&#039;&#039; linii se află câte o operație de tip 2 sub forma: &#039;&#039;&#039;poz&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;twoopout.txt&#039;&#039;&#039; va conține pe primele &#039;&#039;&#039;nrOp2&#039;&#039;&#039; linii câte un element, rezultatul unei operații de &#039;&#039;&#039;tip 2&#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;
* &#039;&#039;&#039;-1.000.000.000 ≤ a[i], val ≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ st ≤ dr ≤ N&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ poz ≤ N&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; twoopin.txt&lt;br /&gt;
: 4 4 2&lt;br /&gt;
: 5 0 -1 2&lt;br /&gt;
: 1 2 -2&lt;br /&gt;
: 2 3 10&lt;br /&gt;
: 1 4 2&lt;br /&gt;
: 2 3 3&lt;br /&gt;
: 2&lt;br /&gt;
: 3&lt;br /&gt;
; twoopout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 13&lt;br /&gt;
: 14&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;5 0 -1 2&#039;&#039;&#039; – șir initial&lt;br /&gt;
&#039;&#039;&#039;3 -2 -1 2&#039;&#039;&#039; – după operația 1&lt;br /&gt;
&#039;&#039;&#039;3 8 9 2&#039;&#039;&#039; – după operația 2&lt;br /&gt;
&#039;&#039;&#039;5 10 11 4&#039;&#039;&#039; – după operația 3&lt;br /&gt;
&#039;&#039;&#039;5 13 14 4&#039;&#039;&#039; – după operația 4&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; twoopin.txt&lt;br /&gt;
: 5 2 2&lt;br /&gt;
: 5 0 -1 2 1500000000&lt;br /&gt;
: 1 2 -2&lt;br /&gt;
: 2 3 10&lt;br /&gt;
: 2&lt;br /&gt;
: 3&lt;br /&gt;
; twoopout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1835 - twoop&lt;br /&gt;
def validare(numarde_elemente, numar_operatii, numar_operatiiv2, sirul, operatiiv1, operatiiv2):&lt;br /&gt;
    if numarde_elemente &amp;gt; 100000 or numarde_elemente &amp;lt; 1 or numar_operatii &amp;lt; 1 or numar_operatiiv2 &amp;lt; 1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for element in sirul:&lt;br /&gt;
        if element &amp;gt; 1000000000 or element &amp;lt; -1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    for operatie in operatiiv1:&lt;br /&gt;
        if operatie[0] &amp;lt; 1 or operatie[1] &amp;gt; numarde_elemente or operatie[2] &amp;gt; 1000000000 or operatie[2] &amp;lt; -1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    for pozitie in operatiiv2:&lt;br /&gt;
        if pozitie &amp;lt; 1 or pozitie &amp;gt; numarde_elemente:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def aplica_operatii(sirul, operatii, operatiiv2):&lt;br /&gt;
    for operatie in operatii:&lt;br /&gt;
        for i in range(operatie[0]-1, operatie[1]):&lt;br /&gt;
            sirul[i] += operatie[2]&lt;br /&gt;
    for pozitie in operatiiv2:&lt;br /&gt;
        fisier_iesire.write(str(sirul[pozitie - 1]) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;twoopin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;twoopout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        numar_elemente, numar_operatii1, numar_operatii2 = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        sir = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
        operatii1 = [list(map(int, fisier_intrare.readline().split())) for _ in range(numar_operatii1)]&lt;br /&gt;
        operatii2 = [int(fisier_intrare.readline()) for _ in range(numar_operatii2)]&lt;br /&gt;
&lt;br /&gt;
        validare(numar_elemente, numar_operatii1, numar_operatii2, sir, operatii1, operatii2)&lt;br /&gt;
        aplica_operatii(sir, operatii1, operatii2)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1471_-_maxdiv&amp;diff=8893</id>
		<title>1471 - maxdiv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1471_-_maxdiv&amp;diff=8893"/>
		<updated>2024-01-03T16:51:46Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Adrian este pasionat de matematică. El utilizează denumirea maxdiv pentru numărul care are cei mai mulţi divizori, dintre numerele unui şir dat. Adrian ştie că o secvenţă este un subşir de numere care apar pe poziţii consecutive într-un şir. El denumeşte secvenţă maxdiv o secvenţă din şir, formată din cel puţin două numere, ce începe şi se încheie cu un număr maxdiv şi nu conţine alte numere maxdiv în interior. Având la dispoziţie un şir de n n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Adrian este pasionat de matematică. El utilizează denumirea maxdiv pentru numărul care are cei mai mulţi divizori, dintre numerele unui şir dat. Adrian ştie că o secvenţă este un subşir de numere care apar pe poziţii consecutive într-un şir. El denumeşte secvenţă maxdiv o secvenţă din şir, formată din cel puţin două numere, ce începe şi se încheie cu un număr maxdiv şi nu conţine alte numere maxdiv în interior.&lt;br /&gt;
Având la dispoziţie un şir de n numere naturale, doreşte să afişeze cea mai lungă secvenţă maxdiv şi numărul de secvenţe maxdiv din şir. Dacă şirul de numere dat conţine mai multe secvenţe maxdiv de aceeaşi lungime maximă, se va afişa prima secvenţă de acest tip din şir.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care afişează, pentru un şir dat format din n numere naturale numărul de secvenţe maxdiv şi cea mai lungă secvenţă maxdiv.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;maxdivin.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039; separat printr-un spaţiu de un număr natural &#039;&#039;&#039;t&#039;&#039;&#039;, care reprezintă cerinţa: &#039;&#039;&#039;1&#039;&#039;&#039;, dacă se cere numărul de secvenţe maxdiv, respectiv &#039;&#039;&#039;2&#039;&#039;&#039; dacă se cere cea mai lungă secvenţă maxdiv. Linia a doua din fişier conţine cele &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale ale şirului dat.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieșire &#039;&#039;&#039;maxdivout.txt&#039;&#039;&#039; va conţine pe prima linie un număr natural ce reprezintă numărul de secvenţe maxdiv, pentru şirul de numere dat, dacă cerinţa este &#039;&#039;&#039;1&#039;&#039;&#039;. Dacă cerinţa este &#039;&#039;&#039;2&#039;&#039;&#039;, fişierul de ieşire va conţine un şir de numere naturale, separate între ele prin câte un spaţiu, ce reprezintă cea mai lungă secvenţă maxdiv din şirul dat.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;2 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;2 ≤ x[i] ≤ 1.000.000&#039;&#039;&#039;, unde &#039;&#039;&#039;x[i]&#039;&#039;&#039; reprezintă un număr din şirul dat&lt;br /&gt;
* Şirul de numere conţine cel puţin o secvenţă care începe şi se încheie cu un număr maxdiv&lt;br /&gt;
* Pentru cerința &#039;&#039;&#039;1&#039;&#039;&#039; se acordă 40% din punctaj, iar pentru cerința &#039;&#039;&#039;2&#039;&#039;&#039; se acordă 60% din punctaj.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; maxdivin.txt&lt;br /&gt;
: 7 1&lt;br /&gt;
: 22 60 64 125 315 24 150&lt;br /&gt;
; maxdivout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 2&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cerinţa 1: Şirul de numere dat conţine &#039;&#039;&#039;3&#039;&#039;&#039; numere maxdiv: &#039;&#039;&#039;60&#039;&#039;&#039;, &#039;&#039;&#039;315&#039;&#039;&#039; şi &#039;&#039;&#039;150&#039;&#039;&#039; (au fiecare &#039;&#039;&#039;12&#039;&#039;&#039; divizori) și &#039;&#039;&#039;2&#039;&#039;&#039; secvenţe maxdiv : &#039;&#039;&#039;60 64 125 315&#039;&#039;&#039; şi &#039;&#039;&#039;315 24 150&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; maxdivin.txt&lt;br /&gt;
: 7 2&lt;br /&gt;
: 22 60 64 125 315 24 150&lt;br /&gt;
; maxdiv.out&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 60 64 125 315&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cerinţa 2: Şirul de numere dat conţine &#039;&#039;&#039;2&#039;&#039;&#039; secvenţe maxdiv: &#039;&#039;&#039;60 64 125 315&#039;&#039;&#039; şi &#039;&#039;&#039;315 24 150&#039;&#039;&#039;. Cea mai lungă secvenţă este &#039;&#039;&#039;60 64 125 315&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; maxdivin.txt&lt;br /&gt;
: 7 2&lt;br /&gt;
: 22 60 64 125 315 24 15000000&lt;br /&gt;
; maxdiv.out&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1471 - maxdiv&lt;br /&gt;
def numar_divizori(n1):&lt;br /&gt;
    cnt = 0&lt;br /&gt;
    for i in range(1, int(n1 ** 0.5) + 1):&lt;br /&gt;
        if n1 % i == 0:&lt;br /&gt;
            if n1 / i == i:&lt;br /&gt;
                cnt += 1&lt;br /&gt;
            else:&lt;br /&gt;
                cnt += 2&lt;br /&gt;
    return cnt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(nrs):&lt;br /&gt;
    if len(nrs) &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for nr in nrs:&lt;br /&gt;
        if nr &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def secvente_maxdiv(nrs, t1):&lt;br /&gt;
    maxdiv = max(nrs, key=numar_divizori)&lt;br /&gt;
    secvente = []&lt;br /&gt;
    secventa_curenta = []&lt;br /&gt;
    for nr in nrs:&lt;br /&gt;
        if nr == maxdiv:&lt;br /&gt;
            if secventa_curenta:&lt;br /&gt;
                secventa_curenta.append(nr)&lt;br /&gt;
                secvente.append(secventa_curenta)&lt;br /&gt;
            secventa_curenta = [nr]&lt;br /&gt;
        elif secventa_curenta:&lt;br /&gt;
            secventa_curenta.append(nr)&lt;br /&gt;
    if t1 == 1:&lt;br /&gt;
        fisier_iesire.write(str(len(secvente)))&lt;br /&gt;
    else:&lt;br /&gt;
        max_len = max(len(secventa) for secventa in secvente)&lt;br /&gt;
        for secventa in secvente:&lt;br /&gt;
            if len(secventa) == max_len:&lt;br /&gt;
                fisier_iesire.write(&#039; &#039;.join(map(str, secventa)))&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;maxdivin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;maxdivout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, t = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        numere = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(numere)&lt;br /&gt;
        secvente_maxdiv(numere, t)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1439_-_Sir6&amp;diff=8890</id>
		<title>1439 - Sir6</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1439_-_Sir6&amp;diff=8890"/>
		<updated>2024-01-03T16:34:40Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Se dă un şir de &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere naturale. Din acest şir, putem forma un şir comprimat de forma: &amp;#039;&amp;#039;&amp;#039;a[1], b[1], a[2], b[2], …, a[x], b[x]&amp;#039;&amp;#039;&amp;#039;, din care înţelegem că numărul &amp;#039;&amp;#039;&amp;#039;a[1]&amp;#039;&amp;#039;&amp;#039; apare pe primele &amp;#039;&amp;#039;&amp;#039;b[1]&amp;#039;&amp;#039;&amp;#039; poziţii, &amp;#039;&amp;#039;&amp;#039;a[2]&amp;#039;&amp;#039;&amp;#039; apare pe următoarele &amp;#039;&amp;#039;&amp;#039;b[2]&amp;#039;&amp;#039;&amp;#039; poziţii…, iar &amp;#039;&amp;#039;&amp;#039;a[x]&amp;#039;&amp;#039;&amp;#039; apare pe ultimele &amp;#039;&amp;#039;&amp;#039;b[x]&amp;#039;&amp;#039;&amp;#039; poziţii. De exemplu, dacă şirul dat este &amp;#039;&amp;#039;&amp;#039;1 1 5 5 5 2&amp;#039;&amp;#039;&amp;#039;, atunci şirul comprimat va fi &amp;#039;&amp;#039;&amp;#039;1 2 5 3 2 1&amp;#039;&amp;#039;&amp;#039;. == Cerința == Să se determine: a) Lu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dă un şir de &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale. Din acest şir, putem forma un şir comprimat de forma: &#039;&#039;&#039;a[1], b[1], a[2], b[2], …, a[x], b[x]&#039;&#039;&#039;, din care înţelegem că numărul &#039;&#039;&#039;a[1]&#039;&#039;&#039; apare pe primele &#039;&#039;&#039;b[1]&#039;&#039;&#039; poziţii, &#039;&#039;&#039;a[2]&#039;&#039;&#039; apare pe următoarele &#039;&#039;&#039;b[2]&#039;&#039;&#039; poziţii…, iar &#039;&#039;&#039;a[x]&#039;&#039;&#039; apare pe ultimele &#039;&#039;&#039;b[x]&#039;&#039;&#039; poziţii.&lt;br /&gt;
De exemplu, dacă şirul dat este &#039;&#039;&#039;1 1 5 5 5 2&#039;&#039;&#039;, atunci şirul comprimat va fi &#039;&#039;&#039;1 2 5 3 2 1&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine:&lt;br /&gt;
a) Lungimea celei mai lungi secvenţe formată din numere egale.&lt;br /&gt;
b) Şirul comprimat pentru şirul dat.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;sir6in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;P&#039;&#039;&#039; şi &#039;&#039;&#039;N&#039;&#039;&#039;. Pe următoarea linie se găseşte un şir format din &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;sir6out.txt&#039;&#039;&#039; va conține pe prima linie:&lt;br /&gt;
a) Dacă &#039;&#039;&#039;P&#039;&#039;&#039; este &#039;&#039;&#039;1&#039;&#039;&#039;, lungimea celei mai lungi secvenţe, reprezentând răspunsul la cerinţa a).&lt;br /&gt;
b) Dacă &#039;&#039;&#039;P&#039;&#039;&#039; este &#039;&#039;&#039;2&#039;&#039;&#039;, şirul comprimat, reprezentând răspunsul la cerinţa b).&lt;br /&gt;
caz contrar, se va afișa mesajul:&amp;quot; Datele de intrare nu corespund restrictiilor impuse&amp;quot;&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;N &amp;lt;= 100.000&#039;&#039;&#039;&lt;br /&gt;
* Numerele din şir nu depăşesc &#039;&#039;&#039;1.000.000&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;P&#039;&#039;&#039; este &#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sir6in.txt&lt;br /&gt;
: 1 6&lt;br /&gt;
: 1 1 5 5 5 2&lt;br /&gt;
; sir6out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pentru acest test &#039;&#039;&#039;P = 1&#039;&#039;&#039;, deci se va rezolva doar cerinţa a). Secvenţa cea mai lungă formată din numere egale este: &#039;&#039;&#039;5 5 5&#039;&#039;&#039; şi are lungimea &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; sir6in.txt&lt;br /&gt;
: 2 6&lt;br /&gt;
: 1 1 5 5 5 2&lt;br /&gt;
; sir6out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1 2 5 3 2 1&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pentru acest test &#039;&#039;&#039;P = 2&#039;&#039;&#039;, deci se va rezolva doar cerinţa b). Numărul &#039;&#039;&#039;1&#039;&#039;&#039; apare de &#039;&#039;&#039;2&#039;&#039;&#039; ori, numărul &#039;&#039;&#039;5&#039;&#039;&#039; apare de &#039;&#039;&#039;3&#039;&#039;&#039; ori, iar numărul &#039;&#039;&#039;2&#039;&#039;&#039; apare o singură dată. Prin urmare, şirul comprimat este &#039;&#039;&#039;1 2 5 3 2 1&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; sir6in.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 1 2 3 4 5 1000000001&lt;br /&gt;
: 2&lt;br /&gt;
: 1 3&lt;br /&gt;
: 2 4&lt;br /&gt;
; sir6out.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1439 - Sir6&lt;br /&gt;
from itertools import groupby&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(p, numarde_elemente, sirul):           # functia de validare a datelor de intrare&lt;br /&gt;
    if p not in [1, 2] or not (1 &amp;lt;= numarde_elemente &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    if any(not (0 &amp;lt;= element &amp;lt;= 1000000) for element in sirul):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def proceseaza_sir(p, sirul):                     # functia de rezolvare&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        lungime_maxima = max(len(list(grup)) for _, grup in groupby(sirul))&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{lungime_maxima}\n&amp;quot;)&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        sir_comprimat = [f&amp;quot;{k} {len(list(grup))}&amp;quot; for k, grup in groupby(sirul)]&lt;br /&gt;
        fisier_iesire.write(&amp;quot; &amp;quot;.join(sir_comprimat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;sir6in.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;sir6out.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        P, numar_elemente = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        sir = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(P, numar_elemente, sir)                 # apelul functiei de validare&lt;br /&gt;
        proceseaza_sir(P, sir)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1933_-_Sume2&amp;diff=8885</id>
		<title>1933 - Sume2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1933_-_Sume2&amp;diff=8885"/>
		<updated>2024-01-03T16:16:48Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Fie &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; un numar natural și un șir de &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere naturale &amp;#039;&amp;#039;&amp;#039;V[1], V[2], …, V[N]&amp;#039;&amp;#039;&amp;#039;. Pentru &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; întrebări de forma &amp;#039;&amp;#039;&amp;#039;(i,j)&amp;#039;&amp;#039;&amp;#039;, să se calculeze suma termenilor &amp;#039;&amp;#039;&amp;#039;V[i], V[i + 1], …, V[j]&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Pe prima linie a fișierului &amp;#039;&amp;#039;&amp;#039;sume2in.txt&amp;#039;&amp;#039;&amp;#039; se găsește un număr natural &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;. Pe urmatoarea linie sunt &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere naturale, reprezentând valorile șirului &amp;#039;&amp;#039;&amp;#039;V&amp;#039;&amp;#039;&amp;#039;. Pe a treia linie se găsește un număr natural &amp;#039;&amp;#039;&amp;#039;M&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Fie &#039;&#039;&#039;N&#039;&#039;&#039; un numar natural și un șir de &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale &#039;&#039;&#039;V[1], V[2], …, V[N]&#039;&#039;&#039;. Pentru &#039;&#039;&#039;M&#039;&#039;&#039; întrebări de forma &#039;&#039;&#039;(i,j)&#039;&#039;&#039;, să se calculeze suma termenilor &#039;&#039;&#039;V[i], V[i + 1], …, V[j]&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;sume2in.txt&#039;&#039;&#039; se găsește un număr natural &#039;&#039;&#039;N&#039;&#039;&#039;. Pe urmatoarea linie sunt &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale, reprezentând valorile șirului &#039;&#039;&#039;V&#039;&#039;&#039;. Pe a treia linie se găsește un număr natural &#039;&#039;&#039;M&#039;&#039;&#039; reprezentând numărul de întrebări, iar pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii câte o pereche de numere &#039;&#039;&#039;(i,j)&#039;&#039;&#039;, reprezentând o întrebare pentru care se cere să se calculeze suma &#039;&#039;&#039;V[i] + V[i + 1] + ... + V[j]&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Pe prima linie din fişierul &#039;&#039;&#039;sume2out.txt&#039;&#039;&#039; se găseşte răspunsul la prima întrebare din fişierul de intrare, pe a doua linie se găseşte răspunsul la cea de-a doua întrebare, și așa mai departe.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ N ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ M ≤ 500.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;0 ≤ V[i] ≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
Pentru 30% dintre teste &#039;&#039;&#039;N&#039;&#039;&#039;, &#039;&#039;&#039;M ≤ 1.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; sume2in.txt&lt;br /&gt;
: 4&lt;br /&gt;
: 1 2 3 4  &lt;br /&gt;
: 2&lt;br /&gt;
: 1 3&lt;br /&gt;
: 2 4&lt;br /&gt;
; sume2.out&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 6&lt;br /&gt;
: 9&lt;br /&gt;
== Explicație ==&lt;br /&gt;
uma elementelor de pe pozițiile de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;3&#039;&#039;&#039; este &#039;&#039;&#039;6&#039;&#039;&#039;.&lt;br /&gt;
Suma elementelor de pe pozițiile de la &#039;&#039;&#039;2&#039;&#039;&#039; la &#039;&#039;&#039;4&#039;&#039;&#039; este &#039;&#039;&#039;9&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; sume2in.txt&lt;br /&gt;
: 6&lt;br /&gt;
: 1 2 3 4 5 1000000001&lt;br /&gt;
: 2&lt;br /&gt;
: 1 3&lt;br /&gt;
: 2 4&lt;br /&gt;
; sume2.out&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1933 - Sume2&lt;br /&gt;
def validare(numarde_elemente, numarde_intrebari, sirul, intrebarii):        # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= numarde_elemente &amp;lt;= 100000) or not (1 &amp;lt;= numarde_intrebari &amp;lt;= 500000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    if len(sirul) != numarde_elemente or any(not (0 &amp;lt;= element &amp;lt;= 1000000000) for element in sirul):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    if any(not (1 &amp;lt;= i &amp;lt;= j &amp;lt;= numarde_elemente) for i, j in intrebarii):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_sume(sirul, intrebarii):                     # functia de rezolvare&lt;br /&gt;
    for i, j in intrebarii:&lt;br /&gt;
        suma = sum(sirul[k - 1] for k in range(i, j + 1))&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{suma}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;sume2in.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;sume2out.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        numar_elemente = int(fisier_intrare.readline())&lt;br /&gt;
        sir = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
        numar_intrebari = int(fisier_intrare.readline())&lt;br /&gt;
        intrebari = [list(map(int, fisier_intrare.readline().split())) for _ in range(numar_intrebari)]&lt;br /&gt;
&lt;br /&gt;
        validare(numar_elemente, numar_intrebari, sir, intrebari)                 # apelul functiei de validare&lt;br /&gt;
        calculeaza_sume(sir, intrebari)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3198_-_Optimize&amp;diff=8878</id>
		<title>3198 - Optimize</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3198_-_Optimize&amp;diff=8878"/>
		<updated>2024-01-03T15:54:57Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programul de mai jos citește din fișierul &#039;&#039;&#039;input.txt&#039;&#039;&#039; un vector de elemente întregi și construiește în memorie (apoi scrie în fișierul &#039;&#039;&#039;output.txt&#039;&#039;&#039;) un vector care conține aceleași elemente, doar că având toate elementele egale cu &#039;&#039;&#039;0&#039;&#039; la final. Ordinea celorlalte elemente se păstrează.&lt;br /&gt;
Programul dă întotdeuna rezultatul corect, însă este ineficient din punctul de vedere al timpului de execuție.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Rolul vostru este acela de a optimiza programul, astfel încât acesta să se execute în limita de timp indicată în enunț, pentru un vector de cel mult 1 milion de elemente. Limita de memorie trebuie, de asemenea, respectată. În acest sens, este permisă modificarea (oricât de radicală) a funcției &#039;&#039;&#039;nule&#039;&#039;&#039;. Orice modificare în afara corpului acestei funcții va conduce la respingerea soluței.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;input.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;output.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie elementele vectorului generat.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Important ==&lt;br /&gt;
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce la erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; input.txt&lt;br /&gt;
: 10&lt;br /&gt;
: 0 3 8 0 0 3 8 7 0 10&lt;br /&gt;
; output.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 10&lt;br /&gt;
: 3 8 3 8 7 10 0 0 0 0&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; input.txt&lt;br /&gt;
: 1000001&lt;br /&gt;
: 0 1 2 3 4 5 6 7 8 9 10&lt;br /&gt;
; output.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3198 - Optimize&lt;br /&gt;
def validare(n, v):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    if len(v) != n:&lt;br /&gt;
        raise IndexError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nule(v):&lt;br /&gt;
    size = len(v)&lt;br /&gt;
    for i in range(size - 1):&lt;br /&gt;
        swaped = False&lt;br /&gt;
        for j in range(size - i - 1):&lt;br /&gt;
            if v[j] == 0:&lt;br /&gt;
                v[j], v[j+1] = v[j+1], v[j]&lt;br /&gt;
                swaped = True&lt;br /&gt;
        if not swaped:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_filename = &amp;quot;input.txt&amp;quot;&lt;br /&gt;
    output_filename = &amp;quot;output.txt&amp;quot;&lt;br /&gt;
    # Read vector from input file&lt;br /&gt;
    try:&lt;br /&gt;
        with open(input_filename, &#039;r&#039;) as input_file:&lt;br /&gt;
            size = int(input_file.readline())&lt;br /&gt;
            v = list(map(int, input_file.readline().split()))&lt;br /&gt;
            validare(size, v)&lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(f&amp;quot;Failed to open {input_filename}&amp;quot;)&lt;br /&gt;
        exit(-1)&lt;br /&gt;
    except (ValueError, IndexError) as e:&lt;br /&gt;
        print(e)&lt;br /&gt;
        exit(-1)&lt;br /&gt;
    # Call nule() function&lt;br /&gt;
    nule(v)&lt;br /&gt;
    # Print vector to output file&lt;br /&gt;
    try:&lt;br /&gt;
        with open(output_filename, &#039;w&#039;) as output_file:&lt;br /&gt;
            output_file.write(str(size) + &#039;\n&#039;)&lt;br /&gt;
            output_file.write(&#039; &#039;.join(map(str, v)) + &#039;\n&#039;)&lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(f&amp;quot;Failed to open {output_filename}&amp;quot;)&lt;br /&gt;
        exit(-1)&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>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3198_-_Optimize&amp;diff=8877</id>
		<title>3198 - Optimize</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3198_-_Optimize&amp;diff=8877"/>
		<updated>2024-01-03T15:54:35Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Programul de mai jos citește din fișierul &amp;#039;&amp;#039;&amp;#039;input.txt&amp;#039;&amp;#039;&amp;#039; un vector de elemente întregi și construiește în memorie (apoi scrie în fișierul &amp;#039;&amp;#039;&amp;#039;output.txt&amp;#039;&amp;#039;&amp;#039;) un vector care conține aceleași elemente, doar că având toate elementele egale cu &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039; la final. Ordinea celorlalte elemente se păstrează. Programul dă întotdeuna rezultatul corect, însă este ineficient din punctul de vedere al timpului de execuție. == Cerința == Rolul vostru este acela de a optimiza...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Programul de mai jos citește din fișierul &#039;&#039;&#039;input.txt&#039;&#039;&#039; un vector de elemente întregi și construiește în memorie (apoi scrie în fișierul &#039;&#039;&#039;output.txt&#039;&#039;&#039;) un vector care conține aceleași elemente, doar că având toate elementele egale cu &#039;&#039;&#039;0&#039;&#039; la final. Ordinea celorlalte elemente se păstrează.&lt;br /&gt;
Programul dă întotdeuna rezultatul corect, însă este ineficient din punctul de vedere al timpului de execuție.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Rolul vostru este acela de a optimiza programul, astfel încât acesta să se execute în limita de timp indicată în enunț, pentru un vector de cel mult 1 milion de elemente. Limita de memorie trebuie, de asemenea, respectată. În acest sens, este permisă modificarea (oricât de radicală) a funcției &#039;&#039;&#039;nule&#039;&#039;&#039;. Orice modificare în afara corpului acestei funcții va conduce la respingerea soluței.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;input.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;output.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie elementele vectorului generat.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Important ==&lt;br /&gt;
Soluţia propusă va conţine doar definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce la erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; input.txt&lt;br /&gt;
: 10&lt;br /&gt;
: 0 3 8 0 0 3 8 7 0 10&lt;br /&gt;
; output.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 10&lt;br /&gt;
: 3 8 3 8 7 10 0 0 0 0&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; input.txt&lt;br /&gt;
: 1000001&lt;br /&gt;
: 0 1 2 3 4 5 6 7 8 9 10&lt;br /&gt;
; output.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def validare(n, v):&lt;br /&gt;
    if n &amp;lt; 1 or n &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    if len(v) != n:&lt;br /&gt;
        raise IndexError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    print(&amp;quot;Datele introduse corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nule(v):&lt;br /&gt;
    size = len(v)&lt;br /&gt;
    for i in range(size - 1):&lt;br /&gt;
        swaped = False&lt;br /&gt;
        for j in range(size - i - 1):&lt;br /&gt;
            if v[j] == 0:&lt;br /&gt;
                v[j], v[j+1] = v[j+1], v[j]&lt;br /&gt;
                swaped = True&lt;br /&gt;
        if not swaped:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_filename = &amp;quot;input.txt&amp;quot;&lt;br /&gt;
    output_filename = &amp;quot;output.txt&amp;quot;&lt;br /&gt;
    # Read vector from input file&lt;br /&gt;
    try:&lt;br /&gt;
        with open(input_filename, &#039;r&#039;) as input_file:&lt;br /&gt;
            size = int(input_file.readline())&lt;br /&gt;
            v = list(map(int, input_file.readline().split()))&lt;br /&gt;
            validare(size, v)&lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(f&amp;quot;Failed to open {input_filename}&amp;quot;)&lt;br /&gt;
        exit(-1)&lt;br /&gt;
    except (ValueError, IndexError) as e:&lt;br /&gt;
        print(e)&lt;br /&gt;
        exit(-1)&lt;br /&gt;
    # Call nule() function&lt;br /&gt;
    nule(v)&lt;br /&gt;
    # Print vector to output file&lt;br /&gt;
    try:&lt;br /&gt;
        with open(output_filename, &#039;w&#039;) as output_file:&lt;br /&gt;
            output_file.write(str(size) + &#039;\n&#039;)&lt;br /&gt;
            output_file.write(&#039; &#039;.join(map(str, v)) + &#039;\n&#039;)&lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(f&amp;quot;Failed to open {output_filename}&amp;quot;)&lt;br /&gt;
        exit(-1)&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>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3652_-_secvcost&amp;diff=8863</id>
		<title>3652 - secvcost</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3652_-_secvcost&amp;diff=8863"/>
		<updated>2024-01-03T15:15:54Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Se dă un șir &amp;#039;&amp;#039;&amp;#039;V&amp;#039;&amp;#039;&amp;#039; de &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; numere naturale distincte. O secvență &amp;#039;&amp;#039;&amp;#039;[X, Y]&amp;#039;&amp;#039;&amp;#039; este formată din toate pozițiile consecutive dintre &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; din șir. Se definește costul unei poziții &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039; ca fiind valoarea din șir de pe poziția &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039; înmulțită cu lungimea maximă a unei secvențe care conține poziția &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039; și a cărei valoare maximă se află tot pe poziția &amp;#039;&amp;#039;&amp;#039;P&amp;#039;&amp;#039;&amp;#039;. == Cerința == Se dau &amp;#039;&amp;#039;&amp;#039;M&amp;#039;&amp;#039;&amp;#039; întrebări de forma: &amp;#039;&amp;#039;&amp;#039;X Y&amp;#039;&amp;#039;&amp;#039; – să se...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dă un șir &#039;&#039;&#039;V&#039;&#039;&#039; de &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale distincte. O secvență &#039;&#039;&#039;[X, Y]&#039;&#039;&#039; este formată din toate pozițiile consecutive dintre &#039;&#039;&#039;X&#039;&#039;&#039; și &#039;&#039;&#039;Y&#039;&#039;&#039; din șir. Se definește costul unei poziții &#039;&#039;&#039;P&#039;&#039;&#039; ca fiind valoarea din șir de pe poziția &#039;&#039;&#039;P&#039;&#039;&#039; înmulțită cu lungimea maximă a unei secvențe care conține poziția &#039;&#039;&#039;P&#039;&#039;&#039; și a cărei valoare maximă se află tot pe poziția &#039;&#039;&#039;P&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dau &#039;&#039;&#039;M&#039;&#039;&#039; întrebări de forma: &#039;&#039;&#039;X Y&#039;&#039;&#039; – să se calculeze suma tuturor costurilor pozițiilor din secvența &#039;&#039;&#039;[X, Y]&#039;&#039;&#039;.&lt;br /&gt;
Atenție! Când se calculează costul unei poziții P din &#039;&#039;&#039;[X, Y]&#039;&#039;&#039;, secvența de lungime maximă pe care valoarea &#039;&#039;&#039;V[P]&#039;&#039;&#039; este maximă se calculează în funcție de tot șirul, NU în funcție de secvența &#039;&#039;&#039;[X, Y]&#039;&#039;&#039; (pentru clarificare urmăriți exemplul).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;secvcostin.txt&#039;&#039;&#039; conține pe prima linie cele două numere &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;M&#039;&#039;&#039;, separate prin spațiu. Pe a doua linie se află &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale distincte reprezentând elementele șirului &#039;&#039;&#039;V&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii se află perechi de valori &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;Y&#039;&#039;&#039; reprezentând întrebările la care trebuie să se răspundă.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;secvcostout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;M&#039;&#039;&#039; linii cu câte un număr pe fiecare linie reprezentând răspunsul la cele &#039;&#039;&#039;M&#039;&#039;&#039; întrebări, în ordine.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* Toate valorile din șir sunt mai mici sau egale decât 5.000.000&lt;br /&gt;
* Pentru 25% din teste &#039;&#039;&#039;N, M ≤ 500&#039;&#039;&#039;&lt;br /&gt;
* Pentru alte 25% din teste &#039;&#039;&#039;N, M ≤ 10.000&#039;&#039;&#039;&lt;br /&gt;
* Pentru restul de 50% din teste &#039;&#039;&#039;N, M ≤ 200.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; secvcostin.txt&lt;br /&gt;
: 5 2&lt;br /&gt;
: 2 3 1 5 4&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 2&lt;br /&gt;
; secvcostout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse. &lt;br /&gt;
: 1&lt;br /&gt;
: 9&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pentru prima întrebare avem &#039;&#039;&#039;V[3] = 1&#039;&#039;&#039; care este maxim pe secvența &#039;&#039;&#039;[3, 3]&#039;&#039;&#039;. Costul este &#039;&#039;&#039;1 * 1 = 1&#039;&#039;&#039;. Pentru a doua întrebare avem &#039;&#039;&#039;V[2] = 3&#039;&#039;&#039; care este maxim pe secvența &#039;&#039;&#039;[1, 3]&#039;&#039;&#039;. Costul este &#039;&#039;&#039;3 * 3 = 9&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 == &lt;br /&gt;
; secvcostin.txt&lt;br /&gt;
: 5 3&lt;br /&gt;
: 2 3 1 5 4&lt;br /&gt;
: 1 3&lt;br /&gt;
: 5 5&lt;br /&gt;
: 4 4&lt;br /&gt;
; secvcostout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 12&lt;br /&gt;
: 4&lt;br /&gt;
: 25&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;2*1 + 3*3 + 1*1 = 12&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;4*1 = 4&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;5*5 = 25&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; secvcostin.txt&lt;br /&gt;
: 10 10&lt;br /&gt;
: 10 30 29 39 34 32 3 6 7 9&lt;br /&gt;
: 6 7&lt;br /&gt;
: 1 7&lt;br /&gt;
: 6 10&lt;br /&gt;
: 1 5&lt;br /&gt;
: 7 9&lt;br /&gt;
: 4 7&lt;br /&gt;
: 3 7&lt;br /&gt;
: 5 6&lt;br /&gt;
: 3 7&lt;br /&gt;
: 6 10&lt;br /&gt;
; secvcostout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 163&lt;br /&gt;
: 886&lt;br /&gt;
: 232&lt;br /&gt;
: 723&lt;br /&gt;
: 36&lt;br /&gt;
: 757&lt;br /&gt;
: 786&lt;br /&gt;
: 364&lt;br /&gt;
: 786&lt;br /&gt;
: 232&lt;br /&gt;
== Exemplul 4 == &lt;br /&gt;
; secvcostin.txt&lt;br /&gt;
: 5 2&lt;br /&gt;
: 2 3 1 5 6000000&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 2&lt;br /&gt;
; secvcostout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3652 - secvcost&lt;br /&gt;
def validare(date1):           # functia de validare a datelor de intrare&lt;br /&gt;
    numar_elemente, numar_intrebari = map(int, date1[0].split())&lt;br /&gt;
    if not (1 &amp;lt;= numar_elemente &amp;lt;= 200000) or not (1 &amp;lt;= numar_intrebari &amp;lt;= 200000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    sir = list(map(int, date1[1].split()))&lt;br /&gt;
    if len(sir) != numar_elemente or any(element &amp;gt; 5000000 for element in sir):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    intrebari = [list(map(int, date1[i].split())) for i in range(2, 2 + numar_intrebari)]&lt;br /&gt;
    if any(not (1 &amp;lt;= X &amp;lt;= Y &amp;lt;= numar_elemente) for X, Y in intrebari):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cost_secventa(date1):                     # functia de rezolvare&lt;br /&gt;
    numar_elemente, numar_intrebari = map(int, date1[0].split())&lt;br /&gt;
    sir = list(map(int, date1[1].split()))&lt;br /&gt;
    intrebari = [list(map(int, date1[i].split())) for i in range(2, 2 + numar_intrebari)]&lt;br /&gt;
    for X, Y in intrebari:&lt;br /&gt;
        cost = sum([sir[i] * max(len(sir[:i+1]), len(sir[i:])) for i in range(X-1, Y)])&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{cost}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;secvcostin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;secvcostout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        date = fisier_intrare.readlines()      # citirea numerelor se face ca sir de caractere&lt;br /&gt;
&lt;br /&gt;
        validare(date)                 # apelul functiei de validare&lt;br /&gt;
        cost_secventa(date)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2464_-_anagrame3&amp;diff=8854</id>
		<title>2464 - anagrame3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2464_-_anagrame3&amp;diff=8854"/>
		<updated>2024-01-03T14:58:02Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Se dau două șiruri &amp;#039;&amp;#039;&amp;#039;S1&amp;#039;&amp;#039;&amp;#039; si &amp;#039;&amp;#039;&amp;#039;S2&amp;#039;&amp;#039;&amp;#039; formate doar cu litere mici. Numim subșir de lungime &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; al unui șir a un șir &amp;#039;&amp;#039;&amp;#039;a&amp;#039; = ai1, ai2,…, aiK&amp;#039;&amp;#039;&amp;#039; astfel încât să avem: &amp;#039;&amp;#039;&amp;#039;i1&amp;#039;&amp;#039;&amp;#039;  == Cerința == Să se determine lungimea maximă a unui subșir din &amp;#039;&amp;#039;&amp;#039;S1&amp;#039;&amp;#039;&amp;#039;, format prin concatenarea unor anagrame ale șirului &amp;#039;&amp;#039;&amp;#039;S2&amp;#039;&amp;#039;&amp;#039;. Dintre toate subșirurile cu lungime maximă se va determina cel care este cel mai mic lexicografic. Un șir de lungime na se consideră mai mic lexi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dau două șiruri &#039;&#039;&#039;S1&#039;&#039;&#039; si &#039;&#039;&#039;S2&#039;&#039;&#039; formate doar cu litere mici. Numim subșir de lungime &#039;&#039;&#039;K&#039;&#039;&#039; al unui șir a un șir &#039;&#039;&#039;a&#039; = ai1, ai2,…, aiK&#039;&#039;&#039; astfel încât să avem: &#039;&#039;&#039;i1&#039;&#039;&#039; &lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine lungimea maximă a unui subșir din &#039;&#039;&#039;S1&#039;&#039;&#039;, format prin concatenarea unor anagrame ale șirului &#039;&#039;&#039;S2&#039;&#039;&#039;. Dintre toate subșirurile cu lungime maximă se va determina cel care este cel mai mic lexicografic. Un șir de lungime na se consideră mai mic lexicografic decât un șir de lungime nb dacă există un indice i, astfel încât &#039;&#039;&#039;a1=b1, a2=b1, …, ai-1=bi-1&#039;&#039;&#039; și &#039;&#039;&#039;ai&amp;lt;bi&#039;&#039;&#039;. Un șir &#039;&#039;&#039;a&#039;&#039;&#039; este anagrama unui șir &#039;&#039;&#039;b&#039;&#039;&#039; dacă sortându-le crescător pe fiecare se obțin două șiruri identice.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;anagrame3in.txt&#039;&#039;&#039; conține pe prima linie se află un număr natural &#039;&#039;&#039;P&#039;&#039;&#039;. Pe linia a doua se află șirul &#039;&#039;&#039;S1&#039;&#039;&#039;, iar pe a treia linie se află șirul &#039;&#039;&#039;S2&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul &#039;&#039;&#039;anagrame3out.txt&#039;&#039;&#039;, dacă &#039;&#039;&#039;P = 1&#039;&#039;&#039;, atunci pe prima linie se va scrie un număr natural reprezentând lungimea maximă a unui șir cu proprietatea cerută, iar dacă &#039;&#039;&#039;P = 2&#039;&#039;&#039;, atunci pe prima linie se va scrie subșirul de lungime maximă cu proprietatea cerută și minim lexicografic.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ Lungime(S2) ≤ Lungime(S1) ≤ 100 000&#039;&#039;&#039;&lt;br /&gt;
* Se garantează că cel puțin o anagramă a lui &#039;&#039;&#039;S2&#039;&#039;&#039; apare în &#039;&#039;&#039;S1&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; anagrame3in.txt&lt;br /&gt;
: 1&lt;br /&gt;
: abbaaabababbaabaabba&lt;br /&gt;
: aba&lt;br /&gt;
; anagrame3out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 15&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Deoarece a apare de &#039;&#039;&#039;11&#039;&#039;&#039; ori, &#039;&#039;&#039;S2&#039;&#039;&#039; poate să apară de cel mult &#039;&#039;&#039;5&#039;&#039;&#039; ori. Se observă subșirul format cu litere îngroșate și subliniate &#039;&#039;&#039;abbaaabababbaabaabba&#039;&#039;&#039; deci &#039;&#039;&#039;abaaabababaabaa&#039;&#039;&#039; este un subșir de lungime maximă, egală cu &#039;&#039;&#039;15&#039;&#039;&#039;, cu proprietatea cerută.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; anagrame3in.txt&lt;br /&gt;
: 2&lt;br /&gt;
: abbaaabababbaabaabba&lt;br /&gt;
: aba&lt;br /&gt;
: anagrame3.out&lt;br /&gt;
: Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
: abaaabaabaabaab&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se observă că subșirul verifică proprietatea cerută.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; anagrame3in.txt&lt;br /&gt;
: 2&lt;br /&gt;
: abbaaabababbaabaabba&lt;br /&gt;
: abababababababababab&lt;br /&gt;
; anagrame3.out&lt;br /&gt;
: Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2464 - anagrame3&lt;br /&gt;
from collections import Counter&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(sirul1, sirul2):  # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= len(sirul2) &amp;lt;= len(sirul1) &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gaseste_subsir(sirul1, sirul2, p1):  # functia de rezolvare&lt;br /&gt;
    count_sir2 = Counter(sirul2)&lt;br /&gt;
    subsiruri = []&lt;br /&gt;
    for i in range(len(sirul1) - len(sirul2) + 1):&lt;br /&gt;
        if Counter(sirul1[i:i + len(sirul2)]) == count_sir2:&lt;br /&gt;
            subsiruri.append(sirul1[i:i + len(sirul2)])&lt;br /&gt;
    subsiruri.sort()&lt;br /&gt;
    if p1 == 1:&lt;br /&gt;
        return len(subsiruri[-1])&lt;br /&gt;
    elif p1 == 2:&lt;br /&gt;
        return subsiruri[0]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;anagrame3in.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;anagrame3out.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        p = int(fisier_intrare.readline())&lt;br /&gt;
        sir1 = fisier_intrare.readline().strip()&lt;br /&gt;
        sir2 = fisier_intrare.readline().strip()&lt;br /&gt;
&lt;br /&gt;
        validare(sir1, sir2)  # apelul functiei de validare&lt;br /&gt;
        rezultat = gaseste_subsir(sir1, sir2, p)  # apelul functiei de rezolvare&lt;br /&gt;
        fisier_iesire.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1971_-_Plus&amp;diff=8848</id>
		<title>1971 - Plus</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1971_-_Plus&amp;diff=8848"/>
		<updated>2024-01-03T14:28:53Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Locuitorii planetei Aritmo au hotărât ca în celebrul an 2012 să le explice pământenilor metoda plus de adunare a numerelor naturale pe planeta lor. La fel ca și planetele, înainte de adunare, numerele se aliniază astfel încât să se obțină cât mai multe cifre egale pe aceleași poziții. Cifrele egale, astfel obținute, se elimină din cele două numere. Pentru a obține rezultatul final, se adună cele două numerele deplasate, obținute după eliminare, ca în...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Locuitorii planetei Aritmo au hotărât ca în celebrul an 2012 să le explice pământenilor metoda plus de adunare a numerelor naturale pe planeta lor. La fel ca și planetele, înainte de adunare, numerele se aliniază astfel încât să se obțină cât mai multe cifre egale pe aceleași poziții. Cifrele egale, astfel obținute, se elimină din cele două numere. Pentru a obține rezultatul final, se adună cele două numerele deplasate, obținute după eliminare, ca în exemplu.&lt;br /&gt;
&lt;br /&gt;
Exemplu: Numerele 18935 și 85352 se aliniază ca în figura de mai jos. După eliminare se obțin numerele 19 și 52 care se adună deplasate, pentru a obține rezultatul final. Așadar 18935 plus 85352=242.&lt;br /&gt;
&lt;br /&gt;
: 18935 plus    19 +&lt;br /&gt;
:  85352         52&lt;br /&gt;
:               ---&lt;br /&gt;
:               242&lt;br /&gt;
Dacă există mai multe posibilități de a alinia numerele astfel încât să se elimine același număr maxim de cifre, atunci numerele sunt aliniate astfel încât, după eliminare şi adunarea numerelor după metoda descrisă, să se obțină o valoare cât mai mare.&lt;br /&gt;
&lt;br /&gt;
Exemplu: &#039;&#039;&#039;22331 plus 3322 = 33331&#039;&#039;&#039; (există două moduri în care cele două numere pot fi aliniate astfel încât să se elimine un număr maxim de cifre, valoarea maximă obținându-se atunci când se elimină cele două cifre 2)&lt;br /&gt;
&lt;br /&gt;
: 22331      221 +       22331      331+&lt;br /&gt;
:   3322       22      3322       33&lt;br /&gt;
:            ----                 -----&lt;br /&gt;
:            2232                 33331&lt;br /&gt;
Dacă două numere a și b sunt identice sau nu au cifre comune atunci a plus b=0. Dacă se elimină toate cifrele unui număr atunci rezultatul este dat de cifrele rămase în celălalt număr. Exemple: &#039;&#039;&#039;23 plus 523=5, 562 plus 56=2&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Adunarea mai multor numere se face de la stânga la dreapta: se adună primele două numere conform metodei descrise mai sus, apoi rezultatul se adună cu al treilea, și așa mai departe.&lt;br /&gt;
&lt;br /&gt;
Într-o expresie în care se adună mai multe numere pot să apară paranteze rotunde. În evaluarea unei asemenea expresii, numită expresie parantezată, se efectuează mai întâi adunările din paranteze conform metodei descrise mai sus, parantezele fiind apoi înlocuite cu rezultatul adunărilor din paranteze.&lt;br /&gt;
&lt;br /&gt;
Se definește adâncimea A­­­­d(E) corespunzătoare unei expresii parantezate E astfel:&lt;br /&gt;
&lt;br /&gt;
* dacă expresia &#039;&#039;&#039;E&#039;&#039;&#039; nu conține paranteze, atunci adâncimea acesteia este &#039;&#039;&#039;0&#039;&#039;&#039;;&lt;br /&gt;
* dacă expresia &#039;&#039;&#039;E&#039;&#039;&#039; este de forma &#039;&#039;&#039;(F)&#039;&#039;&#039;, atunci &#039;&#039;&#039;A­­­­d(E)=1+A­­­­d(F)&#039;&#039;&#039;;&lt;br /&gt;
* dacă expresia &#039;&#039;&#039;E&#039;&#039;&#039; este de forma &#039;&#039;&#039;E1 plus E2…plus Ek&#039;&#039;&#039;, atunci &#039;&#039;&#039;A­­­­d(E)=max(A­­­­d(E1)&#039;&#039;&#039;, &#039;&#039;&#039;A­­­­d(E2),…, A­­­­d(Ek­­­))&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Pentru a-i ajuta pe pământenii care doresc să învețe acest nou mod de adunare, scrieți un program care citește o expresie parantezată și determină:&lt;br /&gt;
a) adâncimea expresiei date;&lt;br /&gt;
b) valoarea acestei expresii.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;plusin.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se află descrierea expresiei parantezate. Pe fiecare dintre aceste linii se află un număr natural sau una dintre valorile &#039;&#039;&#039;-1&#039;&#039;&#039; sau &#039;&#039;&#039;-2&#039;&#039;&#039;. Valoarea &#039;&#039;&#039;-1&#039;&#039;&#039; reprezintă o paranteză rotundă deschisă iar valoarea &#039;&#039;&#039;-2&#039;&#039;&#039; reprezintă o paranteză rotundă închisă.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;plusout.txt&#039;&#039;&#039; va conține:&lt;br /&gt;
a) pe prima linie numărul natural ce reprezintă adâncimea expresiei date;&lt;br /&gt;
b) pe a doua linie se va scrie numărul natural ce reprezintă rezultatul evaluării expresiei date, adunarea numerelor făcându-se conform metodei descrise.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1&amp;lt;n≤2000&#039;&#039;&#039;;&lt;br /&gt;
* fiecare dintre celelalte numere naturale din fișier are cel mult 9 cifre;&lt;br /&gt;
* în fiecare paranteză se află cel puțin un număr natural;&lt;br /&gt;
* dacă într-o paranteză se află un singur număr natural, atunci valoarea expresiei este egală cu valoarea numărului din paranteză;&lt;br /&gt;
* pentru rezolvarea corectă a cerinței a) se acordă 20% din punctaj, iar pentru rezolvarea corectă a ambelor cerinţe se acordă punctajul integral.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; plusin.txt&lt;br /&gt;
: 12&lt;br /&gt;
: -1&lt;br /&gt;
: 1343 &lt;br /&gt;
: -1&lt;br /&gt;
: 234 &lt;br /&gt;
: 4532 &lt;br /&gt;
: -2&lt;br /&gt;
: -2&lt;br /&gt;
: 14091&lt;br /&gt;
: -1&lt;br /&gt;
: 21&lt;br /&gt;
: 2&lt;br /&gt;
: -2&lt;br /&gt;
; plusout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 2&lt;br /&gt;
: 4639&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Expresia parantezată care trebuie evaluată este:&lt;br /&gt;
&#039;&#039;&#039;(1343 plus (234 plus 4532)) plus 14091 plus (21 plus 2)=&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;(1343 plus 45334)plus 14091 plus (21 plus 2) =&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;4543 plus 14091 plus (21 plus 2)=&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;4543 plus 14091 plus 1=&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;46391 plus 1=4639&#039;&#039;&#039;&lt;br /&gt;
Valoarea expresei este &#039;&#039;&#039;4639&#039;&#039;&#039;. Adâncimea expresiei este &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; plusin.txt&lt;br /&gt;
: 13&lt;br /&gt;
: -1&lt;br /&gt;
: 1343&lt;br /&gt;
: -1&lt;br /&gt;
: 234&lt;br /&gt;
: 4532&lt;br /&gt;
: -2&lt;br /&gt;
: -2&lt;br /&gt;
: 14091&lt;br /&gt;
: -1&lt;br /&gt;
: 21&lt;br /&gt;
: 2&lt;br /&gt;
: -2&lt;br /&gt;
: 1000000000&lt;br /&gt;
; plusout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1971 - Plus&lt;br /&gt;
def validare(op):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(op) &amp;gt; 2000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for operatie in op:&lt;br /&gt;
        if operatie != -1 and operatie != -2 and (operatie &amp;lt; 1 or operatie &amp;gt; 999999999):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def plus(op):                     # functia de rezolvare&lt;br /&gt;
    if len(op) == 0:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    stiva = []&lt;br /&gt;
    adancime = 0&lt;br /&gt;
    for operatie in op:&lt;br /&gt;
        if operatie == -1:&lt;br /&gt;
            stiva.append([])&lt;br /&gt;
            adancime = max(adancime, len(stiva))&lt;br /&gt;
        elif operatie == -2:&lt;br /&gt;
            if len(stiva[-1]) == 1:&lt;br /&gt;
                if len(stiva) &amp;gt; 1:&lt;br /&gt;
                    stiva[-2].append(stiva[-1][0])&lt;br /&gt;
                stiva.pop()&lt;br /&gt;
            else:&lt;br /&gt;
                numere = stiva.pop()&lt;br /&gt;
                while len(numere) &amp;gt; 1:&lt;br /&gt;
                    a = numere.pop()&lt;br /&gt;
                    b = numere.pop()&lt;br /&gt;
                    numere.append(a + b - int(str(a) + str(b)))&lt;br /&gt;
                if len(stiva) &amp;gt; 0:&lt;br /&gt;
                    stiva[-1].append(numere[0])&lt;br /&gt;
        else:&lt;br /&gt;
            stiva[-1].append(operatie)&lt;br /&gt;
    fisier_iesire.write(str(adancime) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    fisier_iesire.write(str(stiva[0][0]) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;plusin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;plusout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        N = int(fisier_intrare.readline())&lt;br /&gt;
        operatii = [int(linie) for linie in fisier_intrare.readlines()]&lt;br /&gt;
&lt;br /&gt;
        validare(operatii)                 # apelul functiei de validare&lt;br /&gt;
        plus(operatii)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4242_-_perle&amp;diff=8846</id>
		<title>4242 - perle</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4242_-_perle&amp;diff=8846"/>
		<updated>2024-01-03T14:14:09Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Graniţa nu se trece uşor. Asta pentru că Balaurul Arhirel (mare pasionat de informatică) nu lasă pe nimeni să treacă decât după ce răspunde la nişte întrebări. În acea ţară există trei tipuri de perle normale (le vom nota cu 1, 2 şi 3) şi trei tipuri de perle magice (le vom nota cu A, B şi C). Perlele magice sunt deosebite prin faptul că se pot transforma în alte perle (una sau mai multe, normale sau magice). Perla magică de tipul A se poate transforma...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Graniţa nu se trece uşor. Asta pentru că Balaurul Arhirel (mare pasionat de informatică) nu lasă pe nimeni să treacă decât după ce răspunde la nişte întrebări.&lt;br /&gt;
În acea ţară există trei tipuri de perle normale (le vom nota cu 1, 2 şi 3) şi trei tipuri de perle magice (le vom nota cu A, B şi C). Perlele magice sunt deosebite prin faptul că se pot transforma în alte perle (una sau mai multe, normale sau magice).&lt;br /&gt;
Perla magică de tipul A se poate transforma în orice perlă normală (una singură).&lt;br /&gt;
Perla magică de tipul B se poate transforma într-o perlă normală de tipul 2 şi una magică de tipul B, sau într-o perlă normală de tipul 1, una magică de tipul A, una normală de tipul 3, una magică de tipul A şi una magică de tipul C.&lt;br /&gt;
Perla magică de tipul C se poate transforma într-o perlă normală de tipul 2 sau într-o perlă normală de tipul 3, una magică de tipul B şi una magică de tipul C sau într-o perlă normală de tipul 1, una normală de tipul 2 şi una magică de tipul A.&lt;br /&gt;
Ca să rezumăm cele de mai sus putem scrie:&lt;br /&gt;
&#039;&#039;&#039;A -&amp;gt; 1  | 2     | 3&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;B -&amp;gt; 2B | 1A3AC&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;C -&amp;gt; 2  | 3BC   | 12A&#039;&#039;&#039;&lt;br /&gt;
Balaurul Arhirel ne lasă la început să ne alegem o perlă magică (una singură), iar apoi folosind numai transformările de mai sus trebuie să obţinem un anumit şir de perle normale. Când o perlă magică se transformă, perlele din stânga şi din dreapta ei rămân la fel (şi în aceeaşi ordine). De asemenea ordinea perlelor rezultate din transformare este chiar cea prezentată mai sus.&lt;br /&gt;
De exemplu, dacă balaurul ne cere să facem şirul de perle &#039;&#039;&#039;21132123&#039;&#039;&#039;, putem alege o perlă magică de tipul B şi următorul şir de transformări: B &#039;&#039;&#039;-&amp;gt; 2B -&amp;gt; 21A3AC -&amp;gt; 21A3A12A -&amp;gt; 21132123&#039;&#039;&#039;.&lt;br /&gt;
Întrucât Balaurul nu are prea multă răbdare, el nu ne cere decât să spunem dacă se poate sau nu obţine şirul respectiv de perle.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine pentru fiecare şir de intrare dacă se poate obţine prin transformările de mai sus sau nu (alegând orice primă perlă magică, la fiecare şir).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;perlein.txt&#039;&#039;&#039; are următoarea structură:&lt;br /&gt;
pe prima linie numărul &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de şiruri din fişierul de intrare&lt;br /&gt;
urmează &#039;&#039;&#039;N&#039;&#039;&#039; linii; a i-a linie dintre cele N descrie şirul i, printr-o succesiune de numere naturale despărţite de câte un spaţiu. Primul număr reprezintă lungimea şirului &#039;&#039;&#039;L[i]&#039;&#039;&#039;, iar următoarele &#039;&#039;&#039;L[i]&#039;&#039;&#039; numere sunt tipurile de perle normale, în ordine, de la stânga la dreapta.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;perleout.txt&#039;&#039;&#039; va conţine &#039;&#039;&#039;N&#039;&#039;&#039; linii. Pe linia i se va scrie un singur număr &#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;0&#039;&#039;&#039; (&#039;&#039;&#039;1&#039;&#039;&#039; dacă se poate obţine şirul respectiv – al i-lea – şi &#039;&#039;&#039;0&#039;&#039;&#039; dacă nu se poate).&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; N &amp;lt; 11&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; L[i] &amp;lt; 10001&#039;&#039;&#039;, pentru orice &#039;&#039;&#039;i&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; perlein.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 8 2 1 1 3 2 1 2 3&lt;br /&gt;
: 2 2 2&lt;br /&gt;
: 1 3&lt;br /&gt;
; perleout.txt&lt;br /&gt;
:  Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1&lt;br /&gt;
: 0&lt;br /&gt;
: 1&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; perlein.txt&lt;br /&gt;
: 4&lt;br /&gt;
: 8 2 1 1 3 2 1 2 3&lt;br /&gt;
: 2 2 2&lt;br /&gt;
: 1 3&lt;br /&gt;
: 12 1 2 3 4 5 6 7 8 9 10 11 12&lt;br /&gt;
; perleout.txt&lt;br /&gt;
:  Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 4242 - perle&lt;br /&gt;
def validare(op):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(op) &amp;gt; 11:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for operatie in op:&lt;br /&gt;
        if operatie[0] &amp;lt; 1 or operatie[0] &amp;gt; 10001:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def perle(op):                     # functia de rezolvare&lt;br /&gt;
    for sir in op:&lt;br /&gt;
        if len(sir) % 2 == 0 or sir[0] != 1:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;perlein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;perleout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        N = int(fisier_intrare.readline())&lt;br /&gt;
        operatii = [list(map(int, linie.split()))[1:] for linie in fisier_intrare.readlines()]&lt;br /&gt;
&lt;br /&gt;
        validare(operatii)                 # apelul functiei de validare&lt;br /&gt;
        perle(operatii)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1690_-_Undo&amp;diff=8844</id>
		<title>1690 - Undo</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1690_-_Undo&amp;diff=8844"/>
		<updated>2024-01-03T14:02:32Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == XORin este nemulțumit de problemele primite în prima zi de concurs de la Olimpiada Națională de Informatică și decide astfel să se implice în comisie. În scurt timp devine specialistul comisiei în generarea de teste formate din șiruri de numere. Din când în când el trebuie să adauge sau să șteargă elemente din șir. Câteodată el decide să readauge dintre elemente șterse anterior. Fie șirul de numere &amp;#039;&amp;#039;&amp;#039;a=(a[1], a[2], … ,a[N])&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
XORin este nemulțumit de problemele primite în prima zi de concurs de la Olimpiada Națională de Informatică și decide astfel să se implice în comisie. În scurt timp devine specialistul comisiei în generarea de teste formate din șiruri de numere. Din când în când el trebuie să adauge sau să șteargă elemente din șir. Câteodată el decide să readauge dintre elemente șterse anterior. Fie șirul de numere &#039;&#039;&#039;a=(a[1], a[2], … ,a[N])&#039;&#039;&#039; și &#039;&#039;&#039;N&#039;&#039;&#039; numărul de elemente din șir după fiecare operație.&lt;br /&gt;
Astfel el are de realizat următoarele operații pornind de la un șir vid:&lt;br /&gt;
* Inserează la sfârșitul șirului o valoare &#039;&#039;&#039;x&#039;&#039;&#039;;&lt;br /&gt;
* Șterge ultimele &#039;&#039;&#039;x&#039;&#039;&#039; elemente din șir;&lt;br /&gt;
* Readaugă la sfârșitul șirului primele &#039;&#039;&#039;x&#039;&#039;&#039; elemente șterse. Dacă, de exemplu, în operația anterioară de ștergere a unui număr &#039;&#039;&#039;y&#039;&#039;&#039; de elemente, am șters elementele &#039;&#039;&#039;a[N-y+1], a[N-y+2],…, a[N]&#039;&#039;&#039;, iar acum urmează o operație de readăugare a &#039;&#039;&#039;x&#039;&#039;&#039; elemente, vor fi adăugate în ordine elementele &#039;&#039;&#039;a[N-y+1], a[N-y+2],…, a[N-y+x]&#039;&#039;&#039; la sfârșitul șirului.&lt;br /&gt;
Din când în când XORin își pune următoarea întrebare: de câte ori există valoarea &#039;&#039;&#039;x&#039;&#039;&#039; în șir?&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;undoin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;M&#039;&#039;&#039; ce reprezintă numărul de operații.&lt;br /&gt;
Pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii se vor afla operațiile codificate astfel:&lt;br /&gt;
* &#039;&#039;&#039;1 x&#039;&#039;&#039; – se inserează elementul &#039;&#039;&#039;x&#039;&#039;&#039; la sfârșitul șirului&lt;br /&gt;
* &#039;&#039;&#039;2 y&#039;&#039;&#039; – se șterg ultimele &#039;&#039;&#039;y&#039;&#039;&#039; elemente adăugate în șir&lt;br /&gt;
* &#039;&#039;&#039;3 z&#039;&#039;&#039; – se adaugă înapoi la sfârșitul șirului primele &#039;&#039;&#039;z&#039;&#039;&#039; elemente șterse&lt;br /&gt;
* &#039;&#039;&#039;4 t&#039;&#039;&#039; – se afișează numărul de elemente cu valoarea &#039;&#039;&#039;t&#039;&#039;&#039; din șir&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Pe fiecare linie a fișierului &#039;&#039;&#039;undoout.txt&#039;&#039;&#039; se scriu răspunsurile la întrebările lui XORin, fiecare răspuns pe câte o linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* Toate numerele din fișierul de intrare sunt cuprinse între &#039;&#039;&#039;1&#039;&#039;&#039; și &#039;&#039;&#039;200000&#039;&#039;&#039;;&lt;br /&gt;
* Pentru 20% din teste se garantează &#039;&#039;&#039;M ≤ 1000&#039;&#039;&#039;, pentru alte 40% din teste, se garantează că numerele inserate vor fi distincte;&lt;br /&gt;
* Între o operație de ștergere și una de readăugare sau între două de readăugare nu se vor afla alte operații de inserare&lt;br /&gt;
* Numărul de elemente readăugate nu va fi mai mare decât numărul de elemente șterse la ultima operație.&lt;br /&gt;
* Între două operații de readăugare va exista cel puțin o operație de ștergere.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; undoin.txt&lt;br /&gt;
: 16&lt;br /&gt;
: 1 1&lt;br /&gt;
: 1 2&lt;br /&gt;
: 1 3&lt;br /&gt;
: 1 4&lt;br /&gt;
: 4 4&lt;br /&gt;
: 2 2&lt;br /&gt;
: 4 3&lt;br /&gt;
: 3 1&lt;br /&gt;
: 4 4&lt;br /&gt;
: 4 3&lt;br /&gt;
: 1 7&lt;br /&gt;
: 1 7&lt;br /&gt;
: 1 7&lt;br /&gt;
: 4 7&lt;br /&gt;
: 2 2&lt;br /&gt;
: 4 7&lt;br /&gt;
; undoout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse. &lt;br /&gt;
: 1&lt;br /&gt;
: 0&lt;br /&gt;
: 0&lt;br /&gt;
: 1&lt;br /&gt;
: 3&lt;br /&gt;
: 1&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Inițial șirul este vid.&lt;br /&gt;
După primele &#039;&#039;&#039;4&#039;&#039;&#039; operații de inserare șirul este &#039;&#039;&#039;1, 2, 3, 4&#039;&#039;&#039;.&lt;br /&gt;
Operația &#039;&#039;&#039;4 4&#039;&#039;&#039; va afișa &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
Operația &#039;&#039;&#039;2 2&#039;&#039;&#039; va șterge ultimele două elemente șirul devenind &#039;&#039;&#039;1, 2&#039;&#039;&#039;.&lt;br /&gt;
Din cauză că elementul &#039;&#039;&#039;3&#039;&#039;&#039; a fost șters, a șaptea operație va afișa &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
Operația &#039;&#039;&#039;3 1&#039;&#039;&#039; va readăuga la sfârșitul șirului elementul &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
În urma acestei operații șirul devine &#039;&#039;&#039;1, 2, 3&#039;&#039;&#039;.&lt;br /&gt;
Operația &#039;&#039;&#039;4 4&#039;&#039;&#039; va afișa &#039;&#039;&#039;0&#039;&#039;&#039;, iar operația &#039;&#039;&#039;4 3&#039;&#039;&#039; va afișa &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
ș.a.m.d.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; undoin.txt&lt;br /&gt;
: 17&lt;br /&gt;
: 1 1&lt;br /&gt;
: 1 2&lt;br /&gt;
: 1 3&lt;br /&gt;
: 1 4&lt;br /&gt;
: 4 4&lt;br /&gt;
: 2 2&lt;br /&gt;
: 4 3&lt;br /&gt;
: 3 1&lt;br /&gt;
: 4 4&lt;br /&gt;
: 4 3&lt;br /&gt;
: 1 7&lt;br /&gt;
: 1 7&lt;br /&gt;
: 1 7&lt;br /&gt;
: 4 7&lt;br /&gt;
: 2 2&lt;br /&gt;
: 4 7&lt;br /&gt;
: 1 200001&lt;br /&gt;
; undoout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1690 - Undo&lt;br /&gt;
def validare(op):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(op) &amp;gt; 200000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for operatie in op:&lt;br /&gt;
        if operatie[0] &amp;lt; 1 or operatie[0] &amp;gt; 4 or operatie[1] &amp;lt; 1 or operatie[1] &amp;gt; 200000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def undo(op):                     # functia de rezolvare&lt;br /&gt;
    sir = []&lt;br /&gt;
    sters = []&lt;br /&gt;
    for operatie in op:&lt;br /&gt;
        if operatie[0] == 1:&lt;br /&gt;
            sir.append(operatie[1])&lt;br /&gt;
        elif operatie[0] == 2:&lt;br /&gt;
            for _ in range(operatie[1]):&lt;br /&gt;
                sters.insert(0, sir.pop())&lt;br /&gt;
        elif operatie[0] == 3:&lt;br /&gt;
            for _ in range(operatie[1]):&lt;br /&gt;
                sir.append(sters.pop(0))&lt;br /&gt;
        elif operatie[0] == 4:&lt;br /&gt;
            fisier_iesire.write(str(sir.count(operatie[1])) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;undoin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;undoout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        M = int(fisier_intrare.readline())&lt;br /&gt;
        operatii = [list(map(int, linie.split())) for linie in fisier_intrare.readlines()]&lt;br /&gt;
&lt;br /&gt;
        validare(operatii)                 # apelul functiei de validare&lt;br /&gt;
        undo(operatii)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3437_-_Datorii_1&amp;diff=8842</id>
		<title>3437 - Datorii 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3437_-_Datorii_1&amp;diff=8842"/>
		<updated>2024-01-03T13:37:07Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Într-o țară îndepărtată, economia este în criză. Cea mai mare problemă este lipsa de capital care creează blocaje financiare. De exemplu, o firmă &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; poate avea datorii către o firmă &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; pe care nu le poate plăti, deoarece o altă firmă &amp;#039;&amp;#039;&amp;#039;Z&amp;#039;&amp;#039;&amp;#039; are datorii către firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; pe care nu le-a plătit, ş.a.m.d. Există o listă cu toate datoriile firmelor sub forma următoare: &amp;#039;&amp;#039;&amp;#039;X &amp;gt; Y S&amp;#039;&amp;#039;&amp;#039; cu semnificaţia “firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039; datorează firmei &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; suma...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Într-o țară îndepărtată, economia este în criză. Cea mai mare problemă este lipsa de capital care creează blocaje financiare. De exemplu, o firmă &#039;&#039;&#039;X&#039;&#039;&#039; poate avea datorii către o firmă &#039;&#039;&#039;Y&#039;&#039;&#039; pe care nu le poate plăti, deoarece o altă firmă &#039;&#039;&#039;Z&#039;&#039;&#039; are datorii către firma &#039;&#039;&#039;X&#039;&#039;&#039; pe care nu le-a plătit, ş.a.m.d.&lt;br /&gt;
Există o listă cu toate datoriile firmelor sub forma următoare:&lt;br /&gt;
&#039;&#039;&#039;X &amp;gt; Y S&#039;&#039;&#039;&lt;br /&gt;
cu semnificaţia “firma &#039;&#039;&#039;X&#039;&#039; datorează firmei &#039;&#039;&#039;Y&#039;&#039;&#039; suma &#039;&#039;&#039;S&#039;&#039;&#039;”. Este posibil ca &#039;&#039;&#039;X&#039;&#039;&#039; să aibă mai multe datorii la firma &#039;&#039;&#039;Y&#039;&#039;&#039; (în funcţie de contractele derulate împreună) sau chiar ca &#039;&#039;&#039;X&#039;&#039;&#039; să aibă datorii la &#039;&#039;&#039;Y&#039;&#039;&#039; și &#039;&#039;&#039;Y&#039;&#039;&#039; să aibă datorii la &#039;&#039;&#039;X&#039;&#039;&#039;.&lt;br /&gt;
== Cerințe ==&lt;br /&gt;
Cunoscând lista cu datoriile firmelor, scrieți un program care să rezolve următoarele cerințe:&lt;br /&gt;
1. determină numărul de firme distincte care apar în această listă;&lt;br /&gt;
2. realizează o situație financiară a firmelor distincte din această listă, scrise în ordine lexicografică; pentru fiecare firmă se vor determina două valori &#039;&#039;&#039;SD SP&#039;&#039;&#039;, unde &#039;&#039;&#039;SD&#039;&#039;&#039; reprezintă suma totală a datoriilor pe care firma le are către alte firme, iar &#039;&#039;&#039;SP&#039;&#039;&#039; este totalul sumelor pe care firma trebuie să le primească de la alte firme.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;datorii1in.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;C&#039;&#039;&#039; reprezentând cerința care&lt;br /&gt;
trebuie să fie rezolvată (&#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;2&#039;&#039;&#039;). Pe a doua linie se află un număr natural &#039;&#039;&#039;D&#039;&#039;&#039; care reprezintă numărul de înregistrări existente în lista datoriilor firmelor. Pe următoarele &#039;&#039;&#039;D&#039;&#039;&#039; linii sunt descrise datoriile firmelor, în forma specificată în enunț, câte o datorie pe o linie.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;datoriiout.txt&#039;&#039;&#039; va conține răspunsul la cerinţa &#039;&#039;&#039;C&#039;&#039;&#039; specificată în fișierul de intrare. Dacă &#039;&#039;&#039;C=1&#039;&#039;&#039; fișierul va conține un număr natural, reprezentând numărul de firme distincte care apar în lista menționată. Dacă &#039;&#039;&#039;C=2&#039;&#039;&#039; fișierul va conține pentru fiecare dintre firmele distincte din lista menționată câte un singur triplet de forma &#039;&#039;&#039;X SD SP&#039;&#039;&#039;, unde &#039;&#039;&#039;X&#039;&#039;&#039; este numele firmei, iar &#039;&#039;&#039;SD&#039;&#039;&#039; și &#039;&#039;&#039;SP&#039;&#039;&#039; au semnificația din enunț pentru firma &#039;&#039;&#039;X&#039;&#039;&#039;; tripletele vor fi scrise astfel încât numele firmelor să apară în ordine lexicografică, fiecare triplet pe câte o linie a fișierului, iar &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;SD&#039;&#039;&#039; și &#039;&#039;&#039;SP&#039;&#039;&#039; vor fi separate prin câte un singur spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* Există în total cel mult &#039;&#039;&#039;6000&#039;&#039;&#039; de firme distincte în lista menționată de datorii.&lt;br /&gt;
* Numele unei firme este format din maximum &#039;&#039;&#039;20&#039;&#039;&#039; de caractere (litere mari şi mici ale alfabetului englez, cifre, spaţii); se face distincţie între literele mari şi literele mici în numele firmelor; nu există alte restricţii referitoare la numele firmelor.&lt;br /&gt;
* Două firme distincte au nume distincte. O firmă nu poate avea datorii la ea însăși.&lt;br /&gt;
* În descrierea unei datorii &#039;&#039;&#039;(X &amp;gt; Y S)&#039;&#039;&#039; există un singur spaţiu între &#039;&#039;&#039;X&#039;&#039;&#039; și &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039;, un singur spațiu între &#039;&#039;&#039;&amp;gt;&#039;&#039;&#039; și &#039;&#039;&#039;Y&#039;&#039;&#039;, respectiv un singur spațiu între &#039;&#039;&#039;Y&#039;&#039;&#039; și &#039;&#039;&#039;S&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ D ≤ 80000&#039;&#039;&#039;&lt;br /&gt;
* Sumele datorate de firme sunt numere naturale nenule ≤106.&lt;br /&gt;
* Dacă &#039;&#039;&#039;X&#039;&#039;&#039; și &#039;&#039;&#039;Y&#039;&#039;&#039; sunt numele a două firme distincte, iar &#039;&#039;&#039;k (k≥0)&#039;&#039;&#039; este valoarea maximă cu proprietatea că secvența formată din primele &#039;&#039;&#039;k&#039;&#039;&#039; caractere din &#039;&#039;&#039;X&#039;&#039;&#039; este identică cu secvența formată din primele caractere din &#039;&#039;&#039;Y&#039;&#039;&#039;, spunem că &#039;&#039;&#039;X&#039;&#039;&#039; precedă din punct de vedere lexicografic pe &#039;&#039;&#039;Y&#039;&#039;&#039; dacă &#039;&#039;&#039;X&#039;&#039;&#039; are doar &#039;&#039;&#039;k&#039;&#039;&#039; caractere sau dacă al k+1-lea caracter din &#039;&#039;&#039;X&#039;&#039;&#039; este mai mic decât al k+1-lea caracter din &#039;&#039;&#039;Y&#039;&#039;&#039;.&lt;br /&gt;
* Pentru teste valorând &#039;&#039;&#039;30&#039;&#039;&#039; de puncte cerinţa este &#039;&#039;&#039;1&#039;&#039;&#039;. Pentru teste valorând &#039;&#039;&#039;60&#039;&#039;&#039; de puncte cerinţa este &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
* Pentru teste valorând &#039;&#039;&#039;40&#039;&#039;&#039; de puncte D≤1000. Pentru teste valorând &#039;&#039;&#039;45&#039;&#039;&#039; de puncte numele firmelor nu&lt;br /&gt;
conțin spaţii.&lt;br /&gt;
* În concurs s-au acordat &#039;&#039;&#039;10&#039;&#039;&#039; puncte din oficiu. Pe site se acordă &#039;&#039;&#039;10&#039;&#039;&#039; puncte pentru exemple.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; datoriiin.txt&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Vasile Inc &amp;gt; Anatolia 100&lt;br /&gt;
: ana &amp;gt; Anatolia 10&lt;br /&gt;
: ana &amp;gt; Vasilescu Inc 5&lt;br /&gt;
: Popa25 PF &amp;gt; Anatolia 30&lt;br /&gt;
; datoriiout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 5&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; datoriiin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 5&lt;br /&gt;
: Vasile Inc &amp;gt; Anatolia 100&lt;br /&gt;
: ana &amp;gt; Anatolia 10&lt;br /&gt;
: ana &amp;gt; Vasilescu Inc 5&lt;br /&gt;
: Popa25 PF &amp;gt; Anatolia 30&lt;br /&gt;
: Popa25 PF &amp;gt; ana 50&lt;br /&gt;
; datoriiout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: Anatolia 0 140&lt;br /&gt;
: Popa25 PF 80 0&lt;br /&gt;
: Vasile Inc 100 0&lt;br /&gt;
: Vasilescu Inc 0 5&lt;br /&gt;
: ana 15 50&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; datoriiin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 6&lt;br /&gt;
: Vasile Inc &amp;gt; Anatolia 100&lt;br /&gt;
: ana &amp;gt; Anatolia 10&lt;br /&gt;
: ana &amp;gt; Vasilescu Inc 5&lt;br /&gt;
: Popa25 PF &amp;gt; Anatolia 30&lt;br /&gt;
: Popa25 PF &amp;gt; ana 50&lt;br /&gt;
: Vasile Inc &amp;gt; Vasile Inc 20&lt;br /&gt;
; datoriiout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3437 - Datorii 1&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(datorii_val1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(datorii_val1) &amp;gt; 6000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for X_val1, Y_val1, S_val1 in datorii_val1:&lt;br /&gt;
        if len(X_val1) &amp;gt; 20 or len(Y_val1) &amp;gt; 20 or S_val1 &amp;lt;= 0 or S_val1 &amp;gt; 10**6:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(datorii_val1):                     # functia de rezolvare&lt;br /&gt;
    firme = defaultdict(lambda: [0, 0])  # dictionar cu valori default [0, 0]&lt;br /&gt;
    for X_val1, Y_val1, S_val1 in datorii_val1:&lt;br /&gt;
        firme[X_val1][0] += S_val1  # adaugam la suma datoriilor firmei X&lt;br /&gt;
        firme[Y_val1][1] += S_val1  # adaugam la suma pe care firma Y trebuie sa o primeasca&lt;br /&gt;
&lt;br /&gt;
    for firma in sorted(firme.keys()):  # sortam firmele lexicografic&lt;br /&gt;
        file_out.write(f&amp;quot;{firma} {firme[firma][0]} {firme[firma][1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;datoriiin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;datoriiout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        C = int(file_in.readline())      # citirea cerintei&lt;br /&gt;
        D = int(file_in.readline())      # citirea numarului de datorii&lt;br /&gt;
        datorii_val = []&lt;br /&gt;
        for _ in range(D):&lt;br /&gt;
            X_val, _, Y_val, S_val = file_in.readline().split()&lt;br /&gt;
            S_val = int(S_val)&lt;br /&gt;
            datorii_val.append((X_val, Y_val, S_val))&lt;br /&gt;
&lt;br /&gt;
        validare(datorii_val)                 # apelul functiei de validare&lt;br /&gt;
        if C == 2:&lt;br /&gt;
            rezolvare(datorii_val)             # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1323_-_Matrice_Rara&amp;diff=8840</id>
		<title>1323 - Matrice Rara</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1323_-_Matrice_Rara&amp;diff=8840"/>
		<updated>2024-01-03T13:04:47Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Se citesc două matrice rare și se cere să se calculeze suma lor. O matrice &amp;#039;&amp;#039;&amp;#039;A(n,m)&amp;#039;&amp;#039;&amp;#039; se numește rară dacă majoritatea elementelor sale sunt egale cu zero (cel puţin jumătate). Datorită numărului mic de numere nenule, o matrice rară &amp;#039;&amp;#039;&amp;#039;A(n,m)&amp;#039;&amp;#039;&amp;#039;, având &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; elemente nenule, poate fi memorată folosind un șir &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; conţinând &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; triplete de forma &amp;#039;&amp;#039;&amp;#039;(linie, coloană , valoare)&amp;#039;&amp;#039;&amp;#039;, corespunzătoare valorilor nenule ale matricei. Elemente...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se citesc două matrice rare și se cere să se calculeze suma lor.&lt;br /&gt;
O matrice &#039;&#039;&#039;A(n,m)&#039;&#039;&#039; se numește rară dacă majoritatea elementelor sale sunt egale cu zero (cel puţin jumătate). Datorită numărului mic de numere nenule, o matrice rară &#039;&#039;&#039;A(n,m)&#039;&#039;&#039;, având &#039;&#039;&#039;k&#039;&#039;&#039; elemente nenule, poate fi memorată folosind un șir &#039;&#039;&#039;X&#039;&#039;&#039; conţinând &#039;&#039;&#039;k&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;(linie, coloană , valoare)&#039;&#039;&#039;, corespunzătoare valorilor nenule ale matricei. Elementele șirului &#039;&#039;&#039;X&#039;&#039;&#039; se memorează în ordine lexicografică după &#039;&#039;&#039;(linie,coloana)&#039;&#039;&#039;.&lt;br /&gt;
De exemplu matricea cu &#039;&#039;&#039;n = m = 3&#039;&#039;&#039;&lt;br /&gt;
: 1 0 2&lt;br /&gt;
: 0 0 5&lt;br /&gt;
: 0 2 0&lt;br /&gt;
se va memora sub forma sirului &#039;&#039;&#039;X&#039;&#039;&#039; continand &#039;&#039;&#039;4&#039;&#039;&#039; triplete : &#039;&#039;&#039;{(1,1,1) , (1,3,2) , (2,3,5) , (3,2,2)}&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;matrice_rarain.txt&#039;&#039;&#039; conține pe prima linie , dimensiunile celor două matrice &#039;&#039;&#039;n m&#039;&#039;&#039; – reprezentând numărul de linii şi coloane, şi &#039;&#039;&#039;N1 N2&#039;&#039;&#039;, numărul de elemente nenule ale matricei &#039;&#039;&#039;A&#039;&#039;&#039;, respectiv matricei &#039;&#039;&#039;B&#039;&#039;&#039;. Apoi următoarele &#039;&#039;&#039;N1&#039;&#039;&#039; linii vor conține triplete – elementele nenule ale matricei A în ordine lexicografică, iar ultimele N2 linii vor conține triplete reprezentând elementele nenule ale matricei &#039;&#039;&#039;B&#039;&#039;&#039;, tot în ordine lexicografică .&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;matrice_raraout.txt&#039;&#039;&#039; va conține pe prima linie numărul de elemente diferite de &#039;&#039;&#039;0&#039;&#039;&#039; din matricea sumă &#039;&#039;&#039;C&#039;&#039;&#039; şi apoi matricea în sine sub forma tripletelor în ordine lexicografică, câte unul pe o linie .&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n , m ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ N1 , N2 ≤ 300.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;-1.000.000.000 ≤ A[i][j], B[i][j] ≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; matrice_rarain.txt&lt;br /&gt;
: 5 6 3 3&lt;br /&gt;
: 1 1 2&lt;br /&gt;
: 3 4 3&lt;br /&gt;
: 4 6 1&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 3 4 -2&lt;br /&gt;
: 4 6 2&lt;br /&gt;
; matrice_raraout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4&lt;br /&gt;
: 1 1 2&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 3 4 1&lt;br /&gt;
: 4 6 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; matrice_rarain.txt&lt;br /&gt;
: 1000001 6 3 3&lt;br /&gt;
: 1 1 2&lt;br /&gt;
: 3 4 3&lt;br /&gt;
: 4 6 1&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 3 4 -2&lt;br /&gt;
: 4 6 2&lt;br /&gt;
; matrice_raraout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1323 - Matrice Rara&lt;br /&gt;
def validare(matrice_a1, matrice_b1):           # functia de validare a datelor de intrare&lt;br /&gt;
    for matrice in [matrice_a1, matrice_b1]:&lt;br /&gt;
        if len(matrice) &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
        for element in matrice:&lt;br /&gt;
            if element[2] &amp;lt; -1000000000 or element[2] &amp;gt; 1000000000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_matrici(matrice_a1, matrice_b1):                     # functia de rezolvare&lt;br /&gt;
    suma = {}&lt;br /&gt;
    for element in matrice_a1 + matrice_b1:&lt;br /&gt;
        if (element[0], element[1]) not in suma:&lt;br /&gt;
            suma[(element[0], element[1])] = 0&lt;br /&gt;
        suma[(element[0], element[1])] += element[2]&lt;br /&gt;
&lt;br /&gt;
    matrice_suma1 = [(k[0], k[1], v) for k, v in suma.items() if v != 0]&lt;br /&gt;
    matrice_suma1.sort()&lt;br /&gt;
&lt;br /&gt;
    return matrice_suma1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;matrice_rarain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;matrice_raraout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, m, N1, N2 = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        matrice_a = [list(map(int, fisier_intrare.readline().split())) for _ in range(N1)]&lt;br /&gt;
        matrice_b = [list(map(int, fisier_intrare.readline().split())) for _ in range(N2)]&lt;br /&gt;
&lt;br /&gt;
        validare(matrice_a, matrice_b)                 # apelul functiei de validare&lt;br /&gt;
&lt;br /&gt;
        matrice_suma = suma_matrici(matrice_a, matrice_b)               # apelul functiei de rezolvare&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{len(matrice_suma)}\n&amp;quot;)&lt;br /&gt;
        for elem in matrice_suma:&lt;br /&gt;
            fisier_iesire.write(f&amp;quot;{elem[0]} {elem[1]} {elem[2]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3856_-_Scytale&amp;diff=8834</id>
		<title>3856 - Scytale</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3856_-_Scytale&amp;diff=8834"/>
		<updated>2024-01-03T12:31:40Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Scytale == Cifrul &amp;#039;&amp;#039;&amp;#039;Scytale&amp;#039;&amp;#039;&amp;#039; functioneaza asa: se da un mesaj cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; litere si un numar &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;; mesajul trebuie asezat intr-o matrice cu &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; linii si n coloane; pentru mesajul &amp;#039;&amp;#039;&amp;#039;WEAREDISCOVEREDFLEEATONCE&amp;#039;&amp;#039;&amp;#039; cu &amp;#039;&amp;#039;&amp;#039;25&amp;#039;&amp;#039;&amp;#039; de litere si numarul &amp;#039;&amp;#039;&amp;#039;m=3&amp;#039;&amp;#039;&amp;#039;, mesajul va fi pozitionat in matrice asa:  &amp;#039;&amp;#039;&amp;#039;W . . E . . A . . R . . E . . D . . I . . S . . C&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;. O . . V . . E . . R . . E . . D . . F . . L . .&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;. . E . . E . . A . . T . . O . . N . . C . . E .&amp;#039;&amp;#039;&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Scytale ==&lt;br /&gt;
Cifrul &#039;&#039;&#039;Scytale&#039;&#039;&#039; functioneaza asa:&lt;br /&gt;
se da un mesaj cu &#039;&#039;&#039;n&#039;&#039;&#039; litere si un numar &#039;&#039;&#039;m&#039;&#039;&#039;;&lt;br /&gt;
mesajul trebuie asezat intr-o matrice cu &#039;&#039;&#039;m&#039;&#039;&#039; linii si n coloane;&lt;br /&gt;
pentru mesajul &#039;&#039;&#039;WEAREDISCOVEREDFLEEATONCE&#039;&#039;&#039; cu &#039;&#039;&#039;25&#039;&#039;&#039; de litere si numarul &#039;&#039;&#039;m=3&#039;&#039;&#039;, mesajul va fi pozitionat in matrice asa:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;W . . E . . A . . R . . E . . D . . I . . S . . C&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;. O . . V . . E . . R . . E . . D . . F . . L . .&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;. . E . . E . . A . . T . . O . . N . . C . . E .&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Dandu-se un numar c, mesajul si numarul m:&lt;br /&gt;
* pentru &#039;&#039;&#039;c=1&#039;&#039;&#039;, sa se afiseze mesajul criptat&lt;br /&gt;
* pentru &#039;&#039;&#039;c=2&#039;&#039;&#039;, sa se afiseze mesajul decriptat&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;scytalein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;c&#039;&#039;&#039;, mesajul si numarul &#039;&#039;&#039;m&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;scytaleout.txt&#039;&#039;&#039; va conține pe prima linie mesajul criptat sau decriptat, in functie de &#039;&#039;&#039;c&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n*m ≤ 1000000&#039;&#039;&#039;&lt;br /&gt;
* mesajul va contine numai litere mari&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; scytalein.txt&lt;br /&gt;
: 1 WEAREDISCOVEREDFLEEATONCE 3&lt;br /&gt;
; scytaleout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: WOEEVEAEARRTEEODDNIFCSLEC&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; scytalein.txt&lt;br /&gt;
: 2 WOEEVEAEARRTEEODDNIFCSLEC 3&lt;br /&gt;
; scytaleout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: WEAREDISCOVEREDFLEEATONCE&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; scytalein.txt&lt;br /&gt;
: 2 WOEEVEAEARRTEEODDNIFCSLEC 300000&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3856 - Scytale&lt;br /&gt;
def validare(mesaj_validare, m_validare):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(mesaj_validare) * m_validare &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def criptare(mesaj_criptare, m_criptare):                     # functia de criptare&lt;br /&gt;
    criptat = &amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(m_criptare):&lt;br /&gt;
        for j in range(i, len(mesaj_criptare), m_criptare):&lt;br /&gt;
            criptat += mesaj_criptare[j]&lt;br /&gt;
    return criptat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decriptare(mesaj_decriptare, m_decriptare):                     # functia de decriptare&lt;br /&gt;
    n = len(mesaj_decriptare) // m_decriptare&lt;br /&gt;
    decriptat = &amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i, len(mesaj_decriptare), n):&lt;br /&gt;
            decriptat += mesaj_decriptare[j]&lt;br /&gt;
    return decriptat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;scytalein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;scytaleout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        cerinta = int(fisier_intrare.readline())&lt;br /&gt;
        mesaj = fisier_intrare.readline().strip()&lt;br /&gt;
        m = int(fisier_intrare.readline())&lt;br /&gt;
&lt;br /&gt;
        validare(mesaj, m)                 # apelul functiei de validare&lt;br /&gt;
        if cerinta == 1:&lt;br /&gt;
            fisier_iesire.write(criptare(mesaj, m))               # apelul functiei de criptare&lt;br /&gt;
        elif cerinta == 2:&lt;br /&gt;
            fisier_iesire.write(decriptare(mesaj, m))               # apelul functiei de decriptare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3808_-_ADFGVX&amp;diff=8832</id>
		<title>3808 - ADFGVX</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3808_-_ADFGVX&amp;diff=8832"/>
		<updated>2024-01-03T12:15:15Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == ADFGVX == Cifrul ADFGVX este un cifru ce folosește o matrice &amp;#039;&amp;#039;&amp;#039;6x6&amp;#039;&amp;#039;&amp;#039; care conţine literele alfabetului englez si cifre. Cifrul functioneaza asa: se citeste matricea, un mesajul si o cheie. In matrice, linia &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; si coloana &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; au codul &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;, linia &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; si coloana &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; au codul &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039;, linia &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; si coloana &amp;#039;&amp;#039;&amp;#039;3&amp;#039;&amp;#039;&amp;#039; au codul &amp;#039;&amp;#039;&amp;#039;F&amp;#039;&amp;#039;&amp;#039;, linia &amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039; si coloana &amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039; au codul &amp;#039;&amp;#039;&amp;#039;G&amp;#039;&amp;#039;&amp;#039;, linia &amp;#039;&amp;#039;&amp;#039;5&amp;#039;&amp;#039;&amp;#039; si coloana &amp;#039;&amp;#039;&amp;#039;5&amp;#039;&amp;#039;&amp;#039; au codul &amp;#039;&amp;#039;&amp;#039;V&amp;#039;&amp;#039;&amp;#039;, iar linia &amp;#039;&amp;#039;&amp;#039;6&amp;#039;&amp;#039;&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== ADFGVX ==&lt;br /&gt;
Cifrul ADFGVX este un cifru ce folosește o matrice &#039;&#039;&#039;6x6&#039;&#039;&#039; care conţine literele alfabetului englez si cifre. Cifrul functioneaza asa:&lt;br /&gt;
se citeste matricea, un mesajul si o cheie.&lt;br /&gt;
In matrice, linia &#039;&#039;&#039;1&#039;&#039;&#039; si coloana &#039;&#039;&#039;1&#039;&#039;&#039; au codul &#039;&#039;&#039;A&#039;&#039;&#039;, linia &#039;&#039;&#039;2&#039;&#039;&#039; si coloana &#039;&#039;&#039;2&#039;&#039;&#039; au codul &#039;&#039;&#039;D&#039;&#039;&#039;, linia &#039;&#039;&#039;3&#039;&#039;&#039; si coloana &#039;&#039;&#039;3&#039;&#039;&#039; au codul &#039;&#039;&#039;F&#039;&#039;&#039;, linia &#039;&#039;&#039;4&#039;&#039;&#039; si coloana &#039;&#039;&#039;4&#039;&#039;&#039; au codul &#039;&#039;&#039;G&#039;&#039;&#039;, linia &#039;&#039;&#039;5&#039;&#039;&#039; si coloana &#039;&#039;&#039;5&#039;&#039;&#039; au codul &#039;&#039;&#039;V&#039;&#039;&#039;, iar linia &#039;&#039;&#039;6&#039;&#039;&#039; si coloana &#039;&#039;&#039;6&#039;&#039;&#039; au codul &#039;&#039;&#039;X&#039;&#039;&#039;.&lt;br /&gt;
Fiecare litera din mesaj este inlocuita cu un codul liniei si coloanei pe care se afla in matrice.&lt;br /&gt;
literele codurilor obtinute sunt puse intr-o matrice care are atatea coloane cate caractere are cheia(ultima linie a noii matrici poate fi incompleta).&lt;br /&gt;
coloanele noii matrici au codul literei din cheie de pe pozitia egala cu numarul de ordine al coloanei.&lt;br /&gt;
coloanele sunt sortate in functie de ordinea alfabetica al literei pe care o au asociata.&lt;br /&gt;
In final se afiseaza matricea noua parcursa pe coloane (pentru a fi mai clar, literele se afiseaza fara spatii intre ele, iar cand se trece pe o noua coloana, se va pune un spatiu).&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Vi se ofera un numar &#039;&#039;&#039;c&#039;&#039;&#039; si matricea pentru criptare.Pentru &#039;&#039;&#039;c=1&#039;&#039;&#039;, vi se ofera un mesaj si o cheie si trebuie sa criptati mesajul. Pentru &#039;&#039;&#039;c=2&#039;&#039;&#039;, vi se ofera mesajul criptat si o cheie si trebuie sa decriptati mesajul.h1.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;adfgvxin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;c&#039;&#039;&#039;, iar pe urmatoarele linii matricea, mesajul si cheia.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;adfgvxout.txt&#039;&#039;&#039; va conține pe prima linie mesajul criptat sau decriptat, in functie de &#039;&#039;&#039;c&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ lungimea mesajului necriptat ≤ 1000000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1≤c≤2&#039;&#039;&#039;&lt;br /&gt;
* cheia va avea numai litere distincte h1.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; adfgvxin.txt&lt;br /&gt;
: 1&lt;br /&gt;
: NA1C3H&lt;br /&gt;
: 8TB2OM&lt;br /&gt;
: E5WRPD&lt;br /&gt;
: 4F6G7I&lt;br /&gt;
: 9J0KLQ&lt;br /&gt;
: SUVXYZ&lt;br /&gt;
: ATTACKAT1200AM PRIVACY&lt;br /&gt;
; adfgvx.out&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: DGDD DAGD DGAF ADDF DADV DVFA ADVX&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; adfgvxin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: NA1C3H&lt;br /&gt;
: 8TB2OM&lt;br /&gt;
: E5WRPD&lt;br /&gt;
: 4F6G7I&lt;br /&gt;
: 9J0KLQ&lt;br /&gt;
: SUVXYZ&lt;br /&gt;
: DGDD DAGD DGAF ADDF DADV DVFA ADVX PRIVACY&lt;br /&gt;
; adfgvx.out&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: ATTACKAT1200AM&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
codul literelor va fi: AD,DD,DD,AD,AG,VG,AD,DD,AF,DG,VF,VF,AD,DX.&lt;br /&gt;
Matricea noua va arata astfel:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;P R I V A C Y&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
A D D D D D A&lt;br /&gt;
&lt;br /&gt;
D A G V G A D&lt;br /&gt;
&lt;br /&gt;
D D A F D G V&lt;br /&gt;
&lt;br /&gt;
F V F A D D X&lt;br /&gt;
&lt;br /&gt;
Dupa ce sortam coloanele, matricea va arata astfel:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;A C I P R V Y&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
D D D A D D A&lt;br /&gt;
&lt;br /&gt;
G A G D A V D&lt;br /&gt;
&lt;br /&gt;
D G A D D F V&lt;br /&gt;
&lt;br /&gt;
D D F F V A X&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; adfgvxin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: NA1C3H&lt;br /&gt;
: 8TB2OM&lt;br /&gt;
: E5WRPD&lt;br /&gt;
: 4F6G7I&lt;br /&gt;
: 9J0KLQ&lt;br /&gt;
: PRIVACY&lt;br /&gt;
: DGDD DAGD DGAF ADDF DADV DVFA ADVX&lt;br /&gt;
; adfgvx.out&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3808 - ADFGVX&lt;br /&gt;
def validare(matrice_validare, mesaj_validare):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(mesaj_validare) &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for linie in matrice_validare:&lt;br /&gt;
        if len(linie) != 6:    # fiecare linie trebuie sa aiba 6 caractere&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def codificare(matrice_codificare, mesaj_codificare):                     # functia de rezolvare&lt;br /&gt;
    codificat = &amp;quot;&amp;quot;&lt;br /&gt;
    for litera in mesaj_codificare:&lt;br /&gt;
        for i in range(6):&lt;br /&gt;
            for j in range(6):&lt;br /&gt;
                if matrice_codificare[i][j] == litera:&lt;br /&gt;
                    codificat += &amp;quot;ADFGVX&amp;quot;[i] + &amp;quot;ADFGVX&amp;quot;[j]&lt;br /&gt;
    return codificat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;adfgvxin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;adfgvxout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        cerinta = int(fisier_intrare.readline())&lt;br /&gt;
        matrice = [list(fisier_intrare.readline().strip()) for _ in range(6)]&lt;br /&gt;
        cheie = fisier_intrare.readline().strip()&lt;br /&gt;
        mesaj = fisier_intrare.readline().strip()&lt;br /&gt;
&lt;br /&gt;
        validare(matrice, mesaj)                 # apelul functiei de validare&lt;br /&gt;
        if cerinta == 1:&lt;br /&gt;
            fisier_iesire.write(codificare(matrice, mesaj))               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3616_-_Adfgx&amp;diff=8831</id>
		<title>3616 - Adfgx</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3616_-_Adfgx&amp;diff=8831"/>
		<updated>2024-01-03T11:55:07Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Cifrul &amp;#039;&amp;#039;&amp;#039;ADFGX&amp;#039;&amp;#039;&amp;#039; este un cifru care folosește o matrice pătratică &amp;#039;&amp;#039;&amp;#039;5x5&amp;#039;&amp;#039;&amp;#039; și o &amp;#039;&amp;#039;&amp;#039;cheie&amp;#039;&amp;#039;&amp;#039;. În matricea pătratică, liniile și coloanele vor fi numerotate cu litere. Avem această matrice ca exemplu. :   A D F G X : A a b c d e : D f g h i j : F k l m n o : G p q r s t : X u v w x y Fiecărei litere îi va corespunde un &amp;#039;&amp;#039;&amp;#039;cod&amp;#039;&amp;#039;&amp;#039; format din linie și coloană. Spre exemplu pentru litera &amp;#039;&amp;#039;&amp;#039;t&amp;#039;&amp;#039;&amp;#039; din matricea de mai sus codul este &amp;#039;&amp;#039;&amp;#039;GX&amp;#039;&amp;#039;&amp;#039;. Literele din fiecare cod s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cifrul &#039;&#039;&#039;ADFGX&#039;&#039;&#039; este un cifru care folosește o matrice pătratică &#039;&#039;&#039;5x5&#039;&#039;&#039; și o &#039;&#039;&#039;cheie&#039;&#039;&#039;. În matricea pătratică, liniile și coloanele vor fi numerotate cu litere. Avem această matrice ca exemplu.&lt;br /&gt;
:   A D F G X&lt;br /&gt;
: A a b c d e&lt;br /&gt;
: D f g h i j&lt;br /&gt;
: F k l m n o&lt;br /&gt;
: G p q r s t&lt;br /&gt;
: X u v w x y&lt;br /&gt;
Fiecărei litere îi va corespunde un &#039;&#039;&#039;cod&#039;&#039;&#039; format din linie și coloană.&lt;br /&gt;
Spre exemplu pentru litera &#039;&#039;&#039;t&#039;&#039;&#039; din matricea de mai sus codul este &#039;&#039;&#039;GX&#039;&#039;&#039;. Literele din fiecare cod se așează sub fiecare literă din cheie. Spre exemplu pentru cheia mar și mesajul atac, folosind matricea de mai sus vom avea:&lt;br /&gt;
: m a r&lt;br /&gt;
: A A G&lt;br /&gt;
: X A A&lt;br /&gt;
: A F&lt;br /&gt;
După această etapă se sortează literele din cheie crescător și obținem.&lt;br /&gt;
: a m r&lt;br /&gt;
: A A G =&amp;gt;   AAF AXA GA&lt;br /&gt;
: A X A&lt;br /&gt;
: F A&lt;br /&gt;
Acela este mesajul codificat.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se citeste un text. Sa se afiseze textul codificat folosind cifrul &#039;&#039;&#039;ADFGX&#039;&#039;&#039;, daca numarul cerintei este &#039;&#039;&#039;1&#039;&#039;&#039;, iar daca numarul cerinta este &#039;&#039;&#039;2&#039;&#039;&#039; se va afisa textul decodificat.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fisierului de intrare &#039;&#039;&#039;adfgxin.txt&#039;&#039;&#039; se va afla un numar, reprezentand cerinta.&lt;br /&gt;
Pe a doua linie se va afla o matrice &#039;&#039;&#039;5 x 5&#039;&#039;&#039;.&lt;br /&gt;
Pe a treia linie se afla &#039;&#039;&#039;cheia&#039;&#039;&#039; folosita pentru codificare.&lt;br /&gt;
Pe a patra linie se va afisa &#039;&#039;&#039;mesajul&#039;&#039;&#039; ce trebuie codificat/decodificat,in functie de cerinta.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Se va afisa mesajul codificat/decodificat.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;lungimea mesajului ≤ 100000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;textul va contine litere mici ale alfabetului englez&#039;&#039;&#039;&lt;br /&gt;
* Pentru &#039;&#039;&#039;cerinta 2&#039;&#039;&#039;, mesajul ce trebuie decodificat va contine &#039;&#039;&#039;litere mari&#039;&#039;&#039;. Pentru cerinta 1 mesajul codificat va fi afisat tot cu &#039;&#039;&#039;litere mari&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; adfgxin.txt&lt;br /&gt;
: 1&lt;br /&gt;
: abcde&lt;br /&gt;
: fghij&lt;br /&gt;
: klmno&lt;br /&gt;
: pqrst&lt;br /&gt;
: uvwxy&lt;br /&gt;
: pbinfo&lt;br /&gt;
: romaniiatacacetatea&lt;br /&gt;
; adfgxout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: FAGAFAA FDGAGA FFAAAG XGAFXX FGXAXX GADAAAA&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; adfgxin.txt&lt;br /&gt;
: 1&lt;br /&gt;
: abcde&lt;br /&gt;
: fghij&lt;br /&gt;
: klmno&lt;br /&gt;
: pqrst&lt;br /&gt;
: uvwxyz&lt;br /&gt;
: pbinfo&lt;br /&gt;
: romaniiatacacetatea1&lt;br /&gt;
; adfgxout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3616 - Adfgx&lt;br /&gt;
def validare(matrice_validare, mesaj_validare):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(mesaj_validare) &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for linie in matrice_validare:&lt;br /&gt;
        if len(linie) != 5:    # fiecare linie trebuie sa aiba 5 caractere&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def codificare(matrice_codificare, mesaj_codificare):                     # functia de rezolvare&lt;br /&gt;
    codificat = &amp;quot;&amp;quot;&lt;br /&gt;
    for litera in mesaj_codificare:&lt;br /&gt;
        for i in range(5):&lt;br /&gt;
            for j in range(5):&lt;br /&gt;
                if matrice_codificare[i][j] == litera:&lt;br /&gt;
                    codificat += &amp;quot;ADFGX&amp;quot;[i] + &amp;quot;ADFGX&amp;quot;[j]&lt;br /&gt;
    return codificat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;adfgxin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;adfgxout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        cerinta = int(fisier_intrare.readline())&lt;br /&gt;
        matrice = [list(fisier_intrare.readline().strip()) for _ in range(5)]&lt;br /&gt;
        cheie = fisier_intrare.readline().strip()&lt;br /&gt;
        mesaj = fisier_intrare.readline().strip()&lt;br /&gt;
&lt;br /&gt;
        validare(matrice, mesaj)                 # apelul functiei de validare&lt;br /&gt;
        if cerinta == 1:&lt;br /&gt;
            fisier_iesire.write(codificare(matrice, mesaj))               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2525_-_Cioc&amp;diff=8827</id>
		<title>2525 - Cioc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2525_-_Cioc&amp;diff=8827"/>
		<updated>2024-01-03T01:17:59Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cioc == &amp;#039;&amp;#039;&amp;#039;Cioc&amp;#039;&amp;#039;&amp;#039;, un elev abia aterizat în clasa a IX-a, primește de la doamna profesor de informatică un șir de &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale pe care trebuie să îl prelucreze. Astfel, băiatul trebuie să scrie după fiecare dintre cele &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; cele mai mici elemente dublul lor. Dacă cel mai mare dintre aceste numere se repetă și deja se depășesc cele &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; elemente prevăzute, doamna profesor îi dă libertatea băiatului de a modifica valoarea lui &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; astfe...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cioc ==&lt;br /&gt;
&#039;&#039;&#039;Cioc&#039;&#039;&#039;, un elev abia aterizat în clasa a IX-a, primește de la doamna profesor de informatică un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale pe care trebuie să îl prelucreze. Astfel, băiatul trebuie să scrie după fiecare dintre cele &#039;&#039;&#039;k&#039;&#039;&#039; cele mai mici elemente dublul lor. Dacă cel mai mare dintre aceste numere se repetă și deja se depășesc cele &#039;&#039;&#039;k&#039;&#039;&#039; elemente prevăzute, doamna profesor îi dă libertatea băiatului de a modifica valoarea lui &#039;&#039;&#039;k&#039;&#039;&#039; astfel încât să cuprindă și aceste valori. De exemplu, dacă &#039;&#039;&#039;n = 7&#039;&#039;&#039;, &#039;&#039;&#039;v[] = {1, 4, 6, 2, 3, 4, 5}&#039;&#039;&#039; și &#039;&#039;&#039;k = 4&#039;&#039;&#039;, atunci, în urma prelucrării, șirul &#039;&#039;&#039;v&#039;&#039;&#039; devine &#039;&#039;&#039;{1, 2, 4, 8, 6, 2, 4, 3, 6, 4, 8, 5}&#039;&#039;&#039;, și deci &#039;&#039;&#039;kfinal=5&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscându-se &#039;&#039;&#039;n&#039;&#039;&#039;, șirul &#039;&#039;&#039;v&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039;, să se afișeze:&lt;br /&gt;
* 1. Numărul &#039;&#039;&#039;kfinal&#039;&#039;&#039;;&lt;br /&gt;
* 2. Vectorul după prelucrare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;ciocin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;c&#039;&#039;&#039; (mereu &#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;2&#039;&#039;&#039;, reprezentând cerința ce trebuie rezolvată), &#039;&#039;&#039;n&#039;&#039;&#039;, &#039;&#039;&#039;k&#039;&#039;&#039;, iar următoarea linie va conține n numere întregi, reprezentând elementele vectorului inițial.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;ciocout.txt&#039;&#039;&#039; va conține pe prima linie:&lt;br /&gt;
* Dacă &#039;&#039;&#039;c = 1&#039;&#039;&#039;, atunci numărul &#039;&#039;&#039;kfinal&#039;&#039;&#039;;&lt;br /&gt;
* Dacă &#039;&#039;&#039;c = 2&#039;&#039;&#039;, atunci vectorul după prelucrare.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n, k ≤ 100.000&#039;&#039;&#039;;&lt;br /&gt;
* &#039;&#039;&#039;1≤v[i]≤2^60&#039;&#039;&#039;;&lt;br /&gt;
* Pentru &#039;&#039;&#039;40%&#039;&#039;&#039; din teste, &#039;&#039;&#039;c=1&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; ciocin.txt&lt;br /&gt;
: 1 7 4&lt;br /&gt;
: 1 4 6 2 3 4 5&lt;br /&gt;
; ciocout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 5&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;k&#039;&#039;&#039;-ul inițial nu este suficient de cuprinzător (numărul &#039;&#039;&#039;4&#039;&#039;&#039; se repetă).&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; ciocin.txt&lt;br /&gt;
: 2 7 4&lt;br /&gt;
: 1 4 6 2 3 4 5&lt;br /&gt;
; ciocout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1 2 4 8 6 2 4 3 6 4 8 5&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Acesta este exemplul din enunț.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; ciocin.txt&lt;br /&gt;
: 2 7 4&lt;br /&gt;
: 1 4 6 2 3 4 1000000001&lt;br /&gt;
; ciocout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2525 - Cioc&lt;br /&gt;
def validare(n_validare, k_validare, sir_validare):           # functia de validare a datelor de intrare&lt;br /&gt;
    if not (1 &amp;lt;= n_validare &amp;lt;= 100000 and 1 &amp;lt;= k_validare &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for v in sir_validare:&lt;br /&gt;
        if not (1 &amp;lt;= v &amp;lt;= 260):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prelucrare(n_prelucrare, k_prelucrare, sir_prelucrare):         # functia de rezolvare a problemei&lt;br /&gt;
    sir_sortat = sorted([(v, i) for i, v in enumerate(sir_prelucrare)])&lt;br /&gt;
    k_final_prelucrare = k_prelucrare&lt;br /&gt;
    while k_final_prelucrare &amp;lt; n_prelucrare and sir_sortat[k_final_prelucrare][0] == sir_sortat[k_prelucrare-1][0]:&lt;br /&gt;
        k_final_prelucrare += 1&lt;br /&gt;
&lt;br /&gt;
    sir_prelucrat_prelucrare = []&lt;br /&gt;
    for v, i in sir_sortat[:k_final_prelucrare]:&lt;br /&gt;
        sir_prelucrat_prelucrare.append((i, v))&lt;br /&gt;
        sir_prelucrat_prelucrare.append((i, v*2))&lt;br /&gt;
    sir_prelucrat_prelucrare.sort()&lt;br /&gt;
&lt;br /&gt;
    return k_final_prelucrare, [v for i, v in sir_prelucrat_prelucrare]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;ciocin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;ciocout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        c, n, k = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        sir = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(n, k, sir)                 # apelul functiei de validare&lt;br /&gt;
&lt;br /&gt;
        k_final, sir_prelucrat = prelucrare(n, k, sir)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        if c == 1:&lt;br /&gt;
            fisier_iesire.write(str(k_final) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            fisier_iesire.write(&amp;quot; &amp;quot;.join(map(str, sir_prelucrat)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2466_-_Proiectoare&amp;diff=8826</id>
		<title>2466 - Proiectoare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2466_-_Proiectoare&amp;diff=8826"/>
		<updated>2024-01-03T00:57:44Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Primăria a montat, pe faleza din Mamaia, &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; proiectoare așezate liniar, pentru fiecare cunoscându-se zona de faleză pe care o luminează, sub forma unui interval [&amp;#039;&amp;#039;&amp;#039;s, d&amp;#039;&amp;#039;&amp;#039;], unde &amp;#039;&amp;#039;&amp;#039;s&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;d&amp;#039;&amp;#039;&amp;#039; (&amp;#039;&amp;#039;&amp;#039;s &amp;lt; d&amp;#039;&amp;#039;&amp;#039;) sunt numere naturale reprezentând distanțele față de punctul unde începe faleza. Pentru a verifica eficiența iluminării falezei, tehnicienii primăriei vor să determine intervalul de faleză de lungime maximă, iluminat de cel mult &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; proiecto...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Primăria a montat, pe faleza din Mamaia, &#039;&#039;&#039;N&#039;&#039;&#039; proiectoare așezate liniar, pentru fiecare cunoscându-se zona de faleză pe care o luminează, sub forma unui interval [&#039;&#039;&#039;s, d&#039;&#039;&#039;], unde &#039;&#039;&#039;s&#039;&#039;&#039; și &#039;&#039;&#039;d&#039;&#039;&#039; (&#039;&#039;&#039;s &amp;lt; d&#039;&#039;&#039;) sunt numere naturale reprezentând distanțele față de punctul unde începe faleza. Pentru a verifica eficiența iluminării falezei, tehnicienii primăriei vor să determine intervalul de faleză de lungime maximă, iluminat de cel mult &#039;&#039;&#039;K&#039;&#039;&#039; proiectoare, conținut într-un interval &#039;&#039;&#039;[X, Y]&#039;&#039;&#039; precizat. Pentru a fi siguri de corectitudinea rezultatelor obținute, tehnicienii realizează &#039;&#039;&#039;Q&#039;&#039;&#039; astfel de verificări.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Dându-se &#039;&#039;&#039;Q&#039;&#039;&#039; intervale de forma &#039;&#039;&#039;[Xi, Yi]&#039;&#039;&#039; determinați, pentru fiecare dintre acestea, câte un interval de lungime maximă iluminat de cel mult &#039;&#039;&#039;K&#039;&#039;&#039; proiectoare. Dacă nici un proiector nu iluminează vreo porțiune din intervalul &#039;&#039;&#039;[Xi, Yi]&#039;&#039;&#039; se va afișa valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Datele de intrare se citesc din fișierul text &#039;&#039;&#039;proiectoarein.txt&#039;&#039;&#039;, care are structura următoare:&lt;br /&gt;
* pe prima linie se află valorile naturale &#039;&#039;&#039;N&#039;&#039;&#039;, &#039;&#039;&#039;Q&#039;&#039;&#039;, &#039;&#039;&#039;K&#039;&#039;&#039;, separate prin câte un spațiu, cu semnificația din enunț;&lt;br /&gt;
* pe următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află câte o pereche de valori naturale &#039;&#039;&#039;Si&#039;&#039;&#039;, &#039;&#039;&#039;Di&#039;&#039;&#039;, separate printr-un spațiu, reprezentând intervalele iluminate de fiecare proiector;&lt;br /&gt;
* pe următoarele &#039;&#039;&#039;Q&#039;&#039;&#039; linii se află câte o pereche de valori naturale &#039;&#039;&#039;Xi&#039;&#039;&#039;, &#039;&#039;&#039;Yi&#039;&#039;&#039;, separate printr-un spațiu, reprezentând intervalele pentru care se realizează verificările.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul text &#039;&#039;&#039;proiectoareout.txt&#039;&#039;&#039; se vor scrie &#039;&#039;&#039;Q&#039;&#039;&#039; linii; pe linia &#039;&#039;&#039;i&#039;&#039;&#039; &#039;&#039;&#039;(1 ≤ i ≤ Q)&#039;&#039;&#039; se va scrie un număr natural reprezentând lungimea intervalului obținut ca răspuns la verificarea efectuată pentru intervalul &#039;&#039;&#039;[Xi, Yi]&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 ≤ S &amp;lt; D ≤ 1 000 000 000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ K ≤ N ≤ 100 000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ Q ≤ 100 000&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de &#039;&#039;&#039;11&#039;&#039;&#039; puncte, &#039;&#039;&#039;K = 1&#039;&#039;&#039; și &#039;&#039;&#039;n ≤ 2000&#039;&#039;&#039; și &#039;&#039;&#039;Q ≤ 2000&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de alte &#039;&#039;&#039;38&#039;&#039;&#039; puncte, &#039;&#039;&#039;K = 1&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de alte &#039;&#039;&#039;21&#039;&#039;&#039; puncte, &#039;&#039;&#039;K = 2&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de alte &#039;&#039;&#039;10&#039;&#039;&#039; puncte, &#039;&#039;&#039;K ≤ 30&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; proiectoarein.txt&lt;br /&gt;
: 5 5 1&lt;br /&gt;
: 1 4&lt;br /&gt;
: 2 3&lt;br /&gt;
: 3 6&lt;br /&gt;
: 4 7&lt;br /&gt;
: 4 8&lt;br /&gt;
: 1 10&lt;br /&gt;
: 2 5&lt;br /&gt;
: 3 4&lt;br /&gt;
: 6 8&lt;br /&gt;
: 8 9&lt;br /&gt;
; proiectoareout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4&lt;br /&gt;
: 2&lt;br /&gt;
: 1&lt;br /&gt;
: 2&lt;br /&gt;
: 0&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pentru verificarea &#039;&#039;&#039;[1,10]&#039;&#039;&#039; cel mai lung interval complet iluminat este &#039;&#039;&#039;[4,8]&#039;&#039;&#039; cu lungimea &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
Pentru verificarea &#039;&#039;&#039;[2,5]&#039;&#039;&#039; cele mai lungi intervale complet iluminate sunt &#039;&#039;&#039;[2,4]&#039;&#039;&#039; și &#039;&#039;&#039;[3,5]&#039;&#039;&#039;, ambele au lungimea &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
Pentru verificarea &#039;&#039;&#039;[3,4]&#039;&#039;&#039; cel mai lung interval complet iluminat este &#039;&#039;&#039;[3,4]&#039;&#039;&#039; cu lungimea &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
Pentru verificarea &#039;&#039;&#039;[6,8]&#039;&#039;&#039; cel mai lung interval complet iluminat este &#039;&#039;&#039;[6,8]&#039;&#039;&#039; cu lungimea &#039;&#039;&#039;2&#039;&#039;&#039;.&lt;br /&gt;
Pentru verificarea &#039;&#039;&#039;[8,9]&#039;&#039;&#039; se afișează valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; proiectoarein.txt&lt;br /&gt;
: 5 5 1&lt;br /&gt;
: 1 4 2&lt;br /&gt;
: 2 3 1&lt;br /&gt;
: 3 6 1&lt;br /&gt;
: 4 7 1&lt;br /&gt;
: 4 8 1&lt;br /&gt;
: 1 10&lt;br /&gt;
: 2 5&lt;br /&gt;
: 3 4&lt;br /&gt;
: 6 8&lt;br /&gt;
: 8 9&lt;br /&gt;
; proiectoareout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2466 - Proiectoare&lt;br /&gt;
def validare(lista_proiectoare1, lista_verificari1, k_max1):           # functia de validare a datelor de intrare&lt;br /&gt;
    n, q = len(lista_proiectoare1), len(lista_verificari1)&lt;br /&gt;
    if not (1 &amp;lt;= k_max1 &amp;lt;= n &amp;lt;= 100000 and 1 &amp;lt;= q &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for s, d, k_proiector in lista_proiectoare1:&lt;br /&gt;
        if not (0 &amp;lt;= s &amp;lt; d &amp;lt;= 1000000000 and 1 &amp;lt;= k_proiector &amp;lt;= n):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    if k_max1 == 1 and n &amp;gt; 2000 and q &amp;gt; 2000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    if k_max1 &amp;gt; 30:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# functia de rezolvare va fi implementata aici&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;proiectoarein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;proiectoareout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        lista_proiectoare = []&lt;br /&gt;
        lista_verificari = []&lt;br /&gt;
        k_max = 0&lt;br /&gt;
        # citirea si prelucrarea datelor de intrare se face aici&lt;br /&gt;
&lt;br /&gt;
        validare(lista_proiectoare, lista_verificari, k_max)                 # apelul functiei de validare&lt;br /&gt;
        # apelul functiei de rezolvare se face aici&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2869_-_Tabela&amp;diff=8825</id>
		<title>2869 - Tabela</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2869_-_Tabela&amp;diff=8825"/>
		<updated>2024-01-03T00:26:22Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Macaraie, pasionat de numere, dar mai ales de matrici, începe într-o zi să umple o foaie infinită de matematică cu numere astfel: în colțul aflat în stânga sus (de coordonate &#039;&#039;&#039;(1, 1)&#039;&#039;&#039;) pune &#039;&#039;&#039;0&#039;&#039;&#039;, apoi scrie de la stânga la dreapta și de sus în jos cel mai mic număr care nu apare pe linia și coloana respectivă. Dându-se linia și coloana unei căsuțe din tabelă, aflați numărul de la acea poziție.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;tabelain.txt&#039;&#039;&#039; conține pe prima și singura linie numerele &#039;&#039;&#039;L&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând linia și coloana pătrățelului a cărui valoare dorim să o determinăm.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;tabelaout.txt&#039;&#039;&#039; conține pe prima linie numărul scris pe foaie la linia &#039;&#039;&#039;L&#039;&#039;&#039; si coloana &#039;&#039;&#039;C&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 ≤ L, C ≤ 2.000.000.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; tabelain.txt&lt;br /&gt;
: 2 3&lt;br /&gt;
; tabelaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; tabelain.txt&lt;br /&gt;
: 4 5&lt;br /&gt;
; tabelaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 7&lt;br /&gt;
== Explicație ==&lt;br /&gt;
: 0 1 2 3 4 5 ..&lt;br /&gt;
: 1 0 3 2 5 4 ..&lt;br /&gt;
: 2 3 0 1 6 7 ..&lt;br /&gt;
: 3 2 1 0 7 6 ..&lt;br /&gt;
: ..............&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; tabelain.txt&lt;br /&gt;
: 0 2000000001&lt;br /&gt;
; tabelaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2869 - Tabela&lt;br /&gt;
def validare(linie1, coloana1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if linie1 &amp;lt; 1 or linie1 &amp;gt; 2000000000 or coloana1 &amp;lt; 1 or coloana1 &amp;gt; 2000000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_tabela(linie1, coloana1):&lt;br /&gt;
    if linie1 &amp;gt; coloana1:&lt;br /&gt;
        if linie1 % 2 == 0:&lt;br /&gt;
            return linie1 * linie1 - coloana1 + 1&lt;br /&gt;
        else:&lt;br /&gt;
            return (linie1 - 1) * (linie1 - 1) + coloana1&lt;br /&gt;
    else:&lt;br /&gt;
        if coloana1 % 2 == 0:&lt;br /&gt;
            return coloana1 * coloana1 - linie1 + 1&lt;br /&gt;
        else:&lt;br /&gt;
            return (coloana1 - 1) * (coloana1 - 1) + linie1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;tabelain.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;tabelaout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        linie, coloana = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        validare(linie, coloana)&lt;br /&gt;
        numar = numar_tabela(linie, coloana)&lt;br /&gt;
        fisier_iesire.write(str(numar))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2869_-_Tabela&amp;diff=8824</id>
		<title>2869 - Tabela</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2869_-_Tabela&amp;diff=8824"/>
		<updated>2024-01-03T00:21:30Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Macaraie, pasionat de numere, dar mai ales de matrici, începe într-o zi să umple o foaie infinită de matematică cu numere astfel: în colțul aflat în stânga sus (de coordonate &amp;#039;&amp;#039;&amp;#039;(1, 1)&amp;#039;&amp;#039;&amp;#039;) pune &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;, apoi scrie de la stânga la dreapta și de sus în jos cel mai mic număr care nu apare pe linia și coloana respectivă. Dându-se linia și coloana unei căsuțe din tabelă, aflați numărul de la acea poziție. == Date de intrare == Fișierul de int...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Macaraie, pasionat de numere, dar mai ales de matrici, începe într-o zi să umple o foaie infinită de matematică cu numere astfel: în colțul aflat în stânga sus (de coordonate &#039;&#039;&#039;(1, 1)&#039;&#039;&#039;) pune &#039;&#039;&#039;0&#039;&#039;&#039;, apoi scrie de la stânga la dreapta și de sus în jos cel mai mic număr care nu apare pe linia și coloana respectivă. Dându-se linia și coloana unei căsuțe din tabelă, aflați numărul de la acea poziție.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;tabelain.txt&#039;&#039;&#039; conține pe prima și singura linie numerele &#039;&#039;&#039;L&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând linia și coloana pătrățelului a cărui valoare dorim să o determinăm.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;tabelaout.txt&#039;&#039;&#039; conține pe prima linie numărul scris pe foaie la linia &#039;&#039;&#039;L&#039;&#039;&#039; si coloana &#039;&#039;&#039;C&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* 1 ≤ L, C ≤ 2.000.000.000&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; tabelain.txt&lt;br /&gt;
: 2 3&lt;br /&gt;
; tabelaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; tabelain.txt&lt;br /&gt;
: 4 5&lt;br /&gt;
; tabelaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 7&lt;br /&gt;
== Explicație ==&lt;br /&gt;
: 0 1 2 3 4 5 ..&lt;br /&gt;
: 1 0 3 2 5 4 ..&lt;br /&gt;
: 2 3 0 1 6 7 ..&lt;br /&gt;
: 3 2 1 0 7 6 ..&lt;br /&gt;
: ..............&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; tabelain.txt&lt;br /&gt;
: 0 2000000001&lt;br /&gt;
; tabelaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2869 - Tabela&lt;br /&gt;
def validare(linie, coloana):           # functia de validare a datelor de intrare&lt;br /&gt;
    if linie &amp;lt; 1 or linie &amp;gt; 2000000000 or coloana &amp;lt; 1 or coloana &amp;gt; 2000000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_tabela(linie, coloana):&lt;br /&gt;
    if linie &amp;gt; coloana:&lt;br /&gt;
        if linie % 2 == 0:&lt;br /&gt;
            return linie * linie - coloana + 1&lt;br /&gt;
        else:&lt;br /&gt;
            return (linie - 1) * (linie - 1) + coloana&lt;br /&gt;
    else:&lt;br /&gt;
        if coloana % 2 == 0:&lt;br /&gt;
            return coloana * coloana - linie + 1&lt;br /&gt;
        else:&lt;br /&gt;
            return (coloana - 1) * (coloana - 1) + linie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;tabelain.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;tabelaout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        linie, coloana = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        validare(linie, coloana)&lt;br /&gt;
        numar = numar_tabela(linie, coloana)&lt;br /&gt;
        fisier_iesire.write(str(numar))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3883_-_Comisia&amp;diff=8783</id>
		<title>3883 - Comisia</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3883_-_Comisia&amp;diff=8783"/>
		<updated>2024-01-02T18:42:11Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Odată cu primăvara a sosit şi recrutarea comisiilor, iar asemenea ghioceilor, abuzurile răsar pretutindeni pentru a prevesti acest fapt. Astăzi dorim să recrutăm o comisie dintr-un şir de &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; oameni găsiţi aleator pe stradă în timp ce stăteau la o coadă. Fiecare dintre cei &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; oameni are un număr minim de oameni pe care comisia trebuie să-l întrunească pentru ca persoana respectivă să accepte participarea. De-asemenea, am atribuit fi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Odată cu primăvara a sosit şi recrutarea comisiilor, iar asemenea ghioceilor, abuzurile răsar pretutindeni pentru a prevesti acest fapt.&lt;br /&gt;
Astăzi dorim să recrutăm o comisie dintr-un şir de &#039;&#039;&#039;N&#039;&#039;&#039; oameni găsiţi aleator pe stradă în timp ce stăteau la o coadă. Fiecare dintre cei &#039;&#039;&#039;N&#039;&#039;&#039; oameni are un număr minim de oameni pe care comisia trebuie să-l întrunească pentru ca persoana respectivă să accepte participarea. De-asemenea, am atribuit fiecărei persoane, într-un mod subiectiv şi profund discriminatoriu, un grad de risc. Cu cât acest grad de risc este mai mare, cu atât mai mult rău poate face persoana respectivă comisiei, fie că este vorba de încălcat confidenţialitatea subiectelor, sustragerea echipamentului tehnic sau agresarea verbală sau/şi fizică a altor membri ai comisiei.&lt;br /&gt;
Fiindcă persoanele au fost găsite stând la coadă şi oricum nu voiam să ne agităm să-i ordonăm în vreun fel, este necesar ca întreaga comisie să formeze o subsecvenţă continuă a cozii. Ştiind acest lucru, dorim să găsim o comisie validă de risc total minim.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;comisiain.txt&#039;&#039;&#039; contine pe prima linie numarul &#039;&#039;&#039;N&#039;&#039;&#039; reprezentand numarul de persoane.&lt;br /&gt;
Pe a doua linie se va afla şirul &#039;&#039;&#039;A&#039;&#039;&#039;, adică &#039;&#039;&#039;N&#039;&#039;&#039; numere reprezentand cerintele fiecarei persoane. Mai exact, dacă a i-a valoare este egală cu &#039;&#039;&#039;x&#039;&#039;&#039;, persoana cu numărul &#039;&#039;&#039;i&#039;&#039;&#039; din coadă îşi doreşte cel puţin &#039;&#039;&#039;x&#039;&#039;&#039; membri în comisie.&lt;br /&gt;
Pe a treia linie se va afla şirul &#039;&#039;&#039;B&#039;&#039;&#039;, adică &#039;&#039;&#039;N&#039;&#039;&#039; numere reprezentand factorul de risc al fiecarei persoane.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fişierul de ieşire &#039;&#039;&#039;comisiaout.txt&#039;&#039;&#039; se va afla o singură valoare, reprezentând riscul total minim al unei comisii care întruneşte cerinţele persoanelor implicate.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;3 ≤ N ≤ 200.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ Ai ≤ N&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ Bi ≤ 1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste in valoare de &#039;&#039;&#039;20&#039;&#039;&#039; de puncte &#039;&#039;&#039;N ≤ 4.000&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; comisiain.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 2&lt;br /&gt;
: 50 6 6&lt;br /&gt;
; comisiaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 12&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Prima persoană este dispusă să fie singurul membru al comisiei, dar aceasta avea, fără vreun motiv aparent, un topor în mână în momentul chestionării, motiv pentru care i s-a atribuit gradul de risc &#039;&#039;&#039;50&#039;&#039;&#039;. Este astfel mai bine să formăm comisia din persoanele &#039;&#039;&#039;2&#039;&#039;&#039; şi &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; comisiain.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 1 2 3 4&lt;br /&gt;
: 5 6 7 8&lt;br /&gt;
: 9 10 11 12&lt;br /&gt;
: 13 14 15 1000000001&lt;br /&gt;
; comisiaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3883 - Comisia&lt;br /&gt;
def validare(n1, lista_cerinte1, lista_riscuri1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if n1 &amp;lt; 3 or n1 &amp;gt; 200000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for cerinta in lista_cerinte1:&lt;br /&gt;
        if cerinta &amp;lt; 1 or cerinta &amp;gt; n1:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for risc in lista_riscuri1:&lt;br /&gt;
        if risc &amp;lt; 1 or risc &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def risc_minim(n1, lista_cerinte1, lista_riscuri1):                     # functia de rezolvare&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (n1 + 1)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
    for i in range(1, n1 + 1):&lt;br /&gt;
        suma = 0&lt;br /&gt;
        for j in range(i, 0, -1):&lt;br /&gt;
            suma += lista_riscuri1[j - 1]&lt;br /&gt;
            if lista_cerinte1[j - 1] &amp;lt;= i:&lt;br /&gt;
                dp[i] = min(dp[i], dp[j-1] + suma)&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(str(min(dp[1:])))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;comisiain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;comisiaout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        dim_n = int(fisier_intrare.readline())&lt;br /&gt;
        lista_cerinte = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
        lista_riscuri = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(dim_n, lista_cerinte, lista_riscuri)                 # apelul functiei de validare&lt;br /&gt;
        risc_minim(dim_n, lista_cerinte, lista_riscuri)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1229_-_Matrice_Div_Et_Imp&amp;diff=8782</id>
		<title>1229 - Matrice Div Et Imp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1229_-_Matrice_Div_Et_Imp&amp;diff=8782"/>
		<updated>2024-01-02T18:24:22Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Marian a fost foarte interesat de metoda divide et impera și a primit de la profesorul său o problemă: se dă o matrice de dimensiune 2^n și ea trebuie parcursă după o anumită regulă bazată pe divide et impera. Pe baza a trei exemple, el trebuie să descopere regula și s-o aplice . Din păcate, acesta nu reusește și vă cere ajutorul. Vrea o rezolvare foarte eficienta atât din punct de vedere al timpului de execuție cât și a limitei de memorie....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Marian a fost foarte interesat de metoda divide et impera și a primit de la profesorul său o problemă: se dă o matrice de dimensiune 2^n și ea trebuie parcursă după o anumită regulă bazată pe divide et impera. Pe baza a trei exemple, el trebuie să descopere regula și s-o aplice . Din păcate, acesta nu reusește și vă cere ajutorul. Vrea o rezolvare foarte eficienta atât din punct de vedere al timpului de execuție cât și a limitei de memorie.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;matrice_div_et_impin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe celelalte &#039;&#039;&#039;2^n&#039;&#039;&#039; linii câte &#039;&#039;&#039;2^n&#039;&#039;&#039; numere naturale nenule separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;matrice_div_et_impout.txt&#039;&#039;&#039; va conține o linie cu cele &#039;&#039;&#039;2^n*2^n&#039;&#039;&#039; numere ale matricei , parcurse după respectiva regulă.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 ≤ n ≤ 9&#039;&#039;&#039;&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; matrice_div_et_impin.txt&lt;br /&gt;
: 1&lt;br /&gt;
: 1 2 &lt;br /&gt;
: 3 4&lt;br /&gt;
; matrice_div_et_impout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1 4 2 3 &lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; matrice_div_et_impin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 15 12 13 14&lt;br /&gt;
: 36 56 34 58&lt;br /&gt;
: 98 80 79 11&lt;br /&gt;
: 10 43 47 50&lt;br /&gt;
; matrice_div_et_impout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 15 56 12 36 79 50 11 47 13 58 14 34 98 43 80 10 &lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; matrice_div_et_impin.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 3 4 5 6 7 8&lt;br /&gt;
: 9 10 11 12 13 14 15 16&lt;br /&gt;
: 17 18 19 20 21 22 23 24&lt;br /&gt;
: 25 26 27 28 29 30 31 32&lt;br /&gt;
: 33 34 35 36 37 38 39 40&lt;br /&gt;
: 41 42 43 44 45 46 47 48&lt;br /&gt;
: 49 50 51 52 53 54 55 56&lt;br /&gt;
: 57 58 59 60 61 62 63 64&lt;br /&gt;
; matrice_div_et_impout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1 10 2 9 19 28 20 27 3 12 4 11 17 26 18 25 37 46 38 45 55 64 56 63 39 48 40 47 53 62 54 61 5 14 6 13 23 32 24 31 7 16 8 15 21 30 22 29 33 42 34 41 51 60 52 59 35 44 36 43 49 58 50 57&lt;br /&gt;
== Exemplul 4 ==&lt;br /&gt;
; matrice_div_et_impin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 1 2 3 4&lt;br /&gt;
: 5 6 7 8&lt;br /&gt;
: 9 10 11 12&lt;br /&gt;
: 13 14 15 1000000001&lt;br /&gt;
; matrice_div_et_impout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1229 - Matrice Div Et Imp&lt;br /&gt;
def validare(dimensiune_n, lista_matrice1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if dimensiune_n &amp;lt; 0 or dimensiune_n &amp;gt; 9:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for linie in lista_matrice1:&lt;br /&gt;
        for numar in linie:&lt;br /&gt;
            if numar &amp;lt; 1 or numar &amp;gt; 1000000000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def parcurgere(dimensiune_n, lista_matrice1, x, y):  # functia de rezolvare&lt;br /&gt;
    if dimensiune_n == 0:&lt;br /&gt;
        return [lista_matrice1[x][y]]&lt;br /&gt;
    else:&lt;br /&gt;
        dimensiune_n -= 1&lt;br /&gt;
        dim = 2 ** dimensiune_n&lt;br /&gt;
        return (parcurgere(dimensiune_n, lista_matrice1, x, y) +&lt;br /&gt;
                parcurgere(dimensiune_n, lista_matrice1, x + dim, y + dim) +&lt;br /&gt;
                parcurgere(dimensiune_n, lista_matrice1, x, y + dim) +&lt;br /&gt;
                parcurgere(dimensiune_n, lista_matrice1, x + dim, y))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;matrice_div_et_impin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;matrice_div_et_impout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        dim_n = int(fisier_intrare.readline())&lt;br /&gt;
        lista_matrice = [list(map(int, fisier_intrare.readline().split())) for _ in range(2**dim_n)]&lt;br /&gt;
&lt;br /&gt;
        validare(dim_n, lista_matrice)                 # apelul functiei de validare&lt;br /&gt;
        rezultat = parcurgere(dim_n, lista_matrice, 0, 0)  # apelul functiei de rezolvare&lt;br /&gt;
        fisier_iesire.write(&#039; &#039;.join(map(str, rezultat)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1972_-_Hambar&amp;diff=8781</id>
		<title>1972 - Hambar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1972_-_Hambar&amp;diff=8781"/>
		<updated>2024-01-02T18:06:02Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Enunț == Gigel are o grădina sub forma unei matrice binare de ordin &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;, unde 0 reprezintă teren liber, &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; reprezintă pomi. El dorește să construiască un hambar pe dreptunghiul de arie maximă format doar din &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. == Cerința == Ajutați-l pe Gigel să găsească dreptunghiul de arie maximă format doar din &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;hambarin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numerele &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;, reprezentând dimensinu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Gigel are o grădina sub forma unei matrice binare de ordin &#039;&#039;&#039;N&#039;&#039;&#039;, unde 0 reprezintă teren liber, &#039;&#039;&#039;1&#039;&#039;&#039; reprezintă pomi. El dorește să construiască un hambar pe dreptunghiul de arie maximă format doar din &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Ajutați-l pe Gigel să găsească dreptunghiul de arie maximă format doar din &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;hambarin.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;, reprezentând dimensinunea matricei, respectiv numărul de pomi, iar pe următoarele &#039;&#039;&#039;M&#039;&#039;&#039; linii se vor găsi perechi numere &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039;, separate printr-un spațiu, reprezentând indicele liniei, respectiv al coloanei pe care se află un pom.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;hambarout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând aria maximă a unei suprafețe dreptunghiulare ce nu conține &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ N, M ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
* Nu se vor afla &#039;&#039;&#039;2&#039;&#039;&#039; sau mai mulți pomi în același loc.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; hambarin.txt&lt;br /&gt;
: 5 5&lt;br /&gt;
: 1 3&lt;br /&gt;
: 2 1&lt;br /&gt;
: 2 5&lt;br /&gt;
: 5 1&lt;br /&gt;
: 5 5&lt;br /&gt;
; hambarout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 12&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; hambarin.txt&lt;br /&gt;
: 5 5&lt;br /&gt;
: 1 3&lt;br /&gt;
: 2 1&lt;br /&gt;
: 2 5&lt;br /&gt;
: 5 1&lt;br /&gt;
: 5 1000&lt;br /&gt;
; hambarout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1972 - Hambar&lt;br /&gt;
def validare(dim_n1, dim_m1, lista_pomi1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if dim_n1 &amp;lt; 1 or dim_n1 &amp;gt; 1000 or dim_m1 &amp;lt; 1 or dim_m1 &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for pom in lista_pomi1:&lt;br /&gt;
        if pom[0] &amp;lt; 1 or pom[0] &amp;gt; dim_n1 or pom[1] &amp;lt; 1 or pom[1] &amp;gt; dim_n1:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def arie_maxima(dim_n1, lista_pomi1):                     # functia de rezolvare&lt;br /&gt;
    matrice = [[0] * dim_n1 for _ in range(dim_n1)]&lt;br /&gt;
    for pom in lista_pomi1:&lt;br /&gt;
        matrice[pom[0]-1][pom[1]-1] = 1&lt;br /&gt;
&lt;br /&gt;
    dp = [[0] * dim_n1 for _ in range(dim_n1)]&lt;br /&gt;
    max_area = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(dim_n1):&lt;br /&gt;
        for j in range(dim_n1):&lt;br /&gt;
            if matrice[i][j] == 0:&lt;br /&gt;
                dp[i][j] = dp[i-1][j] + 1 if i &amp;gt; 0 else 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(dim_n1):&lt;br /&gt;
        for j in range(dim_n1):&lt;br /&gt;
            width = dp[i][j]&lt;br /&gt;
            for k in range(i, -1, -1):&lt;br /&gt;
                width = min(width, dp[k][j])&lt;br /&gt;
                max_area = max(max_area, width * (i-k+1))&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(str(max_area))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;hambarin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;hambarout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        dim_n, dim_m = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        lista_pomi = [list(map(int, fisier_intrare.readline().split())) for _ in range(dim_m)]&lt;br /&gt;
&lt;br /&gt;
        validare(dim_n, dim_m, lista_pomi)                 # apelul functiei de validare&lt;br /&gt;
        arie_maxima(dim_n, lista_pomi)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1351_-_Nano&amp;diff=8779</id>
		<title>1351 - Nano</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1351_-_Nano&amp;diff=8779"/>
		<updated>2024-01-02T17:47:22Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: În lumea lui Nano totul se construiește la nivel atomic. Știința a ajuns așa departe încât poate construi ”plăci” dreptunghiulare de atomi în care aceștia sunt aliniați perfect, pe un singur strat, formând un rastru. Nano dorește să comande la o firmă plăci pătrate de dimensiuni mari. Dimensiunile sunt atât de mari încât numărul de atomi dintr-o placă poate să fie scris cu până la 500 cifre. Firma i-a dat o listă cu bucățile de material de care...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;În lumea lui Nano totul se construiește la nivel atomic. Știința a ajuns așa departe încât poate construi ”plăci” dreptunghiulare de atomi în care aceștia sunt aliniați perfect, pe un singur strat, formând un rastru. Nano dorește să comande la o firmă plăci pătrate de dimensiuni mari. Dimensiunile sunt atât de mari încât numărul de atomi dintr-o placă poate să fie scris cu până la 500 cifre. Firma i-a dat o listă cu bucățile de material de care dispune, pentru fiecare bucată fiind cunoscut numărul de atomi componenți, urmând ca Nano să aleagă doar acele bucăți din care se pot construi plăci pătrate.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieți un program care citind numărul de atomi ai fiecărei bucăți de material din fișierul &#039;&#039;&#039;nanoin.txt&#039;&#039;&#039; scrie în fișierul &#039;&#039;&#039;nanoout.txt&#039;&#039;&#039; doar bucățile de material din care se pot face plăcile dorite de Nano.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;nanoin.txt&#039;&#039;&#039; se află numărul natural &#039;&#039;&#039;n&#039;&#039;&#039; ce reprezintă numărul de bucăți de material, iar pe următoarele &#039;&#039;&#039;2*n&#039;&#039;&#039; rânduri perechi de numere &#039;&#039;&#039;x y&#039;&#039;&#039;: &#039;&#039;&#039;x&#039;&#039;&#039; reprezentând numărul de cifre a lui &#039;&#039;&#039;y&#039;&#039;&#039;, &#039;&#039;&#039;y&#039;&#039;&#039; fiind numărul de atomi dintr-o bucată de material.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Se vor scrie în fișierul &#039;&#039;&#039;nanoout.txt&#039;&#039;&#039; acele valori &#039;&#039;&#039;y&#039;&#039;&#039; din care se pot construi plăci pătrate.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt; n &amp;lt; 50&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; x &amp;lt; 501&#039;&#039;&#039;&lt;br /&gt;
* În fișier se află cel puțin o bucată de material ce respectă cerințele lui Nano&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; nanoin.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 2&lt;br /&gt;
: 39&lt;br /&gt;
: 3&lt;br /&gt;
: 100&lt;br /&gt;
: 11&lt;br /&gt;
: 15241383936&lt;br /&gt;
; nanoout.txt&lt;br /&gt;
:  Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 100&lt;br /&gt;
: 15241383936&lt;br /&gt;
== Explicație ==&lt;br /&gt;
În fişierul &#039;&#039;&#039;nanoin.txt&#039;&#039;&#039; există &#039;&#039;&#039;3&#039;&#039;&#039; numere, primul având două cifre, al doilea trei cifre şi ultimul &#039;&#039;&#039;11&#039;&#039;&#039; cifre. Din bucata cu &#039;&#039;&#039;100&#039;&#039;&#039; atomi se poate face o placă pătrată de latură &#039;&#039;&#039;10&#039;&#039;&#039; iar din bucata de dimensiune &#039;&#039;&#039;15241383936&#039;&#039;&#039; se obține o placă de latură &#039;&#039;&#039;123456&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; nanoin.txt&lt;br /&gt;
: 51&lt;br /&gt;
: 1&lt;br /&gt;
: 2&lt;br /&gt;
: 1&lt;br /&gt;
: 3&lt;br /&gt;
; nanoout.txt&lt;br /&gt;
:  Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1351 - Nano&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_patrat_perfect(n):&lt;br /&gt;
    radacina = math.isqrt(n)&lt;br /&gt;
    return radacina * radacina == n&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(numere_validare, fisier_iesire_validare):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(numere_validare) &amp;gt; 50:&lt;br /&gt;
        fisier_iesire_validare.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        exit(0)&lt;br /&gt;
    for numar in numere_validare:&lt;br /&gt;
        if len(str(numar)) &amp;gt; 500:    # fiecare numar trebuie sa aiba mai putin de 500 de cifre&lt;br /&gt;
            fisier_iesire_validare.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
            exit(0)&lt;br /&gt;
    fisier_iesire_validare.write(&amp;quot;Datele introduse corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def scrie_bucati_patrate(numere_scriere, fisier_iesire_scriere):&lt;br /&gt;
    for numar in numere_scriere:&lt;br /&gt;
        if este_patrat_perfect(numar):&lt;br /&gt;
            fisier_iesire_scriere.write(str(numar) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citeste_date_intrare():&lt;br /&gt;
    with open(&#039;nanoin.txt&#039;, &#039;r&#039;) as fisier_intrare_citire:&lt;br /&gt;
        n_citire = int(fisier_intrare_citire.readline())&lt;br /&gt;
        numere_citire = []&lt;br /&gt;
        for _ in range(n_citire):&lt;br /&gt;
            fisier_intrare_citire.readline()  # citim si ignoram numarul de cifre&lt;br /&gt;
            linie = fisier_intrare_citire.readline()&lt;br /&gt;
            if not linie:  # daca am ajuns la sfarsitul fisierului sau exista o linie goala, iesim din bucla&lt;br /&gt;
                break&lt;br /&gt;
            numere_citire.append(int(linie))  # citim numarul&lt;br /&gt;
    return n_citire, numere_citire&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    n_main, numere_main = citeste_date_intrare()&lt;br /&gt;
    with open(&#039;nanoout.txt&#039;, &#039;w&#039;) as fisier_iesire_main:&lt;br /&gt;
        validare(numere_main, fisier_iesire_main)  # validam datele de intrare&lt;br /&gt;
        scrie_bucati_patrate(numere_main, fisier_iesire_main)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2106_-_Armonica&amp;diff=8622</id>
		<title>2106 - Armonica</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2106_-_Armonica&amp;diff=8622"/>
		<updated>2023-12-28T19:35:14Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: Spunem că trei numere &amp;#039;&amp;#039;&amp;#039;a b c&amp;#039;&amp;#039;&amp;#039; sunt în progresie armonică dacă &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; este media armonică a numerelor &amp;#039;&amp;#039;&amp;#039;a&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039;, adică &amp;#039;&amp;#039;&amp;#039;b=2/1a+1c=2⋅a⋅c/a+c&amp;#039;&amp;#039;&amp;#039; == Cerința == Cunoscând un număr natural &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039; să se determine toate perechile de numere naturale &amp;#039;&amp;#039;&amp;#039;(a,c)&amp;#039;&amp;#039;&amp;#039; pentru care &amp;#039;&amp;#039;&amp;#039;a b c&amp;#039;&amp;#039;&amp;#039; sunt în progresie armonică. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;armonicain.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;b&amp;#039;&amp;#039;&amp;#039;. == Date de ieșire == Fișierul de...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Spunem că trei numere &#039;&#039;&#039;a b c&#039;&#039;&#039; sunt în progresie armonică dacă &#039;&#039;&#039;b&#039;&#039;&#039; este media armonică a numerelor &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;c&#039;&#039;&#039;, adică&lt;br /&gt;
&#039;&#039;&#039;b=2/1a+1c=2⋅a⋅c/a+c&#039;&#039;&#039;&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând un număr natural &#039;&#039;&#039;b&#039;&#039;&#039; să se determine toate perechile de numere naturale &#039;&#039;&#039;(a,c)&#039;&#039;&#039; pentru care &#039;&#039;&#039;a b c&#039;&#039;&#039; sunt în progresie armonică.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;armonicain.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;b&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;armonicaout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, reprezentând numărul de perechi de numere naturale &#039;&#039;&#039;(a,c)&#039;&#039;&#039; pentru care &#039;&#039;&#039;b&#039;&#039;&#039; este media armonică. Pe următoarele linii se vor afișa perechile de numere cerute. Astfel fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii vor conține câte două numere &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;c&#039;&#039;&#039; separate printr-un spațiu cu semnificația că &#039;&#039;&#039;b&#039;&#039;&#039; este medie armonică a numerelor &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;c&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ b ≤ 1 000 000 000&#039;&#039;&#039;;&lt;br /&gt;
* Pentru teste în valoare de 40 de puncte avem &#039;&#039;&#039;b ≤ 1 000 000&#039;&#039;&#039;;&lt;br /&gt;
* Perechile de numere din fișierul de ieșire pot fi afișate în orice ordine;&lt;br /&gt;
* Dacă &#039;&#039;&#039;b&#039;&#039;&#039; este medie armonică între două numere diferite &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;c&#039;&#039;&#039; atunci perechile &#039;&#039;&#039;(a,b)&#039;&#039;&#039; și &#039;&#039;&#039;(c,a)&#039;&#039;&#039; sunt considerate soluții distincte.&lt;br /&gt;
* În concurs s-au acordat 10 puncte din oficiu. Pe site se acordă 10 puncte pentru exemplu.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; armonicain.txt&lt;br /&gt;
: 3&lt;br /&gt;
; armonicaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 6&lt;br /&gt;
: 6 2&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Numărul &#039;&#039;&#039;3&#039;&#039;&#039; este medie armonică a numerelor &#039;&#039;&#039;3&#039;&#039;&#039; și &#039;&#039;&#039;3&#039;&#039;&#039;. Avem progresia armonică &#039;&#039;&#039;(3,3,3)&#039;&#039;&#039;&lt;br /&gt;
Numărul &#039;&#039;&#039;3&#039;&#039;&#039; este medie armonică a numerelor &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;6&#039;&#039;&#039;. Avem progresiile armonice &#039;&#039;&#039;(2,3,6)&#039;&#039;&#039; și &#039;&#039;&#039;(6,3,2)&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; armonicain.txt&lt;br /&gt;
: 1000000001&lt;br /&gt;
; armonicaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2106 - Armonica&lt;br /&gt;
def validare(valoaree_b):           # functia de validare a datelor de intrare&lt;br /&gt;
    if valoaree_b &amp;lt; 1 or valoaree_b &amp;gt; 1000000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def progresie_armonica(valoaree_b):                     # functia de rezolvare&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    for valoaree_a in range(1, valoaree_b + 1):&lt;br /&gt;
        valoaree_c = (valoaree_a * valoaree_b) / (2 * valoaree_a - valoaree_b)&lt;br /&gt;
        if valoaree_c.is_integer() and valoaree_c &amp;gt;= valoaree_a:&lt;br /&gt;
            rezultat.append((valoaree_a, int(valoaree_c)))&lt;br /&gt;
            if valoaree_a != valoaree_c:  # Daca a si c sunt diferite, adaugam si perechea (c, a)&lt;br /&gt;
                rezultat.append((int(valoaree_c), valoaree_a))&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;armonicain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;armonicaout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        valoare_b = int(fisier_intrare.readline())      # citirea datelor de intrare&lt;br /&gt;
&lt;br /&gt;
        validare(valoare_b)                 # apelul functiei de validare&lt;br /&gt;
        rezultate = progresie_armonica(valoare_b)  # apelul functiei de rezolvare&lt;br /&gt;
        rezultate.sort(key=lambda x: x[0] + x[1])  # Sortam solutiile in functie de suma a + c&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{len(rezultate)}\n&amp;quot;)&lt;br /&gt;
        for valoare_a, valoare_c in rezultate:&lt;br /&gt;
            fisier_iesire.write(f&amp;quot;{valoare_a} {valoare_c}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2597_-_PermutarePow&amp;diff=8621</id>
		<title>2597 - PermutarePow</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2597_-_PermutarePow&amp;diff=8621"/>
		<updated>2023-12-28T18:55:20Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Fie &#039;&#039;&#039;∆&#039;&#039;&#039; o permutare de gradul &#039;&#039;&#039;n&#039;&#039;&#039;. Se cere să se calculeze perioada principală a funcției &#039;&#039;&#039;f(x)&#039;&#039;&#039; = &#039;&#039;&#039;∆^x&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;permutarepowin.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 distincte separate prin spații, reprezentând valorile permutării &#039;&#039;&#039;∆&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;permutarepowout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;P&#039;&#039;&#039;, reprezentând perioada principală a funcției &#039;&#039;&#039;f&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
* Numerele de pe a doua linie vor aparține intervalului &#039;&#039;&#039;[1,n]&#039;&#039;&#039;&lt;br /&gt;
* Despre permutări&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; permutarepowin.txt&lt;br /&gt;
: 4&lt;br /&gt;
: 3 4 2 1&lt;br /&gt;
; permutarepowout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se observă că &#039;&#039;&#039;∆&#039;&#039;&#039; = &#039;&#039;&#039;∆^5&#039;&#039;&#039;, deci perioada principală este &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; permutarepowin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 6&lt;br /&gt;
; permutarepowout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2597 - PermutarePow&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(permutare_intrare):           # functia de validare a datelor de intrare&lt;br /&gt;
    n_intrare = len(permutare_intrare)&lt;br /&gt;
    if n_intrare &amp;lt; 1 or n_intrare &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in permutare_intrare:&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; n_intrare:    # fiecare numar trebuie sa fie intre 1 si n&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def perioada_principala(permutare_intrare):&lt;br /&gt;
    n_intrare = len(permutare_intrare)&lt;br /&gt;
    vizitat = [False] * n_intrare&lt;br /&gt;
    cicluri = []&lt;br /&gt;
&lt;br /&gt;
    for i in range(n_intrare):&lt;br /&gt;
        if not vizitat[i]:&lt;br /&gt;
            ciclu = 0&lt;br /&gt;
            j = i&lt;br /&gt;
            while not vizitat[j]:&lt;br /&gt;
                vizitat[j] = True&lt;br /&gt;
                ciclu += 1&lt;br /&gt;
                j = permutare_intrare[j] - 1&lt;br /&gt;
            cicluri.append(ciclu)&lt;br /&gt;
&lt;br /&gt;
    p_curent_local = cicluri[0]&lt;br /&gt;
    for i in range(1, len(cicluri)):&lt;br /&gt;
        p_curent_local = (p_curent_local * cicluri[i]) // math.gcd(p_curent_local, cicluri[i])&lt;br /&gt;
&lt;br /&gt;
    return p_curent_local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;permutarepowin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;permutarepowout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(fisier_intrare.readline())&lt;br /&gt;
        permutare = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(permutare)                 # apelul functiei de validare&lt;br /&gt;
        p_curent = perioada_principala(permutare)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        fisier_iesire.write(str(p_curent))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2597_-_PermutarePow&amp;diff=8620</id>
		<title>2597 - PermutarePow</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2597_-_PermutarePow&amp;diff=8620"/>
		<updated>2023-12-28T18:54:01Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Fie &amp;#039;&amp;#039;&amp;#039;∆&amp;#039;&amp;#039;&amp;#039; o permutare de gradul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Se cere să se calculeze perioada principală a funcției &amp;#039;&amp;#039;&amp;#039;f(x)&amp;#039;&amp;#039;&amp;#039; = &amp;#039;&amp;#039;&amp;#039;∆^x&amp;#039;&amp;#039;&amp;#039;. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;permutarepowin.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, iar pe a doua linie &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; numere naturale distincte separate prin spații, reprezentând valorile permutării &amp;#039;&amp;#039;&amp;#039;∆&amp;#039;&amp;#039;&amp;#039;. == Date de ieșire == Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;permutarepowout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie număru...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Fie &#039;&#039;&#039;∆&#039;&#039;&#039; o permutare de gradul &#039;&#039;&#039;n&#039;&#039;&#039;. Se cere să se calculeze perioada principală a funcției &#039;&#039;&#039;f(x)&#039;&#039;&#039; = &#039;&#039;&#039;∆^x&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;permutarepowin.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 distincte separate prin spații, reprezentând valorile permutării &#039;&#039;&#039;∆&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;permutarepowout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;P&#039;&#039;&#039;, reprezentând perioada principală a funcției &#039;&#039;&#039;f&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
* Numerele de pe a doua linie vor aparține intervalului &#039;&#039;&#039;[1,n]&#039;&#039;&#039;&lt;br /&gt;
* Despre permutări&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; permutarepowin.txt&lt;br /&gt;
: 4&lt;br /&gt;
: 3 4 2 1&lt;br /&gt;
; permutarepowout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Se observă că &#039;&#039;&#039;∆&#039;&#039;&#039; = &#039;&#039;&#039;∆^5&#039;&#039;&#039;, deci perioada principală este &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; permutarepowin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 6&lt;br /&gt;
; permutarepowout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2597 - PermutarePow&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(permutare_intrare):           # functia de validare a datelor de intrare&lt;br /&gt;
    n_intrare = len(permutare_intrare)&lt;br /&gt;
    if n_intrare &amp;lt; 1 or n_intrare &amp;gt; 1000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in permutare_intrare:&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; n_intrare:    # fiecare numar trebuie sa fie intre 1 si n&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def perioada_principala(permutare_intrare):&lt;br /&gt;
    n_intrare = len(permutare_intrare)&lt;br /&gt;
    vizitat = [False] * n_intrare&lt;br /&gt;
    cicluri = []&lt;br /&gt;
&lt;br /&gt;
    for i in range(n_intrare):&lt;br /&gt;
        if not vizitat[i]:&lt;br /&gt;
            ciclu = 0&lt;br /&gt;
            j = i&lt;br /&gt;
            while not vizitat[j]:&lt;br /&gt;
                vizitat[j] = True&lt;br /&gt;
                ciclu += 1&lt;br /&gt;
                j = permutare_intrare[j] - 1&lt;br /&gt;
            cicluri.append(ciclu)&lt;br /&gt;
&lt;br /&gt;
    p_curent_local = cicluri[0]&lt;br /&gt;
    for i in range(1, len(cicluri)):&lt;br /&gt;
        p_curent_local = (p_curent_local * cicluri[i]) // math.gcd(p_curent_local, cicluri[i])&lt;br /&gt;
&lt;br /&gt;
    return p_curent_local&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;permutarepowin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;permutarepowout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3394_-_Mere_1&amp;diff=7949</id>
		<title>3394 - Mere 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3394_-_Mere_1&amp;diff=7949"/>
		<updated>2023-12-12T20:01:42Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Scrieţi un program care să găsească numărul de mere culese de fiecare dintre cei &amp;#039;&amp;#039;&amp;#039;K&amp;#039;&amp;#039;&amp;#039; prieteni selectați de Cosmin. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;merein.txt&amp;#039;&amp;#039;&amp;#039; conține: - Pe prima linie, &amp;#039;&amp;#039;&amp;#039;N T K&amp;#039;&amp;#039;&amp;#039;, trei numere întregi reprezentând numărul de prieteni, numărul de zile în care se vor culege mere și numărul de întrebări ale lui Cosmin. - Pe următoarele &amp;#039;&amp;#039;&amp;#039;T&amp;#039;&amp;#039;&amp;#039; linii, câte două numere întregi, separate printr-un spațiu, &amp;#039;&amp;#039;&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Scrieţi un program care să găsească numărul de mere culese de fiecare dintre cei &#039;&#039;&#039;K&#039;&#039;&#039; prieteni selectați de Cosmin.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;merein.txt&#039;&#039;&#039; conține:&lt;br /&gt;
- Pe prima linie, &#039;&#039;&#039;N T K&#039;&#039;&#039;, trei numere întregi reprezentând numărul de prieteni, numărul de zile în care se vor culege mere și numărul de întrebări ale lui Cosmin.&lt;br /&gt;
- Pe următoarele &#039;&#039;&#039;T&#039;&#039;&#039; linii, câte două numere întregi, separate printr-un spațiu, &#039;&#039;&#039;Xi&#039;&#039;&#039; și &#039;&#039;&#039;Yi&#039;&#039;&#039;, reprezentând indicele prietenul ce va intra primul în grădina, respectiv numărul de mere ce vor fi culese în ziua &#039;&#039;&#039;Ti&#039;&#039;&#039;.&lt;br /&gt;
- Pe ultima linie, &#039;&#039;&#039;K&#039;&#039;&#039; numere întregi, &#039;&#039;&#039;Qi&#039;&#039;&#039;, reprezentând indicii prietenilor lui Cosmin, pentru care se dorește aflarea numărului de mere culese.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;mereout.txt&#039;&#039;&#039; va conţine &#039;&#039;&#039;K&#039;&#039;&#039; numere întregi, pe o singură linie, separate printr-un spațiu, reprezentând răspunsurile la cele &#039;&#039;&#039;K&#039;&#039;&#039; întrebări.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ Xi ≤ N ≤ 10.000.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ T ≤ 200.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ K ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ Yi ≤ 1.000.000&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de 30 puncte: &#039;&#039;&#039;1 ≤ Xi ≤ N ≤ 100, 1 ≤ T ≤ 100, 1 ≤ K ≤ 100, 1 ≤ Yi ≤ 1.000&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de 50 puncte: &#039;&#039;&#039;1 ≤ Xi ≤ N ≤ 200.000, 1 ≤ T ≤ 10.000, 1 ≤ K ≤ 10.000&#039;&#039;&#039;&lt;br /&gt;
* Pentru teste în valoare de 70 puncte: &#039;&#039;&#039;1 ≤ Xi ≤ N ≤ 1.000.000, 1 ≤ T ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; merein.txt&lt;br /&gt;
: 5 3 4&lt;br /&gt;
: 1 2&lt;br /&gt;
: 3 5&lt;br /&gt;
: 2 7&lt;br /&gt;
: 2 4 1 2&lt;br /&gt;
; mereout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4 2 3 4&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;5&#039;&#039;&#039; persoane vor culege mere timp de &#039;&#039;&#039;3&#039;&#039;&#039; zile, astfel:&lt;br /&gt;
În prima zi, vor culege &#039;&#039;&#039;2&#039;&#039;&#039; mere persoanele cu indicii &#039;&#039;&#039;1&#039;&#039;&#039; și &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
În a doua zi, vor culege &#039;&#039;&#039;5&#039;&#039;&#039; mere persoanele cu indicii &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;4&#039;&#039;&#039;, &#039;&#039;&#039;5&#039;&#039;&#039;, &#039;&#039;&#039;1&#039;&#039;&#039; și &#039;&#039;&#039;2&#039;&#039;&#039;&lt;br /&gt;
În a treia zi, vor culege &#039;&#039;&#039;7&#039;&#039;&#039; mere persoanele cu indicii &#039;&#039;&#039;2&#039;&#039;&#039;, &#039;&#039;&#039;3&#039;&#039;&#039;, &#039;&#039;&#039;4&#039;&#039;&#039;, &#039;&#039;&#039;5&#039;&#039;&#039;, &#039;&#039;&#039;1&#039;&#039;&#039;, &#039;&#039;&#039;2&#039;&#039;&#039;, &#039;&#039;&#039;3&#039;&#039;&#039;.&lt;br /&gt;
Așadar, numărul de mere culese de fiecare persoană de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;N&#039;&#039;&#039; este: &#039;&#039;&#039;1 -&amp;gt; 3&#039;&#039;&#039;, &#039;&#039;&#039;2 -&amp;gt; 4&#039;&#039;&#039;, &#039;&#039;&#039;3 -&amp;gt; 3&#039;&#039;&#039;, &#039;&#039;&#039;4 -&amp;gt; 2&#039;&#039;&#039;, &#039;&#039;&#039;5 -&amp;gt; 2&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; merein.txt&lt;br /&gt;
: 6 3 4&lt;br /&gt;
: 1 2&lt;br /&gt;
: 3 5&lt;br /&gt;
: 2 7&lt;br /&gt;
: 2 4 1 7&lt;br /&gt;
; mereout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3394 - Mere 1&lt;br /&gt;
def validare(n_validare, t_validare, k_validare, zile_validare, intrebari_validare, fisier):&lt;br /&gt;
    # Verificam daca datele de intrare respecta restrictiile impuse&lt;br /&gt;
    if (n_validare &amp;lt; 1 or n_validare &amp;gt; 10000000 or t_validare &amp;lt; 1 or t_validare &amp;gt; 200000 or&lt;br /&gt;
            k_validare &amp;lt; 1 or k_validare &amp;gt; 100000):&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for zi in zile_validare:&lt;br /&gt;
        if zi[0] &amp;lt; 1 or zi[0] &amp;gt; n_validare or zi[1] &amp;lt; 1 or zi[1] &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    for intrebare in intrebari_validare:&lt;br /&gt;
        if intrebare &amp;lt; 1 or intrebare &amp;gt; n_validare:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    # Daca datele de intrare sunt valide, afisam un mesaj corespunzator&lt;br /&gt;
    fisier.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mere_culese(n_culese, zile_culese, intrebari_culese, fisier):&lt;br /&gt;
    # Initializam un vector de zero-uri de lungimea numarului de prieteni plus unu&lt;br /&gt;
    mere = [0] * (n_culese + 1)&lt;br /&gt;
    # Parcurgem fiecare zi&lt;br /&gt;
    for zi in zile_culese:&lt;br /&gt;
        # Stabilim indicele prietenului care incepe culesul&lt;br /&gt;
        idx = zi[0]&lt;br /&gt;
        # Parcurgem numarul de mere culese in ziua respectiva&lt;br /&gt;
        for _ in range(zi[1]):&lt;br /&gt;
            # Adaugam un mar la prietenul cu indicele idx&lt;br /&gt;
            mere[idx] += 1&lt;br /&gt;
            idx += 1&lt;br /&gt;
            if idx &amp;gt; n_culese:&lt;br /&gt;
                idx = 1&lt;br /&gt;
    for intrebare in intrebari_culese:&lt;br /&gt;
        fisier.write(str(mere[intrebare]) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;merein.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    with open(&amp;quot;mereout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fisier_iesire:&lt;br /&gt;
        try:&lt;br /&gt;
            # Citim datele de intrare&lt;br /&gt;
            n, t, k = map(int, fisier_intrare.readline().split())&lt;br /&gt;
            zile = [list(map(int, fisier_intrare.readline().split())) for _ in range(t)]&lt;br /&gt;
            intrebari = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
            # Validam datele de intrare&lt;br /&gt;
            validare(n, t, k, zile, intrebari, fisier_iesire)&lt;br /&gt;
            # Rezolvam problema&lt;br /&gt;
            mere_culese(n, zile, intrebari, fisier_iesire)&lt;br /&gt;
        # Tratam eventualele erori&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        except IndexError:&lt;br /&gt;
            fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    fisier_intrare.close()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1594_-_Maraton&amp;diff=7940</id>
		<title>1594 - Maraton</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1594_-_Maraton&amp;diff=7940"/>
		<updated>2023-12-12T19:17:01Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Ajutați-l pe Costy să răspundă la cele &amp;#039;&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;&amp;#039; întrebări. == Date de intrare == Fișierul &amp;#039;&amp;#039;&amp;#039;maratonin.txt&amp;#039;&amp;#039;&amp;#039; conține: * pe prima linie numărul &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039;, reprezentând numărul de maratoniști; * pe următoarele &amp;#039;&amp;#039;&amp;#039;N&amp;#039;&amp;#039;&amp;#039; linii, câte &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; numere, &amp;#039;&amp;#039;&amp;#039;Xi Yi&amp;#039;&amp;#039;&amp;#039;, reprezentând distanța fată de linia de sosire și viteza fiecărui maratonist; * pe următoarea linie, numărul &amp;#039;&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;&amp;#039; reprezentând numărul de întrebări; * pe următoarele &amp;#039;&amp;#039;&amp;#039;Q&amp;#039;&amp;#039;&amp;#039; linii se...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Ajutați-l pe Costy să răspundă la cele &#039;&#039;&#039;Q&#039;&#039;&#039; întrebări.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;maratonin.txt&#039;&#039;&#039; conține:&lt;br /&gt;
* pe prima linie numărul &#039;&#039;&#039;N&#039;&#039;&#039;, reprezentând numărul de maratoniști;&lt;br /&gt;
* pe următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii, câte &#039;&#039;&#039;2&#039;&#039;&#039; numere, &#039;&#039;&#039;Xi Yi&#039;&#039;&#039;, reprezentând distanța fată de linia de sosire și viteza fiecărui maratonist;&lt;br /&gt;
* pe următoarea linie, numărul &#039;&#039;&#039;Q&#039;&#039;&#039; reprezentând numărul de întrebări;&lt;br /&gt;
* pe următoarele &#039;&#039;&#039;Q&#039;&#039;&#039; linii se află câte un număr &#039;&#039;&#039;Qi&#039;&#039;&#039; reprezentând întrebarea &#039;&#039;&#039;i&#039;&#039;&#039;;&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;maratonout.txt&#039;&#039;&#039; conţine:&lt;br /&gt;
* &#039;&#039;&#039;Q&#039;&#039;&#039; linii, linia &#039;&#039;&#039;i&#039;&#039;&#039; reprezentând răspunsul la întrebarea &#039;&#039;&#039;i&#039;&#039;&#039;;&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt;= N, Q, Qi, Xi &amp;lt;= 100 000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;lt;= Yi &amp;lt;= 1000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; maratonin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 100 4&lt;br /&gt;
: 12 3&lt;br /&gt;
: 101 5 &lt;br /&gt;
: 20 1&lt;br /&gt;
: 44 7&lt;br /&gt;
: 4&lt;br /&gt;
: 20&lt;br /&gt;
: 12&lt;br /&gt;
: 7&lt;br /&gt;
: 21&lt;br /&gt;
; maratonout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
: 2&lt;br /&gt;
: 2&lt;br /&gt;
: 4&lt;br /&gt;
== Explicație ==&lt;br /&gt;
* La secunda &#039;&#039;&#039;20&#039;&#039;&#039; au trecut linia de sosire maratoniștii cu indicii &#039;&#039;&#039;2, 4, 5&#039;&#039;&#039;.&lt;br /&gt;
* La secunda &#039;&#039;&#039;12&#039;&#039;&#039; au trecut linia de sosire maratoniștii cu indicii &#039;&#039;&#039;2, 5&#039;&#039;&#039;.&lt;br /&gt;
* La secunda &#039;&#039;&#039;7&#039;&#039;&#039; au trecut linia de sosire maratoniștii cu indicii &#039;&#039;&#039;2, 5&#039;&#039;&#039;.&lt;br /&gt;
* La secunda &#039;&#039;&#039;21&#039;&#039;&#039; au trecut linia de sosire maratoniștii cu indicii &#039;&#039;&#039;2, 3, 4, 5&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; maratonin.txt&lt;br /&gt;
: 6&lt;br /&gt;
: 100 4&lt;br /&gt;
: 12 3&lt;br /&gt;
: 101 5&lt;br /&gt;
: 20 1&lt;br /&gt;
: 44 7&lt;br /&gt;
: 200000 2&lt;br /&gt;
: 4&lt;br /&gt;
: 20&lt;br /&gt;
: 12&lt;br /&gt;
: 7&lt;br /&gt;
: 21&lt;br /&gt;
; maratonout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1594 - Maraton&lt;br /&gt;
def validare(n_maratonisti, lista_maratonisti, n_intrebari, lista_intrebari):  # functia de validare&lt;br /&gt;
    if n_maratonisti &amp;gt; 100000 or n_intrebari &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for distanta, viteza in lista_maratonisti:&lt;br /&gt;
        if distanta &amp;gt; 100000 or viteza &amp;gt; 1000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for intrebare in lista_intrebari:&lt;br /&gt;
        if intrebare &amp;gt; 100000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def maraton(lista_maratonisti, lista_intrebari):  # functia de rezolvare&lt;br /&gt;
    rezultate_maraton = []&lt;br /&gt;
    for intrebare in lista_intrebari:&lt;br /&gt;
        nr_maratonisti_sositi = 0&lt;br /&gt;
        for distanta, viteza in lista_maratonisti:&lt;br /&gt;
            if distanta / viteza &amp;lt;= intrebare:&lt;br /&gt;
                nr_maratonisti_sositi += 1&lt;br /&gt;
        rezultate_maraton.append(nr_maratonisti_sositi)&lt;br /&gt;
    return rezultate_maraton&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;maratonin.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;maratonout.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        nr_maratonisti = int(file_in.readline())&lt;br /&gt;
        maratonisti = []&lt;br /&gt;
        for _ in range(nr_maratonisti):&lt;br /&gt;
            x, y = map(int, file_in.readline().split())&lt;br /&gt;
            maratonisti.append((x, y))&lt;br /&gt;
&lt;br /&gt;
        nr_intrebari = int(file_in.readline())&lt;br /&gt;
        intrebari = [int(file_in.readline()) for _ in range(nr_intrebari)]&lt;br /&gt;
&lt;br /&gt;
        validare(nr_maratonisti, maratonisti, nr_intrebari, intrebari)  # apelul functiei de validare&lt;br /&gt;
        rezultate = maraton(maratonisti, intrebari)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            file_out.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3794_-_Interclas_No_Memory_1&amp;diff=7935</id>
		<title>3794 - Interclas No Memory 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3794_-_Interclas_No_Memory_1&amp;diff=7935"/>
		<updated>2023-12-12T18:54:16Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Se dau două șiruri de numere naturale, cu &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, respectiv &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; elemente, &amp;#039;&amp;#039;&amp;#039;ordonate crescător&amp;#039;&amp;#039;&amp;#039;. Să se determine al treilea șir, care să conţină, în ordine crescătoare, elementele din primele două şiruri. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;filein.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie numerele naturale &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;, respectiv &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039;, iar apoi pe a doua linie numerele primului șir, și pe a treia linie, numerele celui de-al doilea șir, eleme...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau două șiruri de numere naturale, cu &#039;&#039;&#039;n&#039;&#039;&#039;, respectiv &#039;&#039;&#039;m&#039;&#039;&#039; elemente, &#039;&#039;&#039;ordonate crescător&#039;&#039;&#039;. Să se determine al treilea șir, care să conţină, în ordine crescătoare, elementele din primele două şiruri.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;filein.txt&#039;&#039;&#039; conține pe prima linie numerele naturale &#039;&#039;&#039;n&#039;&#039;&#039;, respectiv &#039;&#039;&#039;m&#039;&#039;&#039;, iar apoi pe a doua linie numerele primului șir, și pe a treia linie, numerele celui de-al doilea șir, elementele șirurilor fiind separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;fileout.txt&#039;&#039;&#039; va conține numerele celui de-al treilea șir, separate prin spații.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n, m ≤ 100.000&#039;&#039;&#039;&lt;br /&gt;
* elementele șirului vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; filein.txt&lt;br /&gt;
: 7 8&lt;br /&gt;
: 1 3 4 6 7 8 8 &lt;br /&gt;
: 2 4 5 6 8 9 9 12&lt;br /&gt;
; fileout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1 2 3 4 4 5 6 6 7 8 8 8 9 9 12&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; filein.txt&lt;br /&gt;
: 7 8&lt;br /&gt;
: 1 3 4 6 7 8 1000000000&lt;br /&gt;
: 2 4 5 6 8 9 9 12&lt;br /&gt;
; fileout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3794 - Interclas No Memory 1&lt;br /&gt;
def validare(sir_validare1, sir_validare2):  # functia de validare a datelor de intrare&lt;br /&gt;
    if len(sir_validare1) &amp;gt; 100000 or len(sir_validare2) &amp;gt; 100000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in sir_validare1 + sir_validare2:&lt;br /&gt;
        if not isinstance(numar, int) or numar &amp;gt;= 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(sir_rezolvare1, sir_rezolvare2):  # functia de rezolvare&lt;br /&gt;
    al_treilea_sir = sorted(sir_rezolvare1 + sir_rezolvare2)&lt;br /&gt;
    fisier_iesire.write(&#039; &#039;.join(map(str, al_treilea_sir)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;filein.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;fileout.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        sir1 = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
        sir2 = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(sir1, sir2)  # apelul functiei de validare&lt;br /&gt;
        rezolvare(sir1, sir2)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3960_-_Intersectie_Siruri&amp;diff=7928</id>
		<title>3960 - Intersectie Siruri</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3960_-_Intersectie_Siruri&amp;diff=7928"/>
		<updated>2023-12-12T18:37:32Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Dându-se mai multe &amp;#039;&amp;#039;&amp;#039;șiruri crescătoare&amp;#039;&amp;#039;&amp;#039; de numere &amp;#039;&amp;#039;&amp;#039;naturale&amp;#039;&amp;#039;&amp;#039;, sfârșitul fiecarui astfel de șir fiind &amp;#039;&amp;#039;&amp;#039;marcat&amp;#039;&amp;#039;&amp;#039; de numărul &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039;, se cere să se afișeze în ordine &amp;#039;&amp;#039;&amp;#039;strict crescătoare&amp;#039;&amp;#039;&amp;#039;, numerele &amp;#039;&amp;#039;&amp;#039;comune&amp;#039;&amp;#039;&amp;#039; tuturor șirurilor. == Date de intrare == Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;intersectiein.txt&amp;#039;&amp;#039;&amp;#039; conține &amp;#039;&amp;#039;&amp;#039;numere naturale&amp;#039;&amp;#039;&amp;#039; separate printr-un spațiu, care formează &amp;#039;&amp;#039;&amp;#039;șiruri crescătoare&amp;#039;&amp;#039;&amp;#039;, fiecare astfel de șir terminându-se cu nu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Dându-se mai multe &#039;&#039;&#039;șiruri crescătoare&#039;&#039;&#039; de numere &#039;&#039;&#039;naturale&#039;&#039;&#039;, sfârșitul fiecarui astfel de șir fiind &#039;&#039;&#039;marcat&#039;&#039;&#039; de numărul &#039;&#039;&#039;0&#039;&#039;&#039;, se cere să se afișeze în ordine &#039;&#039;&#039;strict crescătoare&#039;&#039;&#039;, numerele &#039;&#039;&#039;comune&#039;&#039;&#039; tuturor șirurilor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;intersectiein.txt&#039;&#039;&#039; conține &#039;&#039;&#039;numere naturale&#039;&#039;&#039; separate printr-un spațiu, care formează &#039;&#039;&#039;șiruri crescătoare&#039;&#039;&#039;, fiecare astfel de șir terminându-se cu numărul &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;intersectieout.txt&#039;&#039;&#039; va conține în ordine &#039;&#039;&#039;strict crescătoare&#039;&#039;&#039;, numerele &#039;&#039;&#039;comune&#039;&#039;&#039; tuturor șirurilor.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* Fiecare șir conține maxim &#039;&#039;&#039;100.000&#039;&#039;&#039; de numere.&lt;br /&gt;
* Fiecare număr din șir are valori cuprinse între &#039;&#039;&#039;[1, 2^31 - 1]&#039;&#039;&#039;.&lt;br /&gt;
* În fișierul &#039;&#039;&#039;intersectiein.txt&#039;&#039;&#039;, pot fi maxim &#039;&#039;&#039;3.000.000&#039;&#039;&#039; numere.&lt;br /&gt;
* Dacă nu avem niciun număr comun se va afișa mesajul &#039;&#039;&#039;nu exista&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; intersectiein.txt&lt;br /&gt;
: 1 2 3 7 10 0 1 4 5 7 10 0 2 3 7 10 0 2 3 5 7 9 10 0&lt;br /&gt;
; intersectieout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 7 10&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Toate cele &#039;&#039;&#039;4&#039;&#039;&#039; șiruri :&lt;br /&gt;
: 1 2 3 7 10 &lt;br /&gt;
: 1 4 5 7 10&lt;br /&gt;
: 2 3 7 10 &lt;br /&gt;
: 2 3 5 7 9 10&lt;br /&gt;
au numerele &#039;&#039;&#039;7&#039;&#039;&#039; și &#039;&#039;&#039;10&#039;&#039;&#039; valori comune.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; intersectiein.txt&lt;br /&gt;
: 1 2 3 4 5 6 7 8 9 10 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 2147483648 0&lt;br /&gt;
; intersectieout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3960 - Intersectie Siruri&lt;br /&gt;
def validare(serii_val):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(serii_val) &amp;gt; 3000000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for sir in serii_val:&lt;br /&gt;
        if len(sir) &amp;gt; 100000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
        for numar_val in sir:&lt;br /&gt;
            if numar_val &amp;lt; 1 or numar_val &amp;gt; 2**31 - 1:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def intersectie(serii_int):                     # functia de rezolvare&lt;br /&gt;
    intersectie_set = set(serii_int[0])&lt;br /&gt;
    for sir in serii_int[1:]:&lt;br /&gt;
        intersectie_set &amp;amp;= set(sir)&lt;br /&gt;
&lt;br /&gt;
    if intersectie_set:&lt;br /&gt;
        fisier_iesire.write(&#039; &#039;.join(map(str, sorted(intersectie_set))))&lt;br /&gt;
    else:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;nu exista&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;intersectiein.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;intersectieout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        serii_main = []&lt;br /&gt;
        sir_curent = []&lt;br /&gt;
        for linie in fisier_intrare:&lt;br /&gt;
            for numar_str in linie.split():&lt;br /&gt;
                numar_main = int(numar_str)&lt;br /&gt;
                if numar_main == 0:&lt;br /&gt;
                    serii_main.append(sir_curent)&lt;br /&gt;
                    sir_curent = []&lt;br /&gt;
                else:&lt;br /&gt;
                    sir_curent.append(numar_main)&lt;br /&gt;
&lt;br /&gt;
        validare(serii_main)                 # apelul functiei de validare&lt;br /&gt;
        intersectie(serii_main)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3974_-_IRDDS&amp;diff=7875</id>
		<title>3974 - IRDDS</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3974_-_IRDDS&amp;diff=7875"/>
		<updated>2023-12-12T13:05:20Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: Pagină nouă: == Cerința == Se dau &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; mulţimi de &amp;#039;&amp;#039;&amp;#039;numere naturale&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;. Să se afișeze mulţimea rezultată în urma efectuării unei operații. == Date de intrare == Programul citește de la tastatură: Pe prima linie &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;&amp;#039;numere naturale&amp;#039;&amp;#039;&amp;#039; &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;, reprezentând &amp;#039;&amp;#039;&amp;#039;numărul elementelor&amp;#039;&amp;#039;&amp;#039; mulţimii &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;, respectiv &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;, urmate de unul dintre caracterele &amp;#039;&amp;#039;&amp;#039;* + - %&amp;#039;&amp;#039;&amp;#039; : * &amp;#039;&amp;#039;&amp;#039;* intersecţie A∩B&amp;#039;&amp;#039;&amp;#039;. * &amp;#039;&amp;#039;&amp;#039;+ reuniune A∪B&amp;#039;&amp;#039;&amp;#039;. * &amp;#039;&amp;#039;&amp;#039;- dife...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau &#039;&#039;&#039;2&#039;&#039;&#039; mulţimi de &#039;&#039;&#039;numere naturale&#039;&#039;&#039; &#039;&#039;&#039;A&#039;&#039;&#039; și &#039;&#039;&#039;B&#039;&#039;&#039;. Să se afișeze mulţimea rezultată în urma efectuării unei operații.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură:&lt;br /&gt;
Pe prima linie &#039;&#039;&#039;2&#039;&#039;&#039; &#039;&#039;&#039;numere naturale&#039;&#039;&#039; &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;M&#039;&#039;&#039;, reprezentând &#039;&#039;&#039;numărul elementelor&#039;&#039;&#039; mulţimii &#039;&#039;&#039;A&#039;&#039;&#039;, respectiv &#039;&#039;&#039;B&#039;&#039;&#039;, urmate de unul dintre caracterele &#039;&#039;&#039;* + - %&#039;&#039;&#039; :&lt;br /&gt;
* &#039;&#039;&#039;* intersecţie A∩B&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;+ reuniune A∪B&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;- diferența A∖B&#039;&#039;&#039;.&lt;br /&gt;
* &#039;&#039;&#039;% diferența simetrică (A∖B)∪(B∖A)&#039;&#039;&#039;.&lt;br /&gt;
Pe cea de-a &#039;&#039;&#039;2-a&#039;&#039;&#039; linie &#039;&#039;&#039;N&#039;&#039;&#039; &#039;&#039;&#039;numere naturale&#039;&#039;&#039; reprezentând elementele mulţimii &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
Pe cea de-a &#039;&#039;&#039;3-a&#039;&#039;&#039; linie &#039;&#039;&#039;M&#039;&#039;&#039; &#039;&#039;&#039;numere naturale&#039;&#039;&#039; reprezentând elementele mulţimii &#039;&#039;&#039;B&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire == &lt;br /&gt;
Programul va afișa pe ecran elementele &#039;&#039;&#039;mulţimii rezultate&#039;&#039;&#039;, &#039;&#039;&#039;ordonate crescător&#039;&#039;&#039;, în urma efectuării operaței.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ N, M ≤ 200.000&#039;&#039;&#039;&lt;br /&gt;
* elementele mulţimilor &#039;&#039;&#039;A&#039;&#039;&#039; și &#039;&#039;&#039;B&#039;&#039;&#039; vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;nu există&#039;&#039;&#039; cazul ca în urma efectuării uneia dintre operatii rezultatul să fie egal cu &#039;&#039;&#039;mulţimea vidă&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 5 5 %&lt;br /&gt;
: 4 5 6 7 8&lt;br /&gt;
: 1 2 3 4 5&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 1 2 3 6 7 8&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;({4,5,6,7,8}∖{1,2,3,4,5})∪({1,2,3,4,5}∖{4,5,6,7,8})={1,2,3,6,7,8}&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: 5 5 %&lt;br /&gt;
: 4 5 6 7 8&lt;br /&gt;
: 1 2 3 4 5000000000&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 3974 - IRDDS&lt;br /&gt;
def validare(n_validare, m_validare, a_validare, b_validare):&lt;br /&gt;
    if n_validare &amp;lt; 1 or n_validare &amp;gt; 200000 or m_validare &amp;lt; 1 or m_validare &amp;gt; 200000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in a_validare + b_validare:&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def operatie(a_operatie, b_operatie, op_operatie):&lt;br /&gt;
    if op_operatie == &#039;*&#039;:&lt;br /&gt;
        rezultat_operatie = set(a_operatie).intersection(b_operatie)&lt;br /&gt;
    elif op_operatie == &#039;+&#039;:&lt;br /&gt;
        rezultat_operatie = set(a_operatie).union(b_operatie)&lt;br /&gt;
    elif op_operatie == &#039;-&#039;:&lt;br /&gt;
        rezultat_operatie = set(a_operatie).difference(b_operatie)&lt;br /&gt;
    elif op_operatie == &#039;%&#039;:&lt;br /&gt;
        rezultat_operatie = set(a_operatie).symmetric_difference(b_operatie)&lt;br /&gt;
    else:&lt;br /&gt;
        raise ValueError(&amp;quot;Operatia nu este valida&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return sorted(list(rezultat_operatie))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    try:&lt;br /&gt;
        n_main, m_main, op_main = input(&lt;br /&gt;
            &amp;quot;Introduceti numarul de elemente din A, numarul de elemente din B si operatia &amp;quot;&lt;br /&gt;
        ).split()&lt;br /&gt;
        n_main = int(n_main)&lt;br /&gt;
        m_main = int(m_main)&lt;br /&gt;
        A_main = list(map(int, input(&amp;quot;Introduceti elementele multimii A &amp;quot;).split()))&lt;br /&gt;
        B_main = list(map(int, input(&amp;quot;Introduceti elementele multimii B &amp;quot;).split()))&lt;br /&gt;
        validare(n_main, m_main, A_main, B_main)&lt;br /&gt;
        rezultat_main = operatie(A_main, B_main, op_main)&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, rezultat_main)))&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0605_-_CRB&amp;diff=7849</id>
		<title>0605 - CRB</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0605_-_CRB&amp;diff=7849"/>
		<updated>2023-12-12T11:42:01Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
CRB are un șir cu &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale diferite. Nu știe ce să facă cu ele și le aranjează în ordine descrescătoare. Apoi observă că anumite numere se află pe aceeași poziție ca în șirul inițial. Ajutați pe CRB să determine câte elemente din șir respectă această regulă.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;crbin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații, reprezentând elementele șirului inițial.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;crbout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând numărul de elemente care ocupă aceeași poziție în șirul inițial și în cel sortat.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; crbin.txt&lt;br /&gt;
: 7&lt;br /&gt;
: 1 8 2 6 4 7 9 &lt;br /&gt;
; crbout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cele trei elemente sunt &#039;&#039;&#039;8&#039;&#039;&#039;, &#039;&#039;&#039;6&#039;&#039;&#039; și &#039;&#039;&#039;4&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; crbin.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 1000000 &lt;br /&gt;
; crbout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0605 - CRB&lt;br /&gt;
def validare(sir):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(sir) &amp;gt; 1000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in sir:&lt;br /&gt;
        if not isinstance(numar, int) or numar &amp;gt;= 1_000_000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_elemente(sir):                     # functia de rezolvare&lt;br /&gt;
    sir_sortat = sorted(sir, reverse=True)&lt;br /&gt;
&lt;br /&gt;
    numar_elemente_identice = sum(1 for i in range(len(sir)) if sir[i] == sir_sortat[i])&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(str(numar_elemente_identice))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;crbin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;crbout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(fisier_intrare.readline())      # citirea numarului se face ca sir de caractere deoarece e prea mare&lt;br /&gt;
        sir_initial = [int(numar) for numar in fisier_intrare.readline().split()]&lt;br /&gt;
&lt;br /&gt;
        validare(sir_initial)                 # apelul functiei de validare&lt;br /&gt;
        numar_elemente(sir_initial)               # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2905_-_Divizori_4&amp;diff=7799</id>
		<title>2905 - Divizori 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2905_-_Divizori_4&amp;diff=7799"/>
		<updated>2023-12-11T22:23:05Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Gigel a găsit un șir cu n numere naturale, numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039; și un număr &#039;&#039;&#039;p&#039;&#039;&#039;. Neavând chef de muncă, Gigel vă cere să rezolvați următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
a) Aflați câți divizori are numărul din șir aflat pe poziția &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
b) Afișați în ordine descrescătoare numerele din șir care au același număr de divizori ca cel aflat pe poziția &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;divizori4in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n c&#039;&#039;&#039;, unde c poate fi doar &#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;2&#039;&#039;&#039;. A doua linie conține cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale șirului. A treia linie conține numărul &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Dacă &#039;&#039;&#039;c=1&#039;&#039;&#039; se rezolvă numai cerința a). Fișierul de ieșire &#039;&#039;&#039;divizori4out.txt&#039;&#039;&#039; va conține pe prima linie numărul de divizori ai numărului aflat în șir pe poziția &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Dacă &#039;&#039;&#039;c=2&#039;&#039;&#039; se rezolvă numai cerința b). Fișierul de ieșire &#039;&#039;&#039;divizori4out.txt&#039;&#039;&#039; va conține pe prima linie, în ordine descrescătoare, numerele din șir cu același număr de divizori ca și cel aflat pe poziția &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* numerele din șir vor fi numere naturale nenule mai mici sau egale cu &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
* pentru 50% din punctaj &#039;&#039;&#039;c=1&#039;&#039;&#039;; pentru 50% din punctaj &#039;&#039;&#039;c=2&#039;&#039;&#039;;&lt;br /&gt;
* pentru &#039;&#039;&#039;c=1&#039;&#039;&#039;, &#039;&#039;&#039;1 ≤ p ≤ n ≤ 50.000&#039;&#039;&#039;&lt;br /&gt;
* pentru &#039;&#039;&#039;c=2&#039;&#039;&#039;, &#039;&#039;&#039;1 ≤ p ≤ n ≤ 50.000&#039;&#039;&#039; pentru 30% din punctaj și &#039;&#039;&#039;1 ≤ p ≤ n ≤ 10.000&#039;&#039;&#039; pentru 20% din punctaj&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; divizori4in.txt&lt;br /&gt;
: 10 1&lt;br /&gt;
: 1 5 95 23 16 39 77 74 97 57 &lt;br /&gt;
: 3&lt;br /&gt;
; divizori4out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;c=1&#039;&#039;&#039;, se rezolvă doar cerința a). Al treilea număr din șir este &#039;&#039;&#039;95&#039;&#039;&#039;, care are &#039;&#039;&#039;4&#039;&#039;&#039; divizori &#039;&#039;&#039;(1 5 19 95)&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; divizori4in.txt&lt;br /&gt;
: 10 2&lt;br /&gt;
: 1 5 95 23 16 39 77 74 97 57 &lt;br /&gt;
: 3&lt;br /&gt;
; divizori4out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 95 77 74 57 39&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;c=2&#039;&#039;&#039;, se rezolvă doar cerința b). Al treilea număr din șir este &#039;&#039;&#039;95&#039;&#039;&#039;, care are &#039;&#039;&#039;4&#039;&#039;&#039; divizori. Numerele cu &#039;&#039;&#039;4&#039;&#039;&#039; divizori din șir sunt, în ordine descrescătoare: &#039;&#039;&#039;95 77 74 57 39&#039;&#039;&#039;.&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; divizori4in.txt&lt;br /&gt;
: 10 1&lt;br /&gt;
: 1 2 3 4 5 6 7 8 9 1000000001&lt;br /&gt;
: 5&lt;br /&gt;
; divizori4out.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2905 - Divizori 4&lt;br /&gt;
def validare(serie_validare):&lt;br /&gt;
    # Verificam daca numarul de elemente din serie este mai mare decat 50_000&lt;br /&gt;
    # Daca este, aruncam o exceptie ValueError&lt;br /&gt;
    if len(serie_validare) &amp;gt; 50_000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in serie_validare:&lt;br /&gt;
        if not (1 &amp;lt;= numar &amp;lt;= 1_000_000_000):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    # Daca datele de intrare sunt valide, afisam un mesaj in fisierul de iesire&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_divizori(n_divizori):&lt;br /&gt;
    i = 1&lt;br /&gt;
    rezultat = 0&lt;br /&gt;
    # Parcurgem numerele de la 1 la radacina patrata a numarului&lt;br /&gt;
    while i * i &amp;lt;= n_divizori:&lt;br /&gt;
        # Daca numarul nu este divizor, incrementam i&lt;br /&gt;
        if n_divizori % i:&lt;br /&gt;
            i += 1&lt;br /&gt;
            continue&lt;br /&gt;
        # Daca i este divizor, il adaugam la rezultat&lt;br /&gt;
        # Daca i * i este egal cu numarul, adaugam doar o data i la rezultat&lt;br /&gt;
        # Altfel, adaugam si i si numarul / i la rezultat&lt;br /&gt;
        if i * i == n_divizori:&lt;br /&gt;
            rezultat += 1&lt;br /&gt;
        else:&lt;br /&gt;
            rezultat += 2&lt;br /&gt;
        i += 1&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def divizori4(serie_divizori4, pozitie_divizori4, cerinta_divizori4):&lt;br /&gt;
    # Luam numarul de pe pozitia data&lt;br /&gt;
    numar = serie_divizori4[pozitie_divizori4-1]&lt;br /&gt;
    # Calculam numarul de divizori ai numarului&lt;br /&gt;
    divizori_numar = numar_divizori(numar)&lt;br /&gt;
&lt;br /&gt;
    # Daca cerinta este 1, afisam numarul de divizori al numarului&lt;br /&gt;
    if cerinta_divizori4 == 1:&lt;br /&gt;
        fisier_iesire.write(str(divizori_numar))&lt;br /&gt;
    else:&lt;br /&gt;
        # Daca cerinta este 2, afisam numerele din serie care au acelasi numar de divizori ca numarul de pe pozitia data&lt;br /&gt;
        numere_cu_acelasi_nr_divizori = [x for x in serie_divizori4 if numar_divizori(x) == divizori_numar]&lt;br /&gt;
        # Sortam numerele in ordine descrescatoare&lt;br /&gt;
        numere_cu_acelasi_nr_divizori.sort(reverse=True)&lt;br /&gt;
        # Afisam numerele&lt;br /&gt;
        fisier_iesire.write(&#039; &#039;.join(map(str, numere_cu_acelasi_nr_divizori)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    # Deschidem fisierele de intrare si iesire&lt;br /&gt;
    fisier_intrare = open(&amp;quot;divizori4in.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fisier_iesire = open(&amp;quot;divizori4out.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n_main, cerinta_main = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        serie_main = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
        pozitie_main = int(fisier_intrare.readline())&lt;br /&gt;
&lt;br /&gt;
        # Validam datele de intrare&lt;br /&gt;
        validare(serie_main)&lt;br /&gt;
        # Rezolvam problema&lt;br /&gt;
        divizori4(serie_main, pozitie_main, cerinta_main)&lt;br /&gt;
&lt;br /&gt;
    # Tratam exceptiile care pot aparea&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0273_-_Ord_Sume&amp;diff=7798</id>
		<title>0273 - Ord Sume</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0273_-_Ord_Sume&amp;diff=7798"/>
		<updated>2023-12-11T21:51:02Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un şir cu &#039;&#039;&#039;n&#039;&#039;&#039; elemente, numere naturale. Să se afişeze, în ordine crescătoare, toate valorile distincte care se pot obţine ca sumă de două valori distincte din şir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;ordsumein.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale şirului dat, separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;ordsumeout.txt&#039;&#039;&#039; va conţine pe prima linie, în ordine crescătoare, toate valorile distincte care se pot obţine ca sumă de două valori distincte din şir, separate printr-un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 100&#039;&#039;&#039;&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult &#039;&#039;&#039;8&#039;&#039;&#039; cifre&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; ordsumein.txt&lt;br /&gt;
: 4&lt;br /&gt;
: 1 7 3 5&lt;br /&gt;
; ordsumeout.txt&lt;br /&gt;
Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4 6 8 10 12&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; ordsumein.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 2 123456789&lt;br /&gt;
; ordsumeout.txt&lt;br /&gt;
Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0273 - Ord Sume&lt;br /&gt;
def validare(n_validare, numere_validare):  # functia de validare a datelor de intrare&lt;br /&gt;
    if n_validare &amp;gt; 100 or n_validare &amp;lt; 1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in numere_validare:&lt;br /&gt;
        if not str(numar).isdigit() or len(str(numar)) &amp;gt; 8:  # numărul trebuie să fie cifră cu maxim 8 cifre&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_sume(n_calcul, numere_calculeaza):  # functia de rezolvare&lt;br /&gt;
    sume = {numere_calculeaza[i] + numere_calculeaza[j] for i in range(n_calcul) for j in range(i + 1, n_calcul)}&lt;br /&gt;
    fisier_iesire.write(&#039; &#039;.join(str(suma) for suma in sorted(sume)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;ordsumein.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;ordsumeout.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(fisier_intrare.readline())&lt;br /&gt;
        numere = [int(numar) for numar in fisier_intrare.readline().split()]&lt;br /&gt;
&lt;br /&gt;
        validare(n, numere)  # apelul functiei de validare&lt;br /&gt;
        calculeaza_sume(n, numere)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4106_-_Half_Sort_4&amp;diff=7468</id>
		<title>4106 - Half Sort 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4106_-_Half_Sort_4&amp;diff=7468"/>
		<updated>2023-11-24T18:34:34Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se ordoneze crescător subșirul format din elementele negative din vector și descrescător subșirul format din elementele pozitive. Indicii subșirului format din elementele negative nu se vor schimba. La fel și indicii subșirului format din elementele pozitive.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;halfsort4in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039; si pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi nenule separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;halfsort4out.txt&#039;&#039;&#039; va conţine pe prima linie cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &#039;&#039;&#039;2^30&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; halfsort4in.txt&lt;br /&gt;
: 6&lt;br /&gt;
: 2 -1 9 -4 5 7&lt;br /&gt;
; halfsort4out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 9 -4 7 -1 5 2&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; halfsort4in.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 0&lt;br /&gt;
; halfsort4out.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 4106 - Half Sort 4&lt;br /&gt;
def validare(numar_elemente, vector_intrare):           # functia de validare a datelor de intrare&lt;br /&gt;
&lt;br /&gt;
    if numar_elemente &amp;gt; 1000 or numar_elemente &amp;lt; 0:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in vector_intrare:&lt;br /&gt;
        if abs(numar) &amp;gt;= 2**30 or numar == 0:    # fiecare numar trebuie sa fie mai mic decat 2^30 si nenul&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sorteaza_elemente(vector_intrare):                     # functia de rezolvare&lt;br /&gt;
    # Creăm două liste: una pentru numerele negative și una pentru cele pozitive&lt;br /&gt;
    neg = sorted((x for x in vector_intrare if x &amp;lt; 0), reverse=True)&lt;br /&gt;
    pos = sorted((x for x in vector_intrare if x &amp;gt; 0))&lt;br /&gt;
&lt;br /&gt;
    # Reconstruim lista inițială. Pentru fiecare element din lista inițială:&lt;br /&gt;
    # - dacă este negativ, adăugăm cel mai mic număr negativ rămas (și îl eliminăm din listă)&lt;br /&gt;
    # - dacă este pozitiv, adăugăm cel mai mare număr pozitiv rămas (și îl eliminăm din listă)&lt;br /&gt;
    return [neg.pop() if x &amp;lt; 0 else pos.pop() for x in vector_intrare]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;halfsort4in.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;halfsort4out.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())      # citirea numarului de elemente&lt;br /&gt;
        vector = list(map(int, file_in.readline().split()))  # citirea vectorului&lt;br /&gt;
&lt;br /&gt;
        validare(n, vector)                 # apelul functiei de validare&lt;br /&gt;
        vector = sorteaza_elemente(vector)               # apelul functiei de rezolvare&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, vector)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4102_-_Half_Sort_3&amp;diff=7467</id>
		<title>4102 - Half Sort 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4102_-_Half_Sort_3&amp;diff=7467"/>
		<updated>2023-11-24T18:22:21Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se ordoneze crescător subșirul format din elementele pare din vector și descrescător subșirul format din elementele impare. Indicii subșirului format din elementele pare nu se vor schimba. La fel și indicii subșirului format din elementele impare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;halfsort3in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039; si pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;halfsort3out.txt&#039;&#039;&#039; va conţine pe prima linie cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; n ≤ 1000&#039;&#039;&#039;&lt;br /&gt;
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &#039;&#039;&#039;2^30&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; halfsort3in.txt&lt;br /&gt;
: 6&lt;br /&gt;
: 8 1 9 4 5 7&lt;br /&gt;
; halfsort3out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4 9 7 8 5 1&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; halfsort3in.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 2**30&lt;br /&gt;
; halfsort3out.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 4102 - Half Sort 3&lt;br /&gt;
def validare(numar_elemente, vector_intrare):  # functia de validare a datelor de intrare&lt;br /&gt;
&lt;br /&gt;
    if numar_elemente &amp;gt; 1000 or numar_elemente &amp;lt; 0:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in vector_intrare:&lt;br /&gt;
        if abs(numar) &amp;gt;= 2 ** 30:  # fiecare numar trebuie sa fie mai mic decat 2^30&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sorteaza_elemente(numar_elemente, vector_intrare):  # functia de rezolvare&lt;br /&gt;
    # Creăm două liste: una cu elementele pare și una cu elementele impare din vector&lt;br /&gt;
    # Folosim funcția sorted pentru a sorta elementele în funcție de valoarea lor&lt;br /&gt;
    pare = sorted((vector_intrare[i] for i in range(numar_elemente) if vector_intrare[i] % 2 == 0))&lt;br /&gt;
    impar = sorted((vector_intrare[i] for i in range(numar_elemente) if vector_intrare[i] % 2 != 0), reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm un vector gol&lt;br /&gt;
    ordonat = []&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem vectorul inițial&lt;br /&gt;
    for numar in vector_intrare:&lt;br /&gt;
        # Dacă numărul curent este par, adăugăm primul element din lista pare în vectorul ordonat&lt;br /&gt;
        # și îl eliminăm din lista pare&lt;br /&gt;
        if numar % 2 == 0:&lt;br /&gt;
            ordonat.append(pare.pop(0))&lt;br /&gt;
        # Dacă numărul curent este impar, adăugăm primul element din lista impar în vectorul ordonat&lt;br /&gt;
        # și îl eliminăm din lista impar&lt;br /&gt;
        else:&lt;br /&gt;
            ordonat.append(impar.pop(0))&lt;br /&gt;
&lt;br /&gt;
    # Întoarcem vectorul ordonat&lt;br /&gt;
    return ordonat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;halfsort3in.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;halfsort3out.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())  # citirea numarului de elemente&lt;br /&gt;
        vector = list(map(int, file_in.readline().split()))  # citirea vectorului&lt;br /&gt;
&lt;br /&gt;
        validare(n, vector)  # apelul functiei de validare&lt;br /&gt;
        vector = sorteaza_elemente(n, vector)  # apelul functiei de rezolvare&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, vector)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0164_-_Half_Sort_2&amp;diff=7466</id>
		<title>0164 - Half Sort 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0164_-_Half_Sort_2&amp;diff=7466"/>
		<updated>2023-11-24T18:11:03Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se ordoneze crescător elementele situate pe poziții pare în vector și descrescător elementele situate pe poziții impare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;halfsort2in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039; si pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi separate prin spaţii.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;halfsort2out.txt&#039;&#039;&#039; va conţine pe prima linie cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; n ≤ 100&#039;&#039;&#039;&lt;br /&gt;
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &#039;&#039;&#039;2^30&#039;&#039;&#039;&lt;br /&gt;
* indicii elementelor vectorului sunt &#039;&#039;&#039;1,2,...,n&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; halfsort2.in&lt;br /&gt;
: 6&lt;br /&gt;
: 8 9 9 4 5 7&lt;br /&gt;
; halfsort2.out&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 9 4 8 7 5 9&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; halfsort2in.txt&lt;br /&gt;
: 5&lt;br /&gt;
: 1 2 3 4 2**30&lt;br /&gt;
; halfsort2out.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 0164 - Half Sort 2&lt;br /&gt;
def validare(numar_elemente, vector_intrare):  # functia de validare a datelor de intrare&lt;br /&gt;
&lt;br /&gt;
    if numar_elemente &amp;gt; 100 or numar_elemente &amp;lt; 0:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for numar in vector_intrare:&lt;br /&gt;
        if abs(numar) &amp;gt;= 2 ** 30:  # fiecare numar trebuie sa fie mai mic decat 2^30&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sorteaza_elemente(numar_elemente, vector_intrare):  # functia de rezolvare&lt;br /&gt;
    # Creăm două liste, una pentru elementele de pe poziții pare și una pentru cele de pe poziții impare&lt;br /&gt;
    pare = sorted(vector_intrare[i] for i in range(numar_elemente) if i % 2 != 0)&lt;br /&gt;
    impar = sorted((vector_intrare[i] for i in range(numar_elemente) if i % 2 == 0), reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem vectorul și înlocuim fiecare element cu primul element din lista corespunzătoare&lt;br /&gt;
    for i in range(numar_elemente):&lt;br /&gt;
        if i % 2 == 0:&lt;br /&gt;
            vector_intrare[i] = impar.pop(0)&lt;br /&gt;
        else:&lt;br /&gt;
            vector_intrare[i] = pare.pop(0)&lt;br /&gt;
&lt;br /&gt;
    # Întoarcem vectorul modificat&lt;br /&gt;
    return vector_intrare&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;halfsort2in.txt&amp;quot;, &amp;quot;r&amp;quot;)  # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;halfsort2out.txt&amp;quot;, &amp;quot;w&amp;quot;)  # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(file_in.readline())  # citirea numarului de elemente&lt;br /&gt;
        vector = list(map(int, file_in.readline().split()))  # citirea vectorului&lt;br /&gt;
&lt;br /&gt;
        validare(n, vector)  # apelul functiei de validare&lt;br /&gt;
        vector = sorteaza_elemente(n, vector)  # apelul functiei de rezolvare&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, vector)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2384_-_Divigrup&amp;diff=7458</id>
		<title>2384 - Divigrup</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2384_-_Divigrup&amp;diff=7458"/>
		<updated>2023-11-19T20:37:43Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Un șir de numere aparțin unui divigrup dacă au același număr de divizori. Scrieți un program care citește un număr natural &#039;&#039;&#039;N&#039;&#039;&#039; și apoi &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale nenule și care determină:&lt;br /&gt;
&lt;br /&gt;
a. câte divigrupuri există în șirul de numere citite&lt;br /&gt;
b. numărul de numere din fiecare divigrup, urmat de numerele ce aparțin acestuia, în ordine crescătoare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;divigrupin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;N&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;divigrupout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul de divigrupuri ce se pot forma cu numerele de pe a doua linie a fișierului de intrare.&lt;br /&gt;
Pe următoarele &#039;&#039;&#039;K&#039;&#039;&#039; rânduri se vor descrie divigrupurile în ordine descrescătoare a numărului de divizori ai elementelor ce le aparțin, astfel încât fiecare rând va avea următoarea structură: &#039;&#039;&#039;M&#039;&#039;&#039; – numărul de elemente ale divigrupului – &#039;&#039;&#039;x1 x2 x3&#039;&#039;&#039; … &#039;&#039;&#039;xM&#039;&#039;&#039; – numerele aparținând divigrupului, în ordine crescătoare. Valorile scrise pe un rând vor fi separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 200&#039;&#039;&#039;&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1000000000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; divigrupin.txt&lt;br /&gt;
: 11&lt;br /&gt;
: 21 99 15 9 24 100 45 28 44 4 36&lt;br /&gt;
; divigrupout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 5&lt;br /&gt;
: 2 36 100&lt;br /&gt;
: 1 24&lt;br /&gt;
: 4 28 44 45 99&lt;br /&gt;
: 2 15 21&lt;br /&gt;
: 2 4 9&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; divigrupin.txt&lt;br /&gt;
: 300&lt;br /&gt;
: 21 99 15 9 24 100 45 28 44 4 36&lt;br /&gt;
; divigrupout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Există &#039;&#039;&#039;5&#039;&#039;&#039; divigrupuri care sunt descrise pe următoarele &#039;&#039;&#039;5&#039;&#039;&#039; rânduri: primul divigrup format din &#039;&#039;&#039;36&#039;&#039;&#039; și &#039;&#039;&#039;100&#039;&#039;&#039;, care au același număr maxim de divizori, următorul divigrup are un singur element, pe &#039;&#039;&#039;24&#039;&#039;&#039; care are &#039;&#039;&#039;8&#039;&#039;&#039; divizori, al treilea divigrup format din &#039;&#039;&#039;28&#039;&#039;&#039;, &#039;&#039;&#039;44&#039;&#039;&#039;, &#039;&#039;&#039;45&#039;&#039;&#039; și &#039;&#039;&#039;99&#039;&#039;&#039; are &#039;&#039;&#039;4&#039;&#039;&#039; elemente, toate având &#039;&#039;&#039;6&#039;&#039;&#039; divizori, șamd.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 2384 - Divigrup&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(numar_elemente1, lista_numere1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if numar_elemente1 &amp;lt; 1 or numar_elemente1 &amp;gt; 200:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_numar_divizori(numar):          # functia numar_divizori calculează numărul de divizori ai unui număr.&lt;br /&gt;
    numar_divizori1 = 0&lt;br /&gt;
    for i in range(1, int(math.sqrt(numar)) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            if numar / i == i:&lt;br /&gt;
                numar_divizori1 += 1&lt;br /&gt;
            else:&lt;br /&gt;
                numar_divizori1 += 2&lt;br /&gt;
    return numar_divizori1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def divigrupuri(lista_numere1):  # functia divigrupuri grupează numerele din șir în funcție de numărul lor de divizori.&lt;br /&gt;
    grupuri_divizori1 = {}&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        numar_divizori1 = calculeaza_numar_divizori(numar)&lt;br /&gt;
        if numar_divizori1 not in grupuri_divizori1:&lt;br /&gt;
            grupuri_divizori1[numar_divizori1] = []&lt;br /&gt;
        grupuri_divizori1[numar_divizori1].append(numar)&lt;br /&gt;
    for numar_divizori1 in grupuri_divizori1:&lt;br /&gt;
        grupuri_divizori1[numar_divizori1].sort()&lt;br /&gt;
    return grupuri_divizori1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;divigrupin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;divigrupout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        numar_elemente = int(file_in.readline())   # citirea numărului se face ca sir de caractere deoarece e prea mare&lt;br /&gt;
        lista_numere = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(numar_elemente, lista_numere)                 # apelul functiei de validare&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        grupuri_divizori = divigrupuri(lista_numere)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        file_out.write(str(len(grupuri_divizori)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        for numar_divizori in sorted(grupuri_divizori.keys(), reverse=True):&lt;br /&gt;
            file_out.write(str(len(grupuri_divizori[numar_divizori])) + &amp;quot; &amp;quot;)&lt;br /&gt;
            file_out.write(&amp;quot; &amp;quot;.join(map(str, grupuri_divizori[numar_divizori])) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3356_-_Alfa&amp;diff=7457</id>
		<title>3356 - Alfa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3356_-_Alfa&amp;diff=7457"/>
		<updated>2023-11-19T20:36:30Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir format din &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Se mai dă o valoare &#039;&#039;&#039;x&#039;&#039;&#039; și se garantează că șirul începe și se termină cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039;. Transformați șirul astfel:&lt;br /&gt;
* Elementele cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; rămân pe pozițiile lor;&lt;br /&gt;
* Secvențele de elemente diferile de &#039;&#039;&#039;x&#039;&#039;&#039; aflate între două poziții cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; se ordonează crescător (între aceleași două elemente cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; se vor afla aceleași elemente ca la început dar în ordine crescătoare).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;alfain.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; reprezentând dimensiunea șirului și un număr &#039;&#039;&#039;x&#039;&#039;&#039; cu semnificația de mai sus. Pe linia a doua &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;alfaout.txt&#039;&#039;&#039; conține cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale șirului în ordinea cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;2 &amp;lt;= n &amp;lt;= 1000&#039;&#039;&#039;&lt;br /&gt;
* Elementele șirului dat sunt naturale nenule formate din maximum &#039;&#039;&#039;4&#039;&#039;&#039; cifre&lt;br /&gt;
* Pentru &#039;&#039;&#039;40&#039;&#039;&#039; de puncte șirul conține doar două elemente cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; (primul și ultimul).&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; alfain.txt&lt;br /&gt;
: 10 3&lt;br /&gt;
: 3 4 1 2 3 7 9 8 3 3&lt;br /&gt;
; alfaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3 1 2 4 3 7 8 9 3 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; alfain.txt&lt;br /&gt;
: 1 3&lt;br /&gt;
: 3 4 1 2 3 7 9 8 3 3&lt;br /&gt;
; alfaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 3356 - Alfa&lt;br /&gt;
def validare(lungime_intrare1, numar_tinta1, lista_numere1):   # functia de validare a datelor de intrare&lt;br /&gt;
    if lungime_intrare1 &amp;gt; 1000 or lungime_intrare1 &amp;lt; 2:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if len(lista_numere1) != lungime_intrare1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if lista_numere1[0] != numar_tinta1 or lista_numere1[-1] != numar_tinta1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        if not (0 &amp;lt; numar &amp;lt; 10000):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    return &amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def transforma_lista(lungime_intrare1, numar_tinta1, lista_numere1):&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; lungime_intrare1:&lt;br /&gt;
        if lista_numere1[i] == numar_tinta1:&lt;br /&gt;
            j = i + 1&lt;br /&gt;
            while j &amp;lt; lungime_intrare1 and lista_numere1[j] != numar_tinta1:&lt;br /&gt;
                j += 1&lt;br /&gt;
            if j &amp;lt; lungime_intrare1:&lt;br /&gt;
                lista_numere1[i + 1:j] = sorted(lista_numere1[i + 1:j])&lt;br /&gt;
            i = j&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
    return lista_numere1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;alfain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;alfaout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        lungime_intrare, numar_tinta = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        lista_numere = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        mesaj_validare = validare(lungime_intrare, numar_tinta, lista_numere)   # apelul functiei de validare&lt;br /&gt;
        lista_numere = transforma_lista(lungime_intrare, numar_tinta, lista_numere)     # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        fisier_iesire.write(mesaj_validare + &#039;\n&#039;)&lt;br /&gt;
        fisier_iesire.write(&#039; &#039;.join(map(str, lista_numere)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3356_-_Alfa&amp;diff=7456</id>
		<title>3356 - Alfa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3356_-_Alfa&amp;diff=7456"/>
		<updated>2023-11-19T20:34:57Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir format din &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Se mai dă o valoare &#039;&#039;&#039;x&#039;&#039;&#039; și se garantează că șirul începe și se termină cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039;. Transformați șirul astfel:&lt;br /&gt;
* Elementele cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; rămân pe pozițiile lor;&lt;br /&gt;
* Secvențele de elemente diferile de &#039;&#039;&#039;x&#039;&#039;&#039; aflate între două poziții cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; se ordonează crescător (între aceleași două elemente cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; se vor afla aceleași elemente ca la început dar în ordine crescătoare).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;alfain.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; reprezentând dimensiunea șirului și un număr &#039;&#039;&#039;x&#039;&#039;&#039; cu semnificația de mai sus. Pe linia a doua &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;alfaout.txt&#039;&#039;&#039; conține cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale șirului în ordinea cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;2 &amp;lt;= n &amp;lt;= 1000&#039;&#039;&#039;&lt;br /&gt;
* Elementele șirului dat sunt naturale nenule formate din maximum &#039;&#039;&#039;4&#039;&#039;&#039; cifre&lt;br /&gt;
* Pentru &#039;&#039;&#039;40&#039;&#039;&#039; de puncte șirul conține doar două elemente cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; (primul și ultimul).&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; alfain.txt&lt;br /&gt;
: 10 3&lt;br /&gt;
: 3 4 1 2 3 7 9 8 3 3&lt;br /&gt;
; alfaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3 1 2 4 3 7 8 9 3 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; alfain.txt&lt;br /&gt;
: 1 3&lt;br /&gt;
: 3 4 1 2 3 7 9 8 3 3&lt;br /&gt;
; alfaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare(lungime_intrare1, numar_tinta1, lista_numere1):   # functia de validare a datelor de intrare&lt;br /&gt;
    if lungime_intrare1 &amp;gt; 1000 or lungime_intrare1 &amp;lt; 2:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if len(lista_numere1) != lungime_intrare1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if lista_numere1[0] != numar_tinta1 or lista_numere1[-1] != numar_tinta1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        if not (0 &amp;lt; numar &amp;lt; 10000):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    return &amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def transforma_lista(lungime_intrare1, numar_tinta1, lista_numere1):&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; lungime_intrare1:&lt;br /&gt;
        if lista_numere1[i] == numar_tinta1:&lt;br /&gt;
            j = i + 1&lt;br /&gt;
            while j &amp;lt; lungime_intrare1 and lista_numere1[j] != numar_tinta1:&lt;br /&gt;
                j += 1&lt;br /&gt;
            if j &amp;lt; lungime_intrare1:&lt;br /&gt;
                lista_numere1[i + 1:j] = sorted(lista_numere1[i + 1:j])&lt;br /&gt;
            i = j&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
    return lista_numere1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;alfain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;alfaout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        lungime_intrare, numar_tinta = map(int, file_in.readline().split())&lt;br /&gt;
        lista_numere = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        mesaj_validare = validare(lungime_intrare, numar_tinta, lista_numere)   # apelul functiei de validare&lt;br /&gt;
        lista_numere = transforma_lista(lungime_intrare, numar_tinta, lista_numere)     # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        file_out.write(mesaj_validare + &#039;\n&#039;)&lt;br /&gt;
        file_out.write(&#039; &#039;.join(map(str, lista_numere)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2384_-_Divigrup&amp;diff=7455</id>
		<title>2384 - Divigrup</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2384_-_Divigrup&amp;diff=7455"/>
		<updated>2023-11-19T20:25:21Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Un șir de numere aparțin unui divigrup dacă au același număr de divizori. Scrieți un program care citește un număr natural &#039;&#039;&#039;N&#039;&#039;&#039; și apoi &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale nenule și care determină:&lt;br /&gt;
&lt;br /&gt;
a. câte divigrupuri există în șirul de numere citite&lt;br /&gt;
b. numărul de numere din fiecare divigrup, urmat de numerele ce aparțin acestuia, în ordine crescătoare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;divigrupin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;N&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;divigrupout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul de divigrupuri ce se pot forma cu numerele de pe a doua linie a fișierului de intrare.&lt;br /&gt;
Pe următoarele &#039;&#039;&#039;K&#039;&#039;&#039; rânduri se vor descrie divigrupurile în ordine descrescătoare a numărului de divizori ai elementelor ce le aparțin, astfel încât fiecare rând va avea următoarea structură: &#039;&#039;&#039;M&#039;&#039;&#039; – numărul de elemente ale divigrupului – &#039;&#039;&#039;x1 x2 x3&#039;&#039;&#039; … &#039;&#039;&#039;xM&#039;&#039;&#039; – numerele aparținând divigrupului, în ordine crescătoare. Valorile scrise pe un rând vor fi separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 200&#039;&#039;&#039;&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1000000000&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; divigrupin.txt&lt;br /&gt;
: 11&lt;br /&gt;
: 21 99 15 9 24 100 45 28 44 4 36&lt;br /&gt;
; divigrupout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 5&lt;br /&gt;
: 2 36 100&lt;br /&gt;
: 1 24&lt;br /&gt;
: 4 28 44 45 99&lt;br /&gt;
: 2 15 21&lt;br /&gt;
: 2 4 9&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; divigrupin.txt&lt;br /&gt;
: 300&lt;br /&gt;
: 21 99 15 9 24 100 45 28 44 4 36&lt;br /&gt;
; divigrupout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Există &#039;&#039;&#039;5&#039;&#039;&#039; divigrupuri care sunt descrise pe următoarele &#039;&#039;&#039;5&#039;&#039;&#039; rânduri: primul divigrup format din &#039;&#039;&#039;36&#039;&#039;&#039; și &#039;&#039;&#039;100&#039;&#039;&#039;, care au același număr maxim de divizori, următorul divigrup are un singur element, pe &#039;&#039;&#039;24&#039;&#039;&#039; care are &#039;&#039;&#039;8&#039;&#039;&#039; divizori, al treilea divigrup format din &#039;&#039;&#039;28&#039;&#039;&#039;, &#039;&#039;&#039;44&#039;&#039;&#039;, &#039;&#039;&#039;45&#039;&#039;&#039; și &#039;&#039;&#039;99&#039;&#039;&#039; are &#039;&#039;&#039;4&#039;&#039;&#039; elemente, toate având &#039;&#039;&#039;6&#039;&#039;&#039; divizori, șamd.&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;
&lt;br /&gt;
def validare(numar_elemente1, lista_numere1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if numar_elemente1 &amp;lt; 1 or numar_elemente1 &amp;gt; 200:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        if numar &amp;lt; 1 or numar &amp;gt; 1000000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculeaza_numar_divizori(numar):          # functia numar_divizori calculează numărul de divizori ai unui număr.&lt;br /&gt;
    numar_divizori1 = 0&lt;br /&gt;
    for i in range(1, int(math.sqrt(numar)) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            if numar / i == i:&lt;br /&gt;
                numar_divizori1 += 1&lt;br /&gt;
            else:&lt;br /&gt;
                numar_divizori1 += 2&lt;br /&gt;
    return numar_divizori1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def divigrupuri(lista_numere1):  # functia divigrupuri grupează numerele din șir în funcție de numărul lor de divizori.&lt;br /&gt;
    grupuri_divizori1 = {}&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        numar_divizori1 = calculeaza_numar_divizori(numar)&lt;br /&gt;
        if numar_divizori1 not in grupuri_divizori1:&lt;br /&gt;
            grupuri_divizori1[numar_divizori1] = []&lt;br /&gt;
        grupuri_divizori1[numar_divizori1].append(numar)&lt;br /&gt;
    for numar_divizori1 in grupuri_divizori1:&lt;br /&gt;
        grupuri_divizori1[numar_divizori1].sort()&lt;br /&gt;
    return grupuri_divizori1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    file_in = open(&amp;quot;divigrupin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;divigrupout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        numar_elemente = int(file_in.readline())   # citirea numărului se face ca sir de caractere deoarece e prea mare&lt;br /&gt;
        lista_numere = list(map(int, file_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        validare(numar_elemente, lista_numere)                 # apelul functiei de validare&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        grupuri_divizori = divigrupuri(lista_numere)  # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        file_out.write(str(len(grupuri_divizori)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        for numar_divizori in sorted(grupuri_divizori.keys(), reverse=True):&lt;br /&gt;
            file_out.write(str(len(grupuri_divizori[numar_divizori])) + &amp;quot; &amp;quot;)&lt;br /&gt;
            file_out.write(&amp;quot; &amp;quot;.join(map(str, grupuri_divizori[numar_divizori])) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3356_-_Alfa&amp;diff=7454</id>
		<title>3356 - Alfa</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3356_-_Alfa&amp;diff=7454"/>
		<updated>2023-11-19T19:30:06Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă un șir format din &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Se mai dă o valoare &#039;&#039;&#039;x&#039;&#039;&#039; și se garantează că șirul începe și se termină cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039;. Transformați șirul astfel:&lt;br /&gt;
* Elementele cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; rămân pe pozițiile lor;&lt;br /&gt;
* Secvențele de elemente diferile de &#039;&#039;&#039;x&#039;&#039;&#039; aflate între două poziții cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; se ordonează crescător (între aceleași două elemente cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; se vor afla aceleași elemente ca la început dar în ordine crescătoare).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;alfain.txt&#039;&#039;&#039; conține pe prima linie un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; reprezentând dimensiunea șirului și un număr &#039;&#039;&#039;x&#039;&#039;&#039; cu semnificația de mai sus. Pe linia a doua &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin câte un spațiu, reprezentând elementele șirului.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul &#039;&#039;&#039;alfaout.txt&#039;&#039;&#039; conține cele &#039;&#039;&#039;n&#039;&#039;&#039; elemente ale șirului în ordinea cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;2 &amp;lt;= n &amp;lt;= 1000&#039;&#039;&#039;&lt;br /&gt;
* Elementele șirului dat sunt naturale nenule formate din maximum &#039;&#039;&#039;4&#039;&#039;&#039; cifre&lt;br /&gt;
* Pentru &#039;&#039;&#039;40&#039;&#039;&#039; de puncte șirul conține doar două elemente cu valoarea &#039;&#039;&#039;x&#039;&#039;&#039; (primul și ultimul).&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; alfain.txt&lt;br /&gt;
: 10 3&lt;br /&gt;
: 3 4 1 2 3 7 9 8 3 3&lt;br /&gt;
; alfaout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 3 1 2 4 3 7 8 9 3 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; alfain.txt&lt;br /&gt;
: 1 3&lt;br /&gt;
: 3 4 1 2 3 7 9 8 3 3&lt;br /&gt;
; alfaout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def validare(lungime_intrare1, numar_tinta1, lista_numere1):   # functia de validare a datelor de intrare&lt;br /&gt;
    if lungime_intrare1 &amp;gt; 1000 or lungime_intrare1 &amp;lt; 2:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if len(lista_numere1) != lungime_intrare1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    if lista_numere1[0] != numar_tinta1 or lista_numere1[-1] != numar_tinta1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
    for numar in lista_numere1:&lt;br /&gt;
        if not (0 &amp;lt; numar &amp;lt; 10000):&lt;br /&gt;
            raise ValueError&lt;br /&gt;
    return &amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def transforma_lista(lungime_intrare1, numar_tinta1, lista_numere1):&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; lungime_intrare1:&lt;br /&gt;
        if lista_numere1[i] == numar_tinta1:&lt;br /&gt;
            j = i + 1&lt;br /&gt;
            while j &amp;lt; lungime_intrare1 and lista_numere1[j] != numar_tinta1:&lt;br /&gt;
                j += 1&lt;br /&gt;
            if j &amp;lt; lungime_intrare1:&lt;br /&gt;
                lista_numere1[i + 1:j] = sorted(lista_numere1[i + 1:j])&lt;br /&gt;
            i = j&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
    return lista_numere1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;alfain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;alfaout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        lungime_intrare, numar_tinta = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        lista_numere = list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        mesaj_validare = validare(lungime_intrare, numar_tinta, lista_numere)   # apelul functiei de validare&lt;br /&gt;
        lista_numere = transforma_lista(lungime_intrare, numar_tinta, lista_numere)     # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
        fisier_iesire.write(mesaj_validare + &#039;\n&#039;)&lt;br /&gt;
        fisier_iesire.write(&#039; &#039;.join(map(str, lista_numere)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1192_-_Arhitectura_2&amp;diff=7417</id>
		<title>1192 - Arhitectura 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1192_-_Arhitectura_2&amp;diff=7417"/>
		<updated>2023-11-16T13:38:44Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
După ce arhitectul Gigel a reușit să rezolve sarcina primită de la primărie ( #Arhitectura ), el și-a dat seama că aspectul zonei nu va fi unul după preferințele sale. Astfel, s-a stabilit că în oraș nu există clădiri cu înălțimea mai mare decât &#039;&#039;&#039;hmax&#039;&#039;&#039;. Acum primăria îi cere afișarea clădirilor în ordine descrescătoare, precum și verificarea, pentru fiecare clădire din lista ordonată, dacă înălțimea ei este egală cu media aritmetică a înălțimilor celor două clădiri vecine.&lt;br /&gt;
&lt;br /&gt;
Gigel vă cere ajutorul ca să-și termine proiectul care a devenit mult prea greu.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;arhitectura2in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele linii &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații. Fiecare linie conține maxim &#039;&#039;&#039;100.000&#039;&#039;&#039; de valori.&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;arhitectura2out.txt&#039;&#039;&#039; va conține doua linii cu &#039;&#039;&#039;n&#039;&#039;&#039; valori fiecare. Prima linie va conține înălțimile în ordine descrescătoare , iar a doua linie va conține &#039;&#039;&#039;n&#039;&#039;&#039; valori &#039;&#039;&#039;1&#039;&#039;&#039; sau &#039;&#039;&#039;0&#039;&#039;&#039;, după cum înălțimea clădirii curente este sau nu egală cu media aritmetică a înălțimilor celor două clădiri vecine.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 ≤ n ≤ 2000000&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;hmax ≤ 100000&#039;&#039;&#039;&lt;br /&gt;
* Pentru 40% din teste &#039;&#039;&#039;n ≤ 50000&#039;&#039;&#039;&lt;br /&gt;
* Pentru 80% din teste &#039;&#039;&#039;n ≤ 500000&#039;&#039;&#039;&lt;br /&gt;
* Considerăm că înaintea primei clădiri și după ultima clădire se află câte o pseudoclădire de înălțime &#039;&#039;&#039;0&#039;&#039;&#039; – care va interveni în verificarea cerută.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; arhitectura2in.txt&lt;br /&gt;
: 10&lt;br /&gt;
: 5 10 10 9 5 2 5 8 5 2&lt;br /&gt;
; arhitectura2out.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 10 10 9 8 5 5 5 5 2 2 &lt;br /&gt;
: 0 0 1 0 0 1 1 0 0 0&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Șirul devine &#039;&#039;&#039;10 10 9 8 5 5 5 5 2 2&#039;&#039;&#039;&lt;br /&gt;
Doar &#039;&#039;&#039;9&#039;&#039;&#039; si cei doi de &#039;&#039;&#039;5&#039;&#039;&#039; din mijloc respectă condiția.&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; arhitectura2in.txt&lt;br /&gt;
: 2000001&lt;br /&gt;
: 5 10 10 9 5 2 5 8 5 2&lt;br /&gt;
; arhitectura2out.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1192 - Arhitectura 2&lt;br /&gt;
def validare(numar_cladiri, inaltimi):  # functia de validare a datelor de intrare&lt;br /&gt;
&lt;br /&gt;
    if numar_cladiri &amp;gt; 2000000 or numar_cladiri &amp;lt; 1:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for inaltime in inaltimi:&lt;br /&gt;
        if inaltime &amp;gt; 100000 or inaltime &amp;lt; 1:  # fiecare inaltime trebuie sa fie intre 1 si 100000&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def arhitectura(numar_cladiri, inaltimi):  # functia de rezolvare&lt;br /&gt;
    # Sortăm înălțimile în ordine descrescătoare&lt;br /&gt;
    inaltimi.sort(reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Convertim lista de înălțimi într-un șir de caractere pentru a fi afișată&lt;br /&gt;
    cladiri_ordonate = &#039; &#039;.join(map(str, inaltimi))&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm o listă goală pentru a stoca rezultatele verificării&lt;br /&gt;
    verificare = []&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem lista de înălțimi&lt;br /&gt;
    for i in range(numar_cladiri):&lt;br /&gt;
        # Dacă suntem la prima sau la ultima clădire, adăugăm &#039;0&#039; în lista de verificare&lt;br /&gt;
        if i == 0 or i == numar_cladiri - 1:&lt;br /&gt;
            verificare.append(&#039;0&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            # Dacă înălțimea clădirii curente este egală cu media aritmetică a înălțimilor celor două clădiri vecine,&lt;br /&gt;
            # adăugăm &#039;1&#039; în lista de verificare&lt;br /&gt;
            if inaltimi[i] == (inaltimi[i - 1] + inaltimi[i + 1]) / 2:&lt;br /&gt;
                verificare.append(&#039;1&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                # Dacă nu, adăugăm &#039;0&#039; în lista de verificare&lt;br /&gt;
                verificare.append(&#039;0&#039;)&lt;br /&gt;
&lt;br /&gt;
    # Convertim lista de verificare într-un șir de caractere pentru a fi afișată&lt;br /&gt;
    return cladiri_ordonate, &#039; &#039;.join(verificare)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    numar_cladiri_input = int(input(&amp;quot;Introduceți numărul de clădiri: &amp;quot;))&lt;br /&gt;
    inaltimi_input = list(map(int, input(&amp;quot;Introduceți înălțimile clădirilor, separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        validare(numar_cladiri_input, inaltimi_input)  # apelul functiei de validare&lt;br /&gt;
        print(arhitectura(numar_cladiri_input, inaltimi_input))  # apelul functiei de rezolvare&lt;br /&gt;
&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;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1981_-_Divizori_sir&amp;diff=7405</id>
		<title>1981 - Divizori sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1981_-_Divizori_sir&amp;diff=7405"/>
		<updated>2023-11-16T13:16:08Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă următorul șir de numere naturale:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului.&lt;br /&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 cele &#039;&#039;&#039;n&#039;&#039;&#039; numere, reprezentând numărul de divizori ai fiecarui numar dintre cele &#039;&#039;&#039;n&#039;&#039;&#039;, separate prin spații.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; n &amp;lt; 60&#039;&#039;&#039;&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;
: 1 2 3 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: -1&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Explicație ==&lt;br /&gt;
* 1 are un divizor,&lt;br /&gt;
* 3 are 2 divizori,&lt;br /&gt;
* 9 are 3 divizori,&lt;br /&gt;
* 25 are 3 divizori.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1981 - Divizori sir&lt;br /&gt;
def verificare_restrictii(n1):&lt;br /&gt;
    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 0 &amp;lt; n1 &amp;lt; 60:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_divizori(n1):&lt;br /&gt;
    # Initializam sirul de numere&lt;br /&gt;
    sir = [2, 4]&lt;br /&gt;
    # Generam primii n termeni ai sirului&lt;br /&gt;
    for i in range(2, n1):&lt;br /&gt;
        sir.append(2 * sir[i - 1] + 2 * sir[i - 2])&lt;br /&gt;
    # Calculam numarul de divizori pentru fiecare termen al sirului&lt;br /&gt;
    divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir]&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele de intrare&lt;br /&gt;
        n = int(input())&lt;br /&gt;
        if verificare_restrictii(n):             # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            # Calculam numarul de divizori&lt;br /&gt;
            rezultat = numar_divizori(n)&lt;br /&gt;
            # Afisam rezultatul&lt;br /&gt;
            print(&#039; &#039;.join(map(str, rezultat)))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1981_-_Divizori_sir&amp;diff=7404</id>
		<title>1981 - Divizori sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1981_-_Divizori_sir&amp;diff=7404"/>
		<updated>2023-11-16T13:14:19Z</updated>

		<summary type="html">&lt;p&gt;Zmicala Narcis: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă următorul șir de numere naturale:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1, 3, 9, 25, 65, 161, 385, 897, 2049, 4609, 10241, 22529, 49153, 106497…&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pentru un număr natural n, citit de la tastatură, afișati numărul de divizori pentru fiecare dintre primii n termeni ai șirului.&lt;br /&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 cele &#039;&#039;&#039;n&#039;&#039;&#039; numere, reprezentând numărul de divizori ai fiecarui numar dintre cele &#039;&#039;&#039;n&#039;&#039;&#039;, separate prin spații.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;0 &amp;lt; n &amp;lt; 60&#039;&#039;&#039;&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;
: 1 2 3 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; Intrare&lt;br /&gt;
: n&lt;br /&gt;
; Ieșire&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&lt;br /&gt;
== Explicație ==&lt;br /&gt;
* 1 are un divizor,&lt;br /&gt;
* 3 are 2 divizori,&lt;br /&gt;
* 9 are 3 divizori,&lt;br /&gt;
* 25 are 3 divizori.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
# 1981 - Divizori sir&lt;br /&gt;
def verificare_restrictii(n1):&lt;br /&gt;
    # functia de verificare a datelor de intrare&lt;br /&gt;
    if 0 &amp;lt; n1 &amp;lt; 60:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numar_divizori(n1):&lt;br /&gt;
    # Initializam sirul de numere&lt;br /&gt;
    sir = [2, 4]&lt;br /&gt;
    # Generam primii n termeni ai sirului&lt;br /&gt;
    for i in range(2, n1):&lt;br /&gt;
        sir.append(2 * sir[i - 1] + 2 * sir[i - 2])&lt;br /&gt;
    # Calculam numarul de divizori pentru fiecare termen al sirului&lt;br /&gt;
    divizori = [len(set(i for i in range(1, int(x**0.5) + 1) if x % i == 0)) for x in sir]&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim datele de intrare&lt;br /&gt;
        n = int(input())&lt;br /&gt;
        if verificare_restrictii(n):             # verificam datele de intrare&lt;br /&gt;
            print(&amp;quot;Datele de intrare corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
            # Calculam numarul de divizori&lt;br /&gt;
            rezultat = numar_divizori(n)&lt;br /&gt;
            # Afisam rezultatul&lt;br /&gt;
            print(&#039; &#039;.join(map(str, rezultat)))&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    # ne asteptam la 2 tipuri de erori din cauza datelor de intrare, le tratam corespunzator&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
</feed>