<?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=Cristina94</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=Cristina94"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Cristina94"/>
	<updated>2026-05-01T02:40:36Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=S:E15313&amp;diff=10397</id>
		<title>S:E15313</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=S:E15313&amp;diff=10397"/>
		<updated>2024-12-10T12:25:15Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;S:E15313 (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&amp;#039;&amp;#039;&amp;#039;    &amp;#039;&amp;#039;Determinați cifra &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; pentru care fracția &amp;lt;math&amp;gt;\frac{a^2 \cdot \overline{aa} + a^2(a^2+1)}{\overline{202a}}&amp;lt;/math&amp;gt; este echiunitară.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție:&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Fracția este echiunitară dacă &amp;lt;math&amp;gt;a^2 \cdot \overline{aa} + a^2(a^2+1) = \overline{202a}&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;a^4 + 11a^3 + a^2 = \overline{202a}&amp;lt;/math&amp;gt;. Avem &amp;lt;math&amp;gt; 2020 \leq \overline{202a} \leq 2029 &amp;lt;/math&amp;gt;. Dacă &amp;lt;math&amp;gt; a \leq 4 &amp;lt;...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;S:E15313 (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați cifra &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; pentru care fracția &amp;lt;math&amp;gt;\frac{a^2 \cdot \overline{aa} + a^2(a^2+1)}{\overline{202a}}&amp;lt;/math&amp;gt; este echiunitară.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fracția este echiunitară dacă &amp;lt;math&amp;gt;a^2 \cdot \overline{aa} + a^2(a^2+1) = \overline{202a}&amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt;a^4 + 11a^3 + a^2 = \overline{202a}&amp;lt;/math&amp;gt;. Avem &amp;lt;math&amp;gt; 2020 \leq \overline{202a} \leq 2029 &amp;lt;/math&amp;gt;. Dacă &amp;lt;math&amp;gt; a \leq 4 &amp;lt;/math&amp;gt;, atunci &amp;lt;math&amp;gt; a^4 + 11a^3 + a^2 \leq 976 &amp;lt; 2020 &amp;lt;/math&amp;gt;, iar dacă &amp;lt;math&amp;gt;a \geq 6&amp;lt;/math&amp;gt;, atunci &amp;lt;math&amp;gt;a^4 + 11a^3 + a^2 \geq 3708 &amp;gt; 2029 &amp;lt;/math&amp;gt;. Pentru &amp;lt;math&amp;gt;a = 5 &amp;lt;/math&amp;gt;, avem &amp;lt;math&amp;gt;5^4 + 11 \cdot 5^3 + 5^2 = 2025 &amp;lt;/math&amp;gt;. &#039;&#039;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=S:E15310&amp;diff=10396</id>
		<title>S:E15310</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=S:E15310&amp;diff=10396"/>
		<updated>2024-12-10T12:10:42Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;S:E15310 (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&amp;#039;&amp;#039;&amp;#039;    &amp;#039;&amp;#039;Arătați că nu există numere naturale &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; astfel încât să fie adevărată relația &amp;lt;math&amp;gt;p^2 - 2018 = 2^q&amp;lt;/math&amp;gt;.&amp;#039;&amp;#039;  &amp;#039;&amp;#039;&amp;#039;Soluție:&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Putem scrie &amp;lt;math&amp;gt;p^2 = 2^q + 2018&amp;lt;/math&amp;gt;. Pentru &amp;lt;math&amp;gt;q = 0&amp;lt;/math&amp;gt; obținem &amp;lt;math&amp;gt;p^2 = 2019&amp;lt;/math&amp;gt;, iar pentru &amp;lt;math&amp;gt;q = 1&amp;lt;/math&amp;gt; obținem &amp;lt;math&amp;gt;p^2 = 2020&amp;lt;/math&amp;gt; care nu sunt pătrate de numere naturale. Pentru &amp;lt;math&amp;gt;q \geq 2&amp;lt;/ma...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;S:E15310 (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arătați că nu există numere naturale &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; astfel încât să fie adevărată relația &amp;lt;math&amp;gt;p^2 - 2018 = 2^q&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;
&#039;&#039;Putem scrie &amp;lt;math&amp;gt;p^2 = 2^q + 2018&amp;lt;/math&amp;gt;. Pentru &amp;lt;math&amp;gt;q = 0&amp;lt;/math&amp;gt; obținem &amp;lt;math&amp;gt;p^2 = 2019&amp;lt;/math&amp;gt;, iar pentru &amp;lt;math&amp;gt;q = 1&amp;lt;/math&amp;gt; obținem &amp;lt;math&amp;gt;p^2 = 2020&amp;lt;/math&amp;gt; care nu sunt pătrate de numere naturale. Pentru &amp;lt;math&amp;gt;q \geq 2&amp;lt;/math&amp;gt; trebuie să avem &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; număr par. Atunci &amp;lt;math&amp;gt;p^2 = M4&amp;lt;/math&amp;gt;, &amp;lt;math&amp;gt;2^q = M4&amp;lt;/math&amp;gt;, ar &amp;lt;math&amp;gt;2018 = M4 + 2&amp;lt;/math&amp;gt;. Prin urmare relația dată nu este posibilă pentru &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; numere naturale. &#039;&#039;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=Gazeta_matematic%C4%83_2018&amp;diff=10395</id>
		<title>Gazeta matematică 2018</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=Gazeta_matematic%C4%83_2018&amp;diff=10395"/>
		<updated>2024-12-10T11:54:19Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: /* Gazeta Matematică 2/2018 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gazeta Matematică 2/2018 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E15.314|E:15314]] (Cristina Vijdeluc și Mihai Vijdeluc)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele naturale &amp;lt;math&amp;gt;m&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;n&amp;lt;/math&amp;gt; pentru care este adevărată relația &amp;lt;math&amp;gt;2018^{m}=8^{n}+2010&amp;lt;/math&amp;gt;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E15.316|E:15316]] (Cristina Vijdeluc și Mihai Vijdeluc)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numărul prim &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și numărul natural &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt;p^{2} + 5^{p} + 31 = 3181^{q}.&amp;lt;/math&amp;gt;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E15.325|E:15325]] (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;Determinați numerele naturale &amp;lt;math&amp;gt;\overline{abcd}&amp;lt;/math&amp;gt; pentru care:&#039;&#039;&lt;br /&gt;
&amp;lt;math display=&amp;quot;block&amp;quot;&amp;gt;\frac{\sqrt{d+2 \cdot \overline{abc}}}{\overline{d0}} = \frac{\sqrt{3 \cdot \overline{abc}}}{\overline{abc}}&amp;lt;/math&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E15310]] (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Arătați că nu există numere naturale &amp;lt;math&amp;gt;p&amp;lt;/math&amp;gt; și &amp;lt;math&amp;gt;q&amp;lt;/math&amp;gt; astfel încât să fie adevărată relația &amp;lt;math&amp;gt;p^2 - 2018 = 2^q&amp;lt;/math&amp;gt;.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E15313]] (Cristina Vijdeluc și Mihai Vijdeluc, Baia Mare)&#039;&#039;&#039;  &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați cifra &amp;lt;math&amp;gt;a&amp;lt;/math&amp;gt; pentru care fracția &amp;lt;math&amp;gt;\frac{a^2 \cdot \overline{aa} + a^2(a^2+1)}{\overline{202a}}&amp;lt;/math&amp;gt; este echiunitară.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Gazeta Matematică 4/2018 ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S:E18.127 (Nicolae Mușuroia)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Un copil se joacă. În prima etapă, scrie un număr pe tablă. La fiecare dintre etapele următoare, înlocuiește numărul de pe tablă cu un altul, obținut după una dintre următoarele reguli: sau scrie dublul numărului, sau scrie numărul obținut prin înlocuirea ultimei cifre a numărului cu  ultima cifră a cubului acestuia. Știind că se pornește de la numărul &amp;lt;math&amp;gt;18&amp;lt;/math&amp;gt;, stabiliți dacă&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
a) s&#039;&#039;e poate ajunge la numărul&#039;&#039; &amp;lt;math&amp;gt;78&amp;lt;/math&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
b) &#039;&#039;se poate ajunge la numărul&#039;&#039; &amp;lt;math&amp;gt;2018&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E18.128]] (Vasile Ienuțaș)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Scrieți numărul &amp;lt;math&amp;gt;2018^{2017}&amp;lt;/math&amp;gt; ca sumă de patru pătrate perfecte nenule distincte.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S:E18.129 (Ioan-Iulian Bunu)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați numerele prime &amp;lt;math&amp;gt;a, b, c&amp;lt;/math&amp;gt; din egalitatea &amp;lt;math&amp;gt;5a^6+13b^2+5^c=2018&amp;lt;/math&amp;gt;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;S:E18.130 (Traian Covaciu)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
a) &#039;&#039;Determinați numerele prime &amp;lt;math&amp;gt;x,y,z&amp;lt;/math&amp;gt; astfel încât&#039;&#039; &amp;lt;math&amp;gt;8x+9y+60z=1918&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
b) &#039;&#039;Aflați numerele naturale &amp;lt;math&amp;gt;x,y,z&amp;lt;/math&amp;gt; astfel încât&#039;&#039; &amp;lt;math&amp;gt;20x+208y+209z=2018&amp;lt;/math&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E18.131]] (Nicolae Mușuroia)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Determinați cel mai mic număr natural pătrat perfect care se poate scrie ca sumă de 2018 numere naturale consecutive.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;[[S:E18.154]] (Nicolae Mușuroia)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fie &amp;lt;math&amp;gt;a,b,c \in \mathbb{Z}&amp;lt;/math&amp;gt; cu &amp;lt;math&amp;gt;b^{2}+c^{2}=a^{2}&amp;lt;/math&amp;gt;. Arătați că pentru orice &amp;lt;math&amp;gt;n\in \mathbb{N}^{*}&amp;lt;/math&amp;gt;, ecuația &amp;lt;math&amp;gt;x^{2}+2a^{n}x+b^{2n}+c^{2n}=0&amp;lt;/math&amp;gt; are soluții reale.&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1476_%E2%80%93_Fsortare&amp;diff=9773</id>
		<title>1476 – Fsortare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1476_%E2%80%93_Fsortare&amp;diff=9773"/>
		<updated>2024-05-13T13:10:53Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod *urm;     };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  ==Cerința== Să se scrie o funcție C++ cu următorul prototip:    void sortareCrescator(nod *&amp;amp;prim)  care sortează crescător elementele listei al cărei prim elemen...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod *urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
  void sortareCrescator(nod *&amp;amp;prim)&lt;br /&gt;
&lt;br /&gt;
care sortează crescător elementele listei al cărei prim element are adresa memorată în prim.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*numele funcției va fi sortareCrescator&lt;br /&gt;
*lista va conține cel puțin 3 elemente&lt;br /&gt;
*rezolvarea se va face in python&lt;br /&gt;
&lt;br /&gt;
==Exemplu==&lt;br /&gt;
Dacă lista este formată din valorile (5, 3, 9, 4, 2, 12), după apelul funcţiei ea va conţine elementele (2, 3, 4, 5, 9, 12).&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1476 FSortare&lt;br /&gt;
&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, info):&lt;br /&gt;
        self.info = info&lt;br /&gt;
        self.next = None&lt;br /&gt;
&lt;br /&gt;
def create_linked_list(values):&lt;br /&gt;
    head = None&lt;br /&gt;
    tail = None&lt;br /&gt;
    for value in values:&lt;br /&gt;
        new_node = Node(value)&lt;br /&gt;
        if head is None:&lt;br /&gt;
            head = new_node&lt;br /&gt;
            tail = new_node&lt;br /&gt;
        else:&lt;br /&gt;
            tail.next = new_node&lt;br /&gt;
            tail = new_node&lt;br /&gt;
    return head&lt;br /&gt;
&lt;br /&gt;
def sortareCrescator(prim):&lt;br /&gt;
    # Funcție pentru inserarea unui nod într-o listă sortată&lt;br /&gt;
    def insert_sorted(head, new_node):&lt;br /&gt;
        if head is None or head.info &amp;gt;= new_node.info:&lt;br /&gt;
            new_node.next = head&lt;br /&gt;
            return new_node&lt;br /&gt;
&lt;br /&gt;
        current = head&lt;br /&gt;
        while current.next is not None and current.next.info &amp;lt; new_node.info:&lt;br /&gt;
            current = current.next&lt;br /&gt;
        &lt;br /&gt;
        new_node.next = current.next&lt;br /&gt;
        current.next = new_node&lt;br /&gt;
        return head&lt;br /&gt;
    &lt;br /&gt;
    # Inițializăm lista sortată ca fiind lista vidă&lt;br /&gt;
    sorted_list = None&lt;br /&gt;
    current = prim&lt;br /&gt;
    &lt;br /&gt;
    # Parcurgem lista inițială și inserăm fiecare nod în lista sortată&lt;br /&gt;
    while current is not None:&lt;br /&gt;
        sorted_list = insert_sorted(sorted_list, Node(current.info))&lt;br /&gt;
        current = current.next&lt;br /&gt;
    &lt;br /&gt;
    # Copiem lista sortată înapoi în lista inițială&lt;br /&gt;
    current = prim&lt;br /&gt;
    sorted_current = sorted_list&lt;br /&gt;
    while sorted_current is not None:&lt;br /&gt;
        current.info = sorted_current.info&lt;br /&gt;
        current = current.next&lt;br /&gt;
        sorted_current = sorted_current.next&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru citirea datelor de intrare de la tastatură&lt;br /&gt;
def read_input():&lt;br /&gt;
    values = input(&amp;quot;Introduceți valorile separate prin virgulă: &amp;quot;).split(&#039;,&#039;)&lt;br /&gt;
    return [int(value) for value in values if value.strip()]  # eliminăm spațiile și convertim în int&lt;br /&gt;
&lt;br /&gt;
# Testăm funcția&lt;br /&gt;
def print_list(head):&lt;br /&gt;
    current = head&lt;br /&gt;
    while current is not None:&lt;br /&gt;
        print(current.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
        current = current.next&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
# Citim datele de intrare de la tastatură&lt;br /&gt;
values = read_input()&lt;br /&gt;
&lt;br /&gt;
# Cream lista liniară simplu înlănțuită folosind funcția create_linked_list&lt;br /&gt;
l = create_linked_list(values)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista inițială:&amp;quot;)&lt;br /&gt;
print_list(l)&lt;br /&gt;
&lt;br /&gt;
# Sortăm lista&lt;br /&gt;
sortareCrescator(l)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista sortată:&amp;quot;)&lt;br /&gt;
print_list(l)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1181_%E2%80%93_FList%C4%83_Interclasare2&amp;diff=9772</id>
		<title>1181 – FListă Interclasare2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1181_%E2%80%93_FList%C4%83_Interclasare2&amp;diff=9772"/>
		<updated>2024-05-13T13:05:04Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void inserare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care inserează după fiecare element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1181 FListaInserare2&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def inserare(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    if current.info % 2 == 0:&lt;br /&gt;
      new_node = Node(2 * current.info)&lt;br /&gt;
      new_node.urm = current.urm&lt;br /&gt;
      current.urm = new_node&lt;br /&gt;
      current = current.urm.urm&lt;br /&gt;
    else:&lt;br /&gt;
      current = current.urm&lt;br /&gt;
&lt;br /&gt;
def afisare_lista(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info)&lt;br /&gt;
    current = current.urm&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citirea datelor de intrare de la tastatura&lt;br /&gt;
  N = int(input(&amp;quot;Introduceti numarul de noduri: &amp;quot;))&lt;br /&gt;
  vals = [int(input(f&amp;quot;Introduceti valoarea pentru nodul {i + 1}: &amp;quot;)) for i in range(N)]&lt;br /&gt;
&lt;br /&gt;
  # Crearea listei liniare simplu inlantuite&lt;br /&gt;
  noduri = [Node(val) for val in vals]&lt;br /&gt;
  for i in range(N - 1):&lt;br /&gt;
    noduri[i].urm = noduri[i + 1]&lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
  afisare_lista(noduri[0])&lt;br /&gt;
&lt;br /&gt;
  inserare(noduri[0])&lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista dupa inserare:&amp;quot;)&lt;br /&gt;
  afisare_lista(noduri[0])&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1171_%E2%80%93_F%C8%98terge_Primul_Din_List%C4%83&amp;diff=9771</id>
		<title>1171 – FȘterge Primul Din Listă</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1171_%E2%80%93_F%C8%98terge_Primul_Din_List%C4%83&amp;diff=9771"/>
		<updated>2024-05-13T13:00:51Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void stergePrimul(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care șterge primul element al unei liste; pointerul p are ca valoarea adresa primului element din listă – cel care va fi șters.&lt;br /&gt;
&lt;br /&gt;
==Restricţii şi precizări==&lt;br /&gt;
numele funcției va fi stergePrimul&lt;br /&gt;
dacă lista nu conține niciun element, pointerul p va avea valoarea NULL&lt;br /&gt;
în toate cazurile, la ieșirea din apel p va memora adresa primului element al listei; dacă elementul șters este ultimul, p va avea valoarea NULL&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1171 FStergePrimulDinLista&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def stergePrimul(p):&lt;br /&gt;
  if p is None:&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  p = p.urm&lt;br /&gt;
  return p&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citirea datelor de intrare de la tastatura&lt;br /&gt;
  N = int(input(&amp;quot;Introduceti numarul de noduri: &amp;quot;))&lt;br /&gt;
  vals = [int(input(f&amp;quot;Introduceti valoarea pentru nodul {i + 1}: &amp;quot;)) for i in range(N)]&lt;br /&gt;
&lt;br /&gt;
  # Crearea unei liste liniare simplu inlantuite&lt;br /&gt;
  noduri = [Nod(val) for val in vals]&lt;br /&gt;
  for i in range(N - 1):&lt;br /&gt;
    noduri[i].urm = noduri[i + 1]&lt;br /&gt;
&lt;br /&gt;
  # Afisarea listei inainte de stergerea primului element&lt;br /&gt;
  print(&amp;quot;Lista inainte de stergerea primului element:&amp;quot;)&lt;br /&gt;
  current = noduri[0]&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info)&lt;br /&gt;
    current = current.urm&lt;br /&gt;
&lt;br /&gt;
  # Stergerea primului element&lt;br /&gt;
  noduri[0] = stergePrimul(noduri[0])&lt;br /&gt;
&lt;br /&gt;
  # Afisarea listei dupa stergerea primului element&lt;br /&gt;
  print(&amp;quot;Lista dupa stergerea primului element:&amp;quot;)&lt;br /&gt;
  current = noduri[0]&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info)&lt;br /&gt;
    current = current.urm&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>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1000_-_CNP&amp;diff=9770</id>
		<title>1000 - CNP</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1000_-_CNP&amp;diff=9770"/>
		<updated>2024-05-13T12:40:12Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se consideră un fişier care conţine informaţii despre mai multe persoane, sub o formă nestructurată. Informaţiile sunt dispuse pe linii de maxim 200 de caractere şi pot conţine CNP-uri valide. Ştiind că CNP-ul unei persoane este un şir de exact 13 cifre consecutive, scrieţi un program care determină şi scrie în fişierul de ieșire, pe linii distincte, toate CNP-urile extrase din text. Dacă în fișierul de intrare nu se află niciun CNP, în fișierul de ieșire se va afișa numai valoarea 0.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare cnp.in conține informațiile date.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire cnp.out va conține CNP-urile determinate, câte unul pe o linie, sau valoarea 0 dacă în fișierul de intrare nu există CNP-uri.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;cnp.in&lt;br /&gt;
:Popescu Grigore, 14 ani, 1991212122334;&lt;br /&gt;
:Gigel  Banu - 1031102453435, Bujorului 7;&lt;br /&gt;
:Dana Marin: 2690405358687, fara viza, 2450609987654  -&lt;br /&gt;
:Jane Doe&lt;br /&gt;
&lt;br /&gt;
;cnp.out&lt;br /&gt;
:1991212122334&lt;br /&gt;
:1031102453435&lt;br /&gt;
:2690405358687&lt;br /&gt;
:2450609987654&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;cnp.in&lt;br /&gt;
:Popescu Grigore, 14 ani, 1991212134;&lt;br /&gt;
:Gigel  Banu - 103110245Bujorului 7;&lt;br /&gt;
:Dana Marin: 269-04-05-358687, fara viza, 2+450609+987654 -&lt;br /&gt;
:Jane Doe&lt;br /&gt;
&lt;br /&gt;
;cnp.out&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1000 CNP&lt;br /&gt;
import re&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def extrage_cnp(text):&lt;br /&gt;
  regex = r&#039;\b\d{13}\b&#039;  # căutăm grupuri de exact 13 cifre&lt;br /&gt;
  return re.findall(regex, text)&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(nume_fisier):&lt;br /&gt;
  if not os.path.exists(nume_fisier):&lt;br /&gt;
    return False&lt;br /&gt;
  if not os.path.isfile(nume_fisier):&lt;br /&gt;
    return False&lt;br /&gt;
  if not os.access(nume_fisier, os.R_OK):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  nume_fisier_intrare = &#039;cnp.in&#039;&lt;br /&gt;
  nume_fisier_iesire = &#039;cnp.out&#039;&lt;br /&gt;
&lt;br /&gt;
  if not verifica_date_intrare(nume_fisier_intrare):&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date invalide: Fisierul de intrare nu poate fi citit.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Verificare dacă fișierul de intrare este gol&lt;br /&gt;
  if os.path.getsize(nume_fisier_intrare) == 0:&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date invalide: Fisierul de intrare este gol.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  with open(nume_fisier_intrare, &#039;r&#039;) as fin:&lt;br /&gt;
    text = fin.read()&lt;br /&gt;
  &lt;br /&gt;
  cnp_list = extrage_cnp(text)&lt;br /&gt;
  &lt;br /&gt;
  if cnp_list:&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
      for cnp in cnp_list:&lt;br /&gt;
        fout.write(cnp + &#039;\n&#039;)&lt;br /&gt;
  else:&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;0&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1970_-_secventa_xor&amp;diff=9765</id>
		<title>1970 - secventa xor</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1970_-_secventa_xor&amp;diff=9765"/>
		<updated>2024-04-01T14:10:56Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Fie secvența S(x) care se construiește astfel:  S(1)=x S(n+1)=S(n) XOR [S(n)/2], unde [x] se definește ca parte întreagă din x, iar XOR este operația clasică „sau exclusiv”.  ==Cerința== Dându-se un număr natural k, aflați numărul de numere naturale x pentru care S(k+1)=S(1)=x este adevărat. Deoarece numărul poate fi foarte mare, afișați rezultatul modulo 1000000007.  ==Date de intrare== Fișierul de intrare secventa.in se găsește un singur nu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Fie secvența S(x) care se construiește astfel:&lt;br /&gt;
&lt;br /&gt;
S(1)=x&lt;br /&gt;
S(n+1)=S(n) XOR [S(n)/2], unde [x] se definește ca parte întreagă din x, iar XOR este operația clasică „sau exclusiv”.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Dându-se un număr natural k, aflați numărul de numere naturale x pentru care S(k+1)=S(1)=x este adevărat. Deoarece numărul poate fi foarte mare, afișați rezultatul modulo 1000000007.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare secventa.in se găsește un singur număr natural k.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire secventa.out va conține pe prima linie un singur număr – răspunsul problemei modulo 1000000007.&lt;br /&gt;
&lt;br /&gt;
Dacă pentru un număr k există o infinitate de numere x care respectă cerința, se va afișa numărul -1.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ k ≤ 10^19&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;secventa.in&lt;br /&gt;
:260&lt;br /&gt;
&lt;br /&gt;
;secventa.out&lt;br /&gt;
:15&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;secventa.in&lt;br /&gt;
:100000000000000000000&lt;br /&gt;
&lt;br /&gt;
;secventa.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1970 secventa xor&lt;br /&gt;
MOD = 1000000007&lt;br /&gt;
&lt;br /&gt;
def calculate_sequence_term(k, x):&lt;br /&gt;
  while k &amp;gt; 0:&lt;br /&gt;
    x = x ^ (x // 2)&lt;br /&gt;
    k -= 1&lt;br /&gt;
  return x&lt;br /&gt;
&lt;br /&gt;
def count_matching_numbers(k):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for x in range(1, k + 1):&lt;br /&gt;
    if calculate_sequence_term(k, x) == x:&lt;br /&gt;
      count += 1&lt;br /&gt;
  return count % MOD&lt;br /&gt;
&lt;br /&gt;
def verify_input_data(k):&lt;br /&gt;
  if not (1 &amp;lt;= k &amp;lt;= 10 ** 19):&lt;br /&gt;
    with open(&amp;quot;secventa.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;secventa.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    k = int(fin.readline().strip())&lt;br /&gt;
&lt;br /&gt;
  if not verify_input_data(k):&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  matching_numbers = count_matching_numbers(k)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;secventa.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(matching_numbers))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3650_-_Perechi3&amp;diff=9764</id>
		<title>3650 - Perechi3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3650_-_Perechi3&amp;diff=9764"/>
		<updated>2024-04-01T14:00:07Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se dă un șir de numere hexazecimale, adică numere în care cele 16 cifre sunt din mulțimea {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}. Spunem că două numere se potrivesc dacă nu au cifre hexazecimale comune și împreună conțin toate cifrele în baza 16, cel puțin o dată. De exemplu, 24FFA032 și EDCB1998765 sunt numere care se potrivesc.  ==Cerința== Să se determine numărul perechilor de numere hexazecimale care se potrivesc.  ==Date de intrare== Fișierul de...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se dă un șir de numere hexazecimale, adică numere în care cele 16 cifre sunt din mulțimea {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F}. Spunem că două numere se potrivesc dacă nu au cifre hexazecimale comune și împreună conțin toate cifrele în baza 16, cel puțin o dată. De exemplu, 24FFA032 și EDCB1998765 sunt numere care se potrivesc.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se determine numărul perechilor de numere hexazecimale care se potrivesc.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare perechi.in conține pe mai multe linii șirul de numere hexazecimale, deci numerele sunt separate prin spații sau enter.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire perechi.out va conține un singur număr natural reprezentând numărul perechilor de numere care se potrivesc.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*În șir sunt cel puțin două numere și cel mult 200.000 de numere&lt;br /&gt;
*Numerele conțin cel puțin o cifră și cel mult 30 de cifre&lt;br /&gt;
*Cifrele hexazecimale de la 10 la 15 se scriu cu ajutorul literelor mari A, B, C, D, E, F.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;perechi.in&lt;br /&gt;
:24FFA032 EDCB1998765&lt;br /&gt;
:24FA03 24FFA032 0&lt;br /&gt;
:123456789ABCDEF12&lt;br /&gt;
&lt;br /&gt;
;perechi.out&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Cele patru perechi sunt: (24FFA032, EDCB1998765), (EDCB1998765, 24FA03), (EDCB1998765, 24FFA032) și (0, 123456789ABCDEF12).&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;perechi.in&lt;br /&gt;
:G123 24FFA032 EDCB1998765&lt;br /&gt;
&lt;br /&gt;
;perechi.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3650 perechi3&lt;br /&gt;
def citeste_numere_hexazecimale(fisier):&lt;br /&gt;
  numere = []&lt;br /&gt;
  for linie in fisier:&lt;br /&gt;
    numere.extend(linie.split())&lt;br /&gt;
  return numere&lt;br /&gt;
&lt;br /&gt;
def se_potrivesc(numar1, numar2):&lt;br /&gt;
  cifre1 = set(numar1)&lt;br /&gt;
  cifre2 = set(numar2)&lt;br /&gt;
  if any(cifra in cifre2 for cifra in cifre1):&lt;br /&gt;
    return False&lt;br /&gt;
  cifre_unite = cifre1.union(cifre2)&lt;br /&gt;
  return len(cifre_unite) == 16&lt;br /&gt;
&lt;br /&gt;
def numara_perechi_potrivite(numere):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for i in range(len(numere)):&lt;br /&gt;
    for j in range(i + 1, len(numere)):&lt;br /&gt;
      if se_potrivesc(numere[i], numere[j]):&lt;br /&gt;
        count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(numere):&lt;br /&gt;
  if len(numere) &amp;lt; 2 or len(numere) &amp;gt; 200000:&lt;br /&gt;
    return False&lt;br /&gt;
  for numar in numere:&lt;br /&gt;
    if not all(caracter.isdigit() or caracter.upper() in &amp;quot;ABCDEF&amp;quot; for caracter in numar):&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;perechi.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    numere_hexazecimale = citeste_numere_hexazecimale(fin)&lt;br /&gt;
&lt;br /&gt;
  if not verifica_date_intrare(numere_hexazecimale):&lt;br /&gt;
    with open(&amp;quot;perechi.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  numar_perechi_potrivite = numara_perechi_potrivite(numere_hexazecimale)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;perechi.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(numar_perechi_potrivite))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2107_-_Pomi&amp;diff=9763</id>
		<title>2107 - Pomi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2107_-_Pomi&amp;diff=9763"/>
		<updated>2024-04-01T13:48:04Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== În livada sa, Vasile are pomi fructiferi, organizaţi în parcele în funcţie de soi. În fiecare an, scoate la vânzare doar o parte dintre pomii adulţi dintr-o singură parcelă. Ca să asigure spaţiu de dezvoltare pentru pomii rămaşi, Vasile s-a decis să fie scoşi la vînzare numai acei pomi din parcelă al căror număr de ordine este divizibil cu o cifră k, numită cifra anului.  ==Cerința== Cunoscând valorile a şi b, reprezentând numerele de ordi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
În livada sa, Vasile are pomi fructiferi, organizaţi în parcele în funcţie de soi. În fiecare an, scoate la vânzare doar o parte dintre pomii adulţi dintr-o singură parcelă. Ca să asigure spaţiu de dezvoltare pentru pomii rămaşi, Vasile s-a decis să fie scoşi la vînzare numai acei pomi din parcelă al căror număr de ordine este divizibil cu o cifră k, numită cifra anului.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Cunoscând valorile a şi b, reprezentând numerele de ordine ale primului, respectiv ultimului pom din parcela din care se face vânzarea, precum şi k – cifra anului, se cere să se determine numărul de pomi scoşi la vânzare de Vasile în acest an.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare pomi.in conţine trei numere naturale a, b, k, fiecare pe câte o linie, ce reprezintă: numerele de ordine ale primului, respectiv ultimului pom din parcela din care se face vânzarea şi cifra anului.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fişierul de ieşire pomi.out va conţine pe prima linie, un număr natural ce reprezintă numărul de pomi scoşi la vânzare de către Vasile.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 &amp;lt; k ≤ 9&lt;br /&gt;
*1 &amp;lt; a &amp;lt; b&lt;br /&gt;
*a şi b sunt numere naturale cu cel mult 80 de cifre fiecare.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;pomi.in&lt;br /&gt;
:23  &lt;br /&gt;
:41&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
;pomi.out&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Sunt 6 pomi scoşi la vânzare în acest an.&lt;br /&gt;
În cadrul parcelei, ei au avut numerele de ordine: 24, 27, 30, 33, 36, 39 (toate numerele dintre a şi b, care sunt divizibile cu cifra anului, k).&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;pomi.in&lt;br /&gt;
:41&lt;br /&gt;
:23&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
;pomi.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2107 Pomi&lt;br /&gt;
def verifica_date_intrare(a, b, k):&lt;br /&gt;
  if not (1 &amp;lt; k &amp;lt;= 9):&lt;br /&gt;
    return False&lt;br /&gt;
  if not (1 &amp;lt; a &amp;lt; b):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def numar_pomi_scoasi_la_vanzare(a, b, k):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for i in range(a, b + 1):&lt;br /&gt;
    if i % k == 0:&lt;br /&gt;
      count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citire date de intrare&lt;br /&gt;
  try:&lt;br /&gt;
    with open(&amp;quot;pomi.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
      a = int(fin.readline().strip())&lt;br /&gt;
      b = int(fin.readline().strip())&lt;br /&gt;
      k = int(fin.readline().strip())&lt;br /&gt;
  except (ValueError, FileNotFoundError):&lt;br /&gt;
    # Date de intrare invalide sau lipsa fisierului&lt;br /&gt;
    with open(&amp;quot;pomi.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Verificare date de intrare&lt;br /&gt;
  if not verifica_date_intrare(a, b, k):&lt;br /&gt;
    with open(&amp;quot;pomi.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Calcul numar de pomi scoși la vânzare&lt;br /&gt;
  numar_pomi = numar_pomi_scoasi_la_vanzare(a, b, k)&lt;br /&gt;
&lt;br /&gt;
  # Scriere rezultat in fisierul de ieșire&lt;br /&gt;
  with open(&amp;quot;pomi.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(numar_pomi))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1182_%E2%80%93_FList%C4%83_Interclasare3&amp;diff=9762</id>
		<title>1182 – FListă Interclasare3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1182_%E2%80%93_FList%C4%83_Interclasare3&amp;diff=9762"/>
		<updated>2024-04-01T13:23:36Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: /* Important */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void inserare(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care inserează înaintea fiecărui element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*lista va conține cel puțin un element&lt;br /&gt;
*la ieșirea din apel p va conține adresa primului element al listei&lt;br /&gt;
*rezolvarea se va face în python&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1182 FListaInserare3&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info, next_node=None):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = next_node&lt;br /&gt;
&lt;br /&gt;
def inserare(p):&lt;br /&gt;
  prev = None&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    if current.info % 2 == 0:&lt;br /&gt;
      new_node = Node(current.info * 2)&lt;br /&gt;
      new_node.next = current&lt;br /&gt;
      if prev is not None:&lt;br /&gt;
        prev.next = new_node&lt;br /&gt;
      else:&lt;br /&gt;
        p = new_node  &lt;br /&gt;
      prev = new_node&lt;br /&gt;
      current = current.next&lt;br /&gt;
    else:&lt;br /&gt;
      prev = current&lt;br /&gt;
      current = current.next&lt;br /&gt;
&lt;br /&gt;
def print_list(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  values = [1, 2, 3, 4, 5]&lt;br /&gt;
  p = Node(values[0])  &lt;br /&gt;
  current = p&lt;br /&gt;
  for value in values[1:]:  &lt;br /&gt;
    current.next = Node(value)  &lt;br /&gt;
    current = current.next  &lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
  print_list(p)&lt;br /&gt;
&lt;br /&gt;
  inserare(p)&lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista dupa inserare:&amp;quot;)&lt;br /&gt;
  print_list(p)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1181_%E2%80%93_FList%C4%83_Interclasare2&amp;diff=9761</id>
		<title>1181 – FListă Interclasare2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1181_%E2%80%93_FList%C4%83_Interclasare2&amp;diff=9761"/>
		<updated>2024-04-01T13:23:20Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: /* Important */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void inserare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care inserează după fiecare element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1181 FListaInserare2&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def inserare(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    if current.info % 2 == 0:&lt;br /&gt;
      new_node = Node(2 * current.info)&lt;br /&gt;
      new_node.urm = current.urm&lt;br /&gt;
      current.urm = new_node&lt;br /&gt;
      current = current.urm.urm&lt;br /&gt;
    else:&lt;br /&gt;
      current = current.urm&lt;br /&gt;
&lt;br /&gt;
def afisare_lista(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info)&lt;br /&gt;
    current = current.urm&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
nod1 = Node(1)&lt;br /&gt;
nod2 = Node(2)&lt;br /&gt;
nod3 = Node(3)&lt;br /&gt;
nod1.urm = nod2&lt;br /&gt;
nod2.urm = nod3&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&lt;br /&gt;
inserare(nod1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista dupa inserare:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1171_%E2%80%93_F%C8%98terge_Primul_Din_List%C4%83&amp;diff=9760</id>
		<title>1171 – FȘterge Primul Din Listă</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1171_%E2%80%93_F%C8%98terge_Primul_Din_List%C4%83&amp;diff=9760"/>
		<updated>2024-04-01T13:23:03Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: /* Important */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void stergePrimul(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care șterge primul element al unei liste; pointerul p are ca valoarea adresa primului element din listă – cel care va fi șters.&lt;br /&gt;
&lt;br /&gt;
==Restricţii şi precizări==&lt;br /&gt;
numele funcției va fi stergePrimul&lt;br /&gt;
dacă lista nu conține niciun element, pointerul p va avea valoarea NULL&lt;br /&gt;
în toate cazurile, la ieșirea din apel p va memora adresa primului element al listei; dacă elementul șters este ultimul, p va avea valoarea NULL&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1171 FStergePrimulDinLista&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def stergePrimul(p):&lt;br /&gt;
  if p is None:&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  p = p.urm&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
# Crearea unei liste liniare simplu înlănțuite&lt;br /&gt;
nod1 = Nod(1)&lt;br /&gt;
nod2 = Nod(2)&lt;br /&gt;
nod3 = Nod(3)&lt;br /&gt;
nod1.urm = nod2&lt;br /&gt;
nod2.urm = nod3&lt;br /&gt;
&lt;br /&gt;
# Afisarea listei inainte de stergerea primului element&lt;br /&gt;
print(&amp;quot;Lista inainte de stergerea primului element:&amp;quot;)&lt;br /&gt;
current = nod1&lt;br /&gt;
while current is not None:&lt;br /&gt;
  print(current.info)&lt;br /&gt;
  current = current.urm&lt;br /&gt;
&lt;br /&gt;
# Stergerea primului element&lt;br /&gt;
stergePrimul(nod1)&lt;br /&gt;
&lt;br /&gt;
# Afisarea listei dupa stergerea primului element&lt;br /&gt;
print(&amp;quot;Lista dupa stergerea primului element:&amp;quot;)&lt;br /&gt;
current = nod1.urm&lt;br /&gt;
while current is not None:&lt;br /&gt;
  print(current.info)&lt;br /&gt;
  current = current.urm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;#1171 FStergePrimulDinLista&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3789_%E2%80%93_FList%C4%83_Oglindire&amp;diff=9759</id>
		<title>3789 – FListă Oglindire</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3789_%E2%80%93_FList%C4%83_Oglindire&amp;diff=9759"/>
		<updated>2024-04-01T13:22:41Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void oglindire(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care oglindește nodurile din lista pentru care primul element are adresa memorată în pointerul p.&lt;br /&gt;
&lt;br /&gt;
==Restricţii şi precizări==&lt;br /&gt;
numele funcției va fi oglindire&lt;br /&gt;
se recomandă evitarea folosirii unor structuri de date suplimentare&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3789 FListaOglindire&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def oglindire(p):&lt;br /&gt;
  anterior = None&lt;br /&gt;
  curent = p&lt;br /&gt;
  urmator = None&lt;br /&gt;
&lt;br /&gt;
  while curent is not None:&lt;br /&gt;
    urmator = curent.urm&lt;br /&gt;
    curent.urm = anterior&lt;br /&gt;
    anterior = curent&lt;br /&gt;
    curent = urmator&lt;br /&gt;
&lt;br /&gt;
  p = anterior  # Actualizăm referința către primul nod&lt;br /&gt;
  return p&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru afișarea listei&lt;br /&gt;
def afisare_lista(p):&lt;br /&gt;
  while p is not None:&lt;br /&gt;
    print(p.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    p = p.urm&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
nod1 = Nod(1)&lt;br /&gt;
nod2 = Nod(2)&lt;br /&gt;
nod3 = Nod(3)&lt;br /&gt;
&lt;br /&gt;
nod1.urm = nod2&lt;br /&gt;
nod2.urm = nod3&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&lt;br /&gt;
nod1 = oglindire(nod1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista oglindita:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1172_%E2%80%93_FList%C4%83_Num%C4%83rare&amp;diff=9758</id>
		<title>1172 – FListă Numărare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1172_%E2%80%93_FList%C4%83_Num%C4%83rare&amp;diff=9758"/>
		<updated>2024-04-01T13:21:43Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    int numarare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care determina și returnează numărul de elemente memorate în lista pentru care primul element are adresa memorată în pointerul p.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1172 FListaNumarare&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = None&lt;br /&gt;
&lt;br /&gt;
def create_linked_list(elements):&lt;br /&gt;
  if not elements:&lt;br /&gt;
    return None&lt;br /&gt;
  head = Node(elements[0])&lt;br /&gt;
  current = head&lt;br /&gt;
  for element in elements[1:]:&lt;br /&gt;
    current.next = Node(element)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
def numarare(p):&lt;br /&gt;
  count = 0&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    count += 1&lt;br /&gt;
    current = current.next&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
def main():&lt;br /&gt;
  # Creăm o listă de elemente&lt;br /&gt;
  elements = [1, 2, 3, 4]&lt;br /&gt;
&lt;br /&gt;
  # Creăm lista liniară simplu înlănțuită&lt;br /&gt;
  p = create_linked_list(elements)&lt;br /&gt;
&lt;br /&gt;
  # Apelăm funcția numarare pentru a număra elementele listei&lt;br /&gt;
  result = numarare(p)&lt;br /&gt;
  print(&amp;quot;Numărul de elemente în listă este:&amp;quot;, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1173_%E2%80%93_FList%C4%83_Num%C4%83rare1&amp;diff=9757</id>
		<title>1173 – FListă Numărare1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1173_%E2%80%93_FList%C4%83_Num%C4%83rare1&amp;diff=9757"/>
		<updated>2024-04-01T13:21:10Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: /* Important */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    int numarare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care determina și returnează numărul perechi de elemente consecutive egale din lista pentru care primul element are adresa memorată în pointerul p.&lt;br /&gt;
&lt;br /&gt;
==Exemplu==&lt;br /&gt;
Dacă lista contine valorile (1 6 6 4 5 5 5 1) funcția va returna valoarea 3.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1173 FListaNumarare1&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = None&lt;br /&gt;
&lt;br /&gt;
def build_linked_list(values):&lt;br /&gt;
  if not values:&lt;br /&gt;
    return None&lt;br /&gt;
  &lt;br /&gt;
  head = Node(values[0])&lt;br /&gt;
  current = head&lt;br /&gt;
  &lt;br /&gt;
  for value in values[1:]:&lt;br /&gt;
    current.next = Node(value)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
def numarare(p):&lt;br /&gt;
  if p is None:&lt;br /&gt;
    return 0&lt;br /&gt;
  &lt;br /&gt;
  count = 0&lt;br /&gt;
  current = p&lt;br /&gt;
  &lt;br /&gt;
  while current.next is not None:&lt;br /&gt;
    if current.info == current.next.info:&lt;br /&gt;
      count += 1&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
def main():&lt;br /&gt;
  values = [1, 6, 6, 4, 5, 5, 5, 1]&lt;br /&gt;
  head = build_linked_list(values)&lt;br /&gt;
  &lt;br /&gt;
  result = numarare(head)&lt;br /&gt;
  print(&amp;quot;Numărul de perechi de elemente consecutive egale:&amp;quot;, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4164_%E2%80%93_Fadaug%C4%83%C3%8Enainte&amp;diff=9756</id>
		<title>4164 – FadaugăÎnainte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4164_%E2%80%93_Fadaug%C4%83%C3%8Enainte&amp;diff=9756"/>
		<updated>2024-04-01T13:20:22Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct Nod{       int info;       Nod *leg;     };  în care câmpul info memorează un număr întreg, iar câmpul leg memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      void FAdaugaInainte(Nod * &amp;amp;head);  care, în lista pentru care primul element are adresa memorată...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct Nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      Nod *leg;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul leg memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void FAdaugaInainte(Nod * &amp;amp;head);&lt;br /&gt;
&lt;br /&gt;
care, în lista pentru care primul element are adresa memorată în pointerul head, inserează inainte de fiecare nod cu informația impară dublul său. Lista are inițial cel puțin un element. Dacă lista nu are noduri cu informația impară, lista rămâne neschimbată. De exemplu, dacă lista conține inițial informațiile 1,7,3,4,13, atunci la final lista va fi: 2,1,14,7,6,3,4,26,13.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Se va rezolva în python.&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4164 FAdaugaInainte&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.leg = None&lt;br /&gt;
&lt;br /&gt;
def FAdaugaInainte(head):&lt;br /&gt;
  nod_curent = head&lt;br /&gt;
  while nod_curent is not None:&lt;br /&gt;
    if nod_curent.info % 2 != 0:&lt;br /&gt;
      nod_nou = Nod(nod_curent.info * 2)&lt;br /&gt;
      nod_nou.leg = nod_curent&lt;br /&gt;
      if nod_curent == head:&lt;br /&gt;
        head = nod_nou&lt;br /&gt;
      else:&lt;br /&gt;
        nod_anterior.leg = nod_nou&lt;br /&gt;
    nod_anterior = nod_curent&lt;br /&gt;
    nod_curent = nod_curent.leg&lt;br /&gt;
&lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
def afisare(head):&lt;br /&gt;
  nod_curent = head&lt;br /&gt;
  while nod_curent is not None:&lt;br /&gt;
    print(nod_curent.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    nod_curent = nod_curent.leg&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
def main():&lt;br /&gt;
  # Construim lista liniară simplu înlănțuită de test&lt;br /&gt;
  head = Nod(1)&lt;br /&gt;
  head.leg = Nod(7)&lt;br /&gt;
  head.leg.leg = Nod(3)&lt;br /&gt;
  head.leg.leg.leg = Nod(4)&lt;br /&gt;
  head.leg.leg.leg.leg = Nod(13)&lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
  afisare(head)&lt;br /&gt;
&lt;br /&gt;
  # Apelam functia FAdaugaInainte pentru a insera dublul valorilor impare inaintea fiecarei valori impare&lt;br /&gt;
  head = FAdaugaInainte(head)&lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista dupa inserare:&amp;quot;)&lt;br /&gt;
  afisare(head)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1173_%E2%80%93_FList%C4%83_Num%C4%83rare1&amp;diff=9755</id>
		<title>1173 – FListă Numărare1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1173_%E2%80%93_FList%C4%83_Num%C4%83rare1&amp;diff=9755"/>
		<updated>2024-04-01T13:12:10Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      int numarare(nod * p);  care determina și returnează numărul perechi de elemente consecutive e...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    int numarare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care determina și returnează numărul perechi de elemente consecutive egale din lista pentru care primul element are adresa memorată în pointerul p.&lt;br /&gt;
&lt;br /&gt;
==Exemplu==&lt;br /&gt;
Dacă lista contine valorile (1 6 6 4 5 5 5 1) funcția va returna valoarea 3.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1173 FListaNumarare1&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = None&lt;br /&gt;
&lt;br /&gt;
def build_linked_list(values):&lt;br /&gt;
  if not values:&lt;br /&gt;
    return None&lt;br /&gt;
  &lt;br /&gt;
  head = Node(values[0])&lt;br /&gt;
  current = head&lt;br /&gt;
  &lt;br /&gt;
  for value in values[1:]:&lt;br /&gt;
    current.next = Node(value)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
def numarare(p):&lt;br /&gt;
  if p is None:&lt;br /&gt;
    return 0&lt;br /&gt;
  &lt;br /&gt;
  count = 0&lt;br /&gt;
  current = p&lt;br /&gt;
  &lt;br /&gt;
  while current.next is not None:&lt;br /&gt;
    if current.info == current.next.info:&lt;br /&gt;
      count += 1&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
def main():&lt;br /&gt;
  values = [1, 6, 6, 4, 5, 5, 5, 1]&lt;br /&gt;
  head = build_linked_list(values)&lt;br /&gt;
  &lt;br /&gt;
  result = numarare(head)&lt;br /&gt;
  print(&amp;quot;Numărul de perechi de elemente consecutive egale:&amp;quot;, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1126_-_Betisoare&amp;diff=9754</id>
		<title>1126 - Betisoare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1126_-_Betisoare&amp;diff=9754"/>
		<updated>2024-04-01T12:51:11Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se presupune că unele dintre primele instrumente de calcul au fost beţişoarele de socotit. În problema noastră vom considera un număr ca fiind o succesiune de unul sau mai multe beţişoare, un beţişor fiind reprezentat de litera I. Într-o expresie, între oricare două numere există semnul + sau semnul *.  Exemple: ;Numere     I     III     IIIIIIIIIII ;Expresii     III     II*III     I+I*III+IIIIIII  ==Cerinţă== Scrieţi un program care evaluează ast...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se presupune că unele dintre primele instrumente de calcul au fost beţişoarele de socotit. În problema noastră vom considera un număr ca fiind o succesiune de unul sau mai multe beţişoare, un beţişor fiind reprezentat de litera I. Într-o expresie, între oricare două numere există semnul + sau semnul *.&lt;br /&gt;
&lt;br /&gt;
Exemple:&lt;br /&gt;
;Numere&lt;br /&gt;
    I&lt;br /&gt;
    III&lt;br /&gt;
    IIIIIIIIIII&lt;br /&gt;
;Expresii&lt;br /&gt;
    III&lt;br /&gt;
    II*III&lt;br /&gt;
    I+I*III+IIIIIII&lt;br /&gt;
&lt;br /&gt;
==Cerinţă==&lt;br /&gt;
Scrieţi un program care evaluează astfel de expresii.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare betisoare.in conține pe prima linie o valoare naturală n, care indică numărul de expresii care trebuie evaluate. Fiecare dintre următoarele n linii conţine un şir de maximum 1.000.000 caractere care reprezintă expresia ce trebuie evaluată.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire betisoare.out va conține pe fiecare linie i dintre primele n linii câte un număr întreg care reprezintă rezultatul evaluării expresiei de pe linia i+1 din fişierul de intrare.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ n ≤ 10&lt;br /&gt;
*O expresie poate avea cel puţin 1 caracter şi cel mult 1.000.010 de caractere.&lt;br /&gt;
*Valorile calculate pe parcurs şi valoarea finală au maximum 18 cifre.&lt;br /&gt;
*Dintre teste, 26% conţin numai operaţii de adunare, 22% numai operaţii de înmulţire, iar restul de 52% conţin ambele operaţii.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;betisoare.in&lt;br /&gt;
:1&lt;br /&gt;
:I+I*III+IIIIIII&lt;br /&gt;
&lt;br /&gt;
;betisoare.out&lt;br /&gt;
:11&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;betisoare.in&lt;br /&gt;
:1&lt;br /&gt;
:I+I*III+IIIIIII&lt;br /&gt;
&lt;br /&gt;
;betisoare.out&lt;br /&gt;
:4&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;betisoare.in&lt;br /&gt;
:II2+3*II&lt;br /&gt;
&lt;br /&gt;
;betisoare.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1126 Betisoare&lt;br /&gt;
def verificare_date_intrare(expresie):&lt;br /&gt;
  caractere_permise = {&#039;I&#039;, &#039;+&#039;, &#039;*&#039;}&lt;br /&gt;
  for caracter in expresie:&lt;br /&gt;
    if caracter not in caractere_permise and not caracter.isdigit():&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def evaluare_expresie(expresie):&lt;br /&gt;
  stiva = []&lt;br /&gt;
  numar = 0&lt;br /&gt;
  for caracter in expresie:&lt;br /&gt;
    if caracter == &#039;I&#039;:&lt;br /&gt;
      numar += 1&lt;br /&gt;
    elif caracter == &#039;+&#039;:&lt;br /&gt;
      stiva.append(numar)&lt;br /&gt;
      stiva.append(&#039;+&#039;)&lt;br /&gt;
      numar = 0&lt;br /&gt;
    elif caracter == &#039;*&#039;:&lt;br /&gt;
      stiva.append(numar)&lt;br /&gt;
      stiva.append(&#039;*&#039;)&lt;br /&gt;
      numar = 0&lt;br /&gt;
    elif caracter.isdigit():&lt;br /&gt;
      numar = numar * 10 + int(caracter)&lt;br /&gt;
&lt;br /&gt;
  # Adăugăm ultimul număr la stivă&lt;br /&gt;
  stiva.append(numar)&lt;br /&gt;
&lt;br /&gt;
  rezultat = 0&lt;br /&gt;
  operatie = &#039;+&#039;&lt;br /&gt;
  while stiva:&lt;br /&gt;
    element = stiva.pop()&lt;br /&gt;
    if isinstance(element, int):&lt;br /&gt;
      if operatie == &#039;+&#039;:&lt;br /&gt;
        rezultat += element&lt;br /&gt;
      elif operatie == &#039;*&#039;:&lt;br /&gt;
        rezultat *= element&lt;br /&gt;
    else:&lt;br /&gt;
      operatie = element&lt;br /&gt;
&lt;br /&gt;
  return rezultat&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;betisoare.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = f.readline().strip()&lt;br /&gt;
    try:&lt;br /&gt;
      n = int(n)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
      with open(&amp;quot;betisoare.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(&amp;quot;Date de intrare invalide!\n&amp;quot;)&lt;br /&gt;
      return&lt;br /&gt;
&lt;br /&gt;
    expresii = [f.readline().strip() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
  rezultate = []&lt;br /&gt;
  for expresie in expresii:&lt;br /&gt;
    if not verificare_date_intrare(expresie):&lt;br /&gt;
      rezultate.append(&amp;quot;Date invalide&amp;quot;)&lt;br /&gt;
      continue&lt;br /&gt;
    rezultat = evaluare_expresie(expresie)&lt;br /&gt;
    rezultate.append(rezultat)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;betisoare.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
    for rezultat in rezultate:&lt;br /&gt;
      f.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3543_-_StringPushPop&amp;diff=9753</id>
		<title>3543 - StringPushPop</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3543_-_StringPushPop&amp;diff=9753"/>
		<updated>2024-04-01T12:06:20Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Cerința== Se dă un string s. Asupra acestuia, se aplică 5 tipuri de operații: *(1, c) – se adaugă caracterul c la începutul string-ului *(2, c) – se adaugă caracterul c la finalul string-ului *(3) – se șterge primul caracter al string-ului *(4) – se șterge ultimul caracter al string-ului *(5) – string-ul se va transforma în răsturnatul său Să se afișeze string-ul rezultat după cele q operații.  ==Date de intrare== Programul citește de la tastatur...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un string s. Asupra acestuia, se aplică 5 tipuri de operații:&lt;br /&gt;
*(1, c) – se adaugă caracterul c la începutul string-ului&lt;br /&gt;
*(2, c) – se adaugă caracterul c la finalul string-ului&lt;br /&gt;
*(3) – se șterge primul caracter al string-ului&lt;br /&gt;
*(4) – se șterge ultimul caracter al string-ului&lt;br /&gt;
*(5) – string-ul se va transforma în răsturnatul său&lt;br /&gt;
Să se afișeze string-ul rezultat după cele q operații.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură string-ul s, numărul natural q si cele q query-uri.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Programul va afișa pe ecran string-ul rezultat.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*q si lungimea inițială a lui s sunt mai mici sau egale decat 100.000&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:fnic&lt;br /&gt;
:7&lt;br /&gt;
:1 a&lt;br /&gt;
:3&lt;br /&gt;
:4&lt;br /&gt;
:1 o&lt;br /&gt;
:2 b&lt;br /&gt;
:5&lt;br /&gt;
:1 p&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:pbinfo&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:abc&lt;br /&gt;
:-3&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Date invalide: lungimea string-ului sau numărul de operații sunt invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3543 StringPushPop&lt;br /&gt;
def verifica_date_intrare(s, q):&lt;br /&gt;
    if len(s) &amp;gt; 100000 or q &amp;lt;= 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    s = input(&amp;quot;Introduceți string-ul s: &amp;quot;).strip()  # citim string-ul s de la tastatură și afișăm un mesaj de prompt&lt;br /&gt;
    q = input(&amp;quot;Introduceți numărul de operații q: &amp;quot;).strip()  # citim numărul de operații q de la tastatură și îl convertim la întreg&lt;br /&gt;
&lt;br /&gt;
    # Verificăm datele de intrare&lt;br /&gt;
    if not verifica_date_intrare(s, int(q)):&lt;br /&gt;
        print(&amp;quot;Date invalide: lungimea string-ului sau numărul de operații sunt invalide.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for _ in range(int(q)):&lt;br /&gt;
        op = input(&amp;quot;Introduceți operația și caracterul asociat (exemplu: &#039;1 a&#039;): &amp;quot;).strip().split()  # citim operația și caracterul asociat&lt;br /&gt;
        cod = int(op[0])&lt;br /&gt;
        if cod == 1:&lt;br /&gt;
            c = op[1]&lt;br /&gt;
            s = c + s  # adăugăm caracterul la începutul string-ului&lt;br /&gt;
        elif cod == 2:&lt;br /&gt;
            c = op[1]&lt;br /&gt;
            s = s + c  # adăugăm caracterul la finalul string-ului&lt;br /&gt;
        elif cod == 3:&lt;br /&gt;
            s = s[1:]  # ștergem primul caracter al string-ului&lt;br /&gt;
        elif cod == 4:&lt;br /&gt;
            s = s[:-1]  # ștergem ultimul caracter al string-ului&lt;br /&gt;
        elif cod == 5:&lt;br /&gt;
            s = s[::-1]  # inversăm string-ul&lt;br /&gt;
&lt;br /&gt;
    print(s)  # afișăm string-ul rezultat&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1000_-_CNP&amp;diff=9752</id>
		<title>1000 - CNP</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1000_-_CNP&amp;diff=9752"/>
		<updated>2024-04-01T11:51:04Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Cerința== Se consideră un fişier care conţine informaţii despre mai multe persoane, sub o formă nestructurată. Informaţiile sunt dispuse pe linii de maxim 200 de caractere şi pot conţine CNP-uri valide. Ştiind că CNP-ul unei persoane este un şir de exact 13 cifre consecutive, scrieţi un program care determină şi scrie în fişierul de ieșire, pe linii distincte, toate CNP-urile extrase din text. Dacă în fișierul de intrare nu se află niciun CNP, în fi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se consideră un fişier care conţine informaţii despre mai multe persoane, sub o formă nestructurată. Informaţiile sunt dispuse pe linii de maxim 200 de caractere şi pot conţine CNP-uri valide. Ştiind că CNP-ul unei persoane este un şir de exact 13 cifre consecutive, scrieţi un program care determină şi scrie în fişierul de ieșire, pe linii distincte, toate CNP-urile extrase din text. Dacă în fișierul de intrare nu se află niciun CNP, în fișierul de ieșire se va afișa numai valoarea 0.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare cnp.in conține informațiile date.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire cnp.out va conține CNP-urile determinate, câte unul pe o linie, sau valoarea 0 dacă în fișierul de intrare nu există CNP-uri.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;cnp.in&lt;br /&gt;
:Popescu Grigore, 14 ani, 1991212122334;&lt;br /&gt;
:Gigel  Banu - 1031102453435, Bujorului 7;&lt;br /&gt;
:Dana Marin: 2690405358687, fara viza, 2450609987654  -&lt;br /&gt;
:Jane Doe&lt;br /&gt;
&lt;br /&gt;
;cnp.out&lt;br /&gt;
:1991212122334&lt;br /&gt;
:1031102453435&lt;br /&gt;
:2690405358687&lt;br /&gt;
:2450609987654&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;cnp.in&lt;br /&gt;
:Popescu Grigore, 14 ani, 1991212134;&lt;br /&gt;
:Gigel  Banu - 103110245Bujorului 7;&lt;br /&gt;
:Dana Marin: 269-04-05-358687, fara viza, 2+450609+987654 -&lt;br /&gt;
:Jane Doe&lt;br /&gt;
&lt;br /&gt;
;cnp.out&lt;br /&gt;
:Date invalide: Nu exista CNP-uri valide in fisierul de intrare.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1000 CNP&lt;br /&gt;
import re&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
def extrage_cnp(text):&lt;br /&gt;
  regex = r&#039;\b\d{13}\b&#039;  # căutăm grupuri de exact 13 cifre&lt;br /&gt;
  return re.findall(regex, text)&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(nume_fisier):&lt;br /&gt;
  if not os.path.exists(nume_fisier):&lt;br /&gt;
    return False&lt;br /&gt;
  if not os.path.isfile(nume_fisier):&lt;br /&gt;
    return False&lt;br /&gt;
  if not os.access(nume_fisier, os.R_OK):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  nume_fisier_intrare = &#039;cnp.in&#039;&lt;br /&gt;
  nume_fisier_iesire = &#039;cnp.out&#039;&lt;br /&gt;
&lt;br /&gt;
  if not verifica_date_intrare(nume_fisier_intrare):&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date invalide: Fisierul de intrare nu poate fi citit.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Verificare dacă fișierul de intrare este gol&lt;br /&gt;
  if os.path.getsize(nume_fisier_intrare) == 0:&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date invalide: Fisierul de intrare este gol.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
    &lt;br /&gt;
    with open(nume_fisier_intrare, &#039;r&#039;) as fin:&lt;br /&gt;
      text = fin.read()&lt;br /&gt;
    &lt;br /&gt;
    cnp_list = extrage_cnp(text)&lt;br /&gt;
    &lt;br /&gt;
    if cnp_list:&lt;br /&gt;
      with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
        for cnp in cnp_list:&lt;br /&gt;
          fout.write(cnp + &#039;\n&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
      with open(nume_fisier_iesire, &#039;w&#039;) as fout:&lt;br /&gt;
        fout.write(&amp;quot;Date invalide: Nu exista CNP-uri valide in fisierul de intrare.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3345_-_Divimax&amp;diff=9751</id>
		<title>3345 - Divimax</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3345_-_Divimax&amp;diff=9751"/>
		<updated>2024-04-01T11:40:36Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunț== Având note mici la matematică, Gicuţa primeşte spre rezolvare următoarea problemă (uşoară pentru clasa a X-a) pentru a-şi mări nota: “Dându-se un şir X cu N numere naturale nenule: X 1 , X 2,…., X N, să se determine cel mai mare divizor prim dintre toti divizorii tuturor numerelor din şirul X“. Însă, pentru a obţine nota 10, el mai are de rezolvat o cerinţă a problemei: să determine cel mai mare număr care se poate forma din concatenarea...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunț==&lt;br /&gt;
Având note mici la matematică, Gicuţa primeşte spre rezolvare următoarea problemă (uşoară pentru clasa a X-a) pentru a-şi mări nota: “Dându-se un şir X cu N numere naturale nenule: X 1 , X 2,…., X N, să se determine cel mai mare divizor prim dintre toti divizorii tuturor numerelor din şirul X“.&lt;br /&gt;
Însă, pentru a obţine nota 10, el mai are de rezolvat o cerinţă a problemei: să determine cel mai mare număr care se poate forma din concatenarea divizorilor primi maximi ai fiecărui număr din şirul X.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Scrieţi un program care să citească numărul natural N şi cele N numere naturale din şirul X şi care să determine:&lt;br /&gt;
1. numărul natural P reprezentând cel mai mare divizor prim dintre toţi divizorii tuturor numerelor din şirul X&lt;br /&gt;
2. cel mai mare număr natural K ce se poate forma din concatenarea divizorilor primi maximi ai fiecărui număr din şirul X.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare divimax.in conține conţine N+1 linii. Pe prima linie sunt scrise doua numere naturale C și N, separate printr-un spațiu. Pe fiecare dintre următoarele N linii este scris câte un număr din şirului X, astfel încât pe linia i+1 din fişier este scris numărul Xi (1≤i≤N).&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire divimax.out va conține o linie.&lt;br /&gt;
- Dacă C=1, atunci se va rezolva doar cerința 1 a problemei, iar pe prima linie se va scrie numărul natural P reprezentând raspunsul la cerința 1.&lt;br /&gt;
- Dacă C=2, atunci se va rezolva doar cerința 2 a problemei, iar pe prima linie a fişierului se va scrie numărul natural K, reprezentând răspunsul la cerința 2.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*0 ≤ N ≤ 3030, N număr natural&lt;br /&gt;
*C=1 sau C=2&lt;br /&gt;
*2 ≤ Xi ≤ 3500, unde 1 ≤ i ≤N&lt;br /&gt;
*Concatenarea a două numere inseamnă lipirea lor. (exemplu: Prin concatenarea numerelor 325 şi 684 rezultă numărul 325684, iar concatenându-le invers, obţinem 684325)&lt;br /&gt;
*Numărul determinat la cerinţa 2 poate avea cel mult 8000 de cifre&lt;br /&gt;
*Pentru rezolvarea corectă a cerinţei 1 se acordă 30% din punctaj, iar pentru rezolvarea corectă a cerinţei 2 se acordă 70% din punctaj.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;divimax.in&lt;br /&gt;
:1 5&lt;br /&gt;
:2 &lt;br /&gt;
:36 &lt;br /&gt;
:15 &lt;br /&gt;
:12 &lt;br /&gt;
:33&lt;br /&gt;
&lt;br /&gt;
;divimax.out&lt;br /&gt;
:11&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
C=1, se va rezolva doar cerinta 1.&lt;br /&gt;
Cel mai mare divizor prim al lui 2 este 2, cel mai mare divizor prim al lui 36 este 3, cel mai mare divizor prim al lui 15 este 5, cel mai mare divizor prim al lui 12 este 3, cel mai mare divizor al lui 33 este 11.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;divimax.in&lt;br /&gt;
:3 3&lt;br /&gt;
:8&lt;br /&gt;
:8&lt;br /&gt;
:4000&lt;br /&gt;
&lt;br /&gt;
;divimax.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3345 divimax&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
  if numar &amp;lt; 2:&lt;br /&gt;
    return False&lt;br /&gt;
  for i in range(2, int(numar ** 0.5) + 1):&lt;br /&gt;
    if numar % i == 0:&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def determina_divizori(numar):&lt;br /&gt;
  divizori = []&lt;br /&gt;
  for i in range(1, numar + 1):&lt;br /&gt;
    if numar % i == 0:&lt;br /&gt;
      divizori.append(i)&lt;br /&gt;
  return divizori&lt;br /&gt;
&lt;br /&gt;
def determina_cel_mai_mare_divizor_prim(lista_numere):&lt;br /&gt;
  divizori_prim = []&lt;br /&gt;
  for numar in lista_numere:&lt;br /&gt;
    divizori = determina_divizori(numar)&lt;br /&gt;
    for divizor in divizori:&lt;br /&gt;
      if este_prim(divizor):&lt;br /&gt;
        divizori_prim.append(divizor)&lt;br /&gt;
  return max(divizori_prim)&lt;br /&gt;
&lt;br /&gt;
def determina_cel_mai_mare_numar_concatenare(lista_numere):&lt;br /&gt;
  divizori_prim = []&lt;br /&gt;
  for numar in lista_numere:&lt;br /&gt;
    divizori = determina_divizori(numar)&lt;br /&gt;
    for divizor in divizori:&lt;br /&gt;
      if este_prim(divizor):&lt;br /&gt;
        divizori_prim.append(divizor)&lt;br /&gt;
  divizori_prim.sort(reverse=True)&lt;br /&gt;
  return int(&#039;&#039;.join(map(str, divizori_prim)))&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(C, N, numere):&lt;br /&gt;
  if C not in [1, 2]:&lt;br /&gt;
    return False&lt;br /&gt;
  if not (0 &amp;lt;= N &amp;lt;= 3030):&lt;br /&gt;
    return False&lt;br /&gt;
  for numar in numere:&lt;br /&gt;
    if not (2 &amp;lt;= numar &amp;lt;= 3500):&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citire date de intrare&lt;br /&gt;
  with open(&#039;divimax.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
    C, N = map(int, f.readline().split())&lt;br /&gt;
    numere = [int(f.readline()) for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
  # Verificare date de intrare&lt;br /&gt;
  if not verifica_date_intrare(C, N, numere):&lt;br /&gt;
    # Scriere mesaj de date invalide in fisierul de iesire&lt;br /&gt;
    with open(&#039;divimax.out&#039;, &#039;w&#039;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Calculare rezultat in functie de C&lt;br /&gt;
  if C == 1:&lt;br /&gt;
    P = determina_cel_mai_mare_divizor_prim(numere)&lt;br /&gt;
    rezultat = P&lt;br /&gt;
  elif C == 2:&lt;br /&gt;
    K = determina_cel_mai_mare_numar_concatenare(numere)&lt;br /&gt;
    rezultat = K&lt;br /&gt;
&lt;br /&gt;
  # Scriere rezultat in fisierul de iesire&lt;br /&gt;
  with open(&#039;divimax.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
    f.write(str(rezultat) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4165_%E2%80%93_FinserareKX&amp;diff=9750</id>
		<title>4165 – FinserareKX</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4165_%E2%80%93_FinserareKX&amp;diff=9750"/>
		<updated>2024-04-01T10:47:44Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct Nod     {       int info;       Nod *leg;     };  în care câmpul info memorează un număr întreg, iar câmpul leg memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      void FInserareKX(Nod * &amp;amp;head, int k, int x);  care, în lista pentru care primul element are...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct Nod&lt;br /&gt;
    {&lt;br /&gt;
      int info;&lt;br /&gt;
      Nod *leg;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul leg memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void FInserareKX(Nod * &amp;amp;head, int k, int x);&lt;br /&gt;
&lt;br /&gt;
care, în lista pentru care primul element are adresa memorată în pointerul head, inserează pe poziția k un nou nod cu informația x. Dacă lista are mai puțin de k noduri, inserarea se face la sfârșitul listei, iar dacă k ≤ 1, atunci inserarea se va face la începutul listei. Lista poate fi inițial și vidă, caz în care head = NULL. De exemplu, dacă lista conține inițial informațiile 1, 2, 3, 4, 5, k = 3 și x = 100, atunci lista devine: 1, 2, 100, 3, 4, 5.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Rezolvarea se va face în python.&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4165 FInserareKX&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = None&lt;br /&gt;
&lt;br /&gt;
def FInserareKX(head, k, x):&lt;br /&gt;
  new_node = Node(x)&lt;br /&gt;
  &lt;br /&gt;
  # Cazul în care lista este inițial vidă sau inserăm la începutul listei&lt;br /&gt;
  if head is None or k &amp;lt;= 1:&lt;br /&gt;
    new_node.next = head&lt;br /&gt;
    head = new_node&lt;br /&gt;
    return head&lt;br /&gt;
  &lt;br /&gt;
  # Cazul în care lista are cel puțin un nod și inserăm pe poziția k sau la sfârșitul listei&lt;br /&gt;
  current = head&lt;br /&gt;
  prev = None&lt;br /&gt;
  count = 1&lt;br /&gt;
  &lt;br /&gt;
  while current and count &amp;lt; k:&lt;br /&gt;
    prev = current&lt;br /&gt;
    current = current.next&lt;br /&gt;
    count += 1&lt;br /&gt;
  &lt;br /&gt;
  if current is None:  # Inserare la sfârșitul listei&lt;br /&gt;
    prev.next = new_node&lt;br /&gt;
  else:  # Inserare pe poziția k&lt;br /&gt;
    new_node.next = current&lt;br /&gt;
    prev.next = new_node&lt;br /&gt;
  &lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru afișarea listei&lt;br /&gt;
def afisare_lista(head):&lt;br /&gt;
  current = head&lt;br /&gt;
  while current:&lt;br /&gt;
    print(current.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  # Inițializare lista cu câteva noduri&lt;br /&gt;
  head = Node(1)&lt;br /&gt;
  head.next = Node(2)&lt;br /&gt;
  head.next.next = Node(3)&lt;br /&gt;
  head.next.next.next = Node(4)&lt;br /&gt;
  head.next.next.next.next = Node(5)&lt;br /&gt;
  &lt;br /&gt;
  # Inserare pe poziția k = 3 a valorii x = 100&lt;br /&gt;
  head = FInserareKX(head, 3, 100)&lt;br /&gt;
  &lt;br /&gt;
  # Afișare lista rezultată&lt;br /&gt;
  afisare_lista(head)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3676_-_ABK1K2&amp;diff=9749</id>
		<title>3676 - ABK1K2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3676_-_ABK1K2&amp;diff=9749"/>
		<updated>2024-04-01T10:42:31Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Cerința== Se dau patru numere naturale a, b, k1, k2. Determinați numărul de submulțimi formate din două elemente numere naturale x și y, cu x și y cuprinse între a și b, astfel încât cel mai mare divizor comun al lui x și y să fie multiplu de k1 sau multiplu de k2.  ==Date de intrare== Fișierul de intrare conține patru numere, câte unul pe rând, în ordine: a, b, k1, k2 cu semnificația de mai sus.  ==Date de ieșire== În fișierul de ieșire se va scrie p...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dau patru numere naturale a, b, k1, k2. Determinați numărul de submulțimi formate din două elemente&lt;br /&gt;
numere naturale x și y, cu x și y cuprinse între a și b, astfel încât cel mai mare divizor comun al lui x și y să fie multiplu de k1 sau multiplu de k2.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare conține patru numere, câte unul pe rând, în ordine: a, b, k1, k2 cu semnificația de mai sus.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
În fișierul de ieșire se va scrie pe prima linie valoarea cerută.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*a și b sunt cuprinse între 1 și inclusiv 109, a ≤ b.&lt;br /&gt;
*k1 și k2 sunt cuprinse între 2 și 109 inclusiv.&lt;br /&gt;
*perechile pentru care avem x = y nu se numără.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;abk1k2.in&lt;br /&gt;
:4&lt;br /&gt;
:10&lt;br /&gt;
:2&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
;abk1k2.out&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Submulțimile care se numără sunt: 4, 6 4, 8 4, 10 6, 8 6, 10 8, 10.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;abk1k2.in&lt;br /&gt;
:10&lt;br /&gt;
:20&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
;abk1k2.out&lt;br /&gt;
:Date invalide: Nu sunt suficiente date in fisierul de intrare&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3676 abk1k2&lt;br /&gt;
from math import gcd&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(a, b, k1, k2):&lt;br /&gt;
  # Verificăm dacă a și b sunt în intervalul specificat&lt;br /&gt;
  if not (1 &amp;lt;= a &amp;lt;= b &amp;lt;= 10**9):&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
  # Verificăm dacă k1 și k2 sunt în intervalul specificat&lt;br /&gt;
  if not (2 &amp;lt;= k1 &amp;lt;= 10**9 and 2 &amp;lt;= k2 &amp;lt;= 10**9):&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def numar_submultimi(a, b, k1, k2):&lt;br /&gt;
  if not verificare_date_intrare(a, b, k1, k2):&lt;br /&gt;
    return &amp;quot;Date invalide: Parametrii introdusi sunt incorecti.&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  count = 0&lt;br /&gt;
  for x in range(a, b + 1):&lt;br /&gt;
    for y in range(x + 1, b + 1):&lt;br /&gt;
      if gcd(x, y) % k1 == 0 or gcd(x, y) % k2 == 0:&lt;br /&gt;
        count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citim datele de intrare&lt;br /&gt;
  with open(&amp;quot;abk1k2.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    linii = f.readlines()&lt;br /&gt;
  &lt;br /&gt;
  # Eliminăm liniile goale și spațiile suplimentare&lt;br /&gt;
  linii = [linie.strip() for linie in linii if linie.strip()]&lt;br /&gt;
  &lt;br /&gt;
  # Verificăm dacă avem suficiente linii pentru a extrage datele&lt;br /&gt;
  if len(linii) != 4:&lt;br /&gt;
    # Scriem mesaj de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;abk1k2.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date invalide: Nu sunt suficiente date in fisierul de intrare&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Extragem datele de intrare&lt;br /&gt;
  a = int(linii[0])&lt;br /&gt;
  b = int(linii[1])&lt;br /&gt;
  k1 = int(linii[2])&lt;br /&gt;
  k2 = int(linii[3])&lt;br /&gt;
  &lt;br /&gt;
  # Calculăm numărul de submulțimi dorit&lt;br /&gt;
  rezultat = numar_submultimi(a, b, k1, k2)&lt;br /&gt;
  &lt;br /&gt;
  # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
  with open(&amp;quot;abk1k2.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
    f.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3540_-_Ambuscada&amp;diff=9748</id>
		<title>3540 - Ambuscada</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3540_-_Ambuscada&amp;diff=9748"/>
		<updated>2024-04-01T10:32:12Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Cerința== N soldați, numerotați de la 1 la N, sunt prinși într-o ambuscadă. Asupra lor se execută M atacuri de tun. Atacurile afectează nu doar un soldat, ci un interval de soldați, provocând fiecăruia dintre aceștia o anumită pierdere (damage). De exemplu, atacul (3,7,5) afectează soldații 3,4,5,6,7 cu 5 damage. La început, toți soldații au V vieți. Câți soldați rămân în viață după cele M atacuri?  ==Date de intrare== Fișierul de intrare ambusc...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
N soldați, numerotați de la 1 la N, sunt prinși într-o ambuscadă. Asupra lor se execută M atacuri de tun. Atacurile afectează nu doar un soldat, ci un interval de soldați, provocând fiecăruia dintre aceștia o anumită pierdere (damage). De exemplu, atacul (3,7,5) afectează soldații 3,4,5,6,7 cu 5 damage. La început, toți soldații au V vieți. Câți soldați rămân în viață după cele M atacuri?&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare ambuscada.in conține pe prima linie numerele naturale N, M și V separate prin spații. Pe următoarele M linii se află câte 3 numere naturale i j k separate cu un spațiu, cu semnificația de mai sus.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire ambuscada.out va conține un singur număr natural reprezentând numărul de soldați rămași în viață.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*2 ≤ N ≤ 1.000.000.000, 1 ≤ M ≤ 100.000, 1 ≤ V ≤ 1.000.000.000&lt;br /&gt;
*In toate testele, 1 ≤ i ≤ j ≤ N, 1 ≤ k ≤ V&lt;br /&gt;
*Pentru teste în valoare de 30 de puncte, N&amp;lt;=100.000 și M&amp;lt;=50&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;ambuscada.in&lt;br /&gt;
:6 4 10&lt;br /&gt;
:2 5 2&lt;br /&gt;
:1 3 7&lt;br /&gt;
:2 6 3&lt;br /&gt;
:3 5 6&lt;br /&gt;
&lt;br /&gt;
;ambuscada.out&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Inițial toți soldații aveau 10 vieți.&lt;br /&gt;
După prima tragere: 10 8 8 8 8 10&lt;br /&gt;
După a doua tragere: 3 1 1 8 8 10&lt;br /&gt;
După a treia tragere: 3 0 0 5 5 7&lt;br /&gt;
După a patra tragere: 3 0 0 0 0 7&lt;br /&gt;
In final, 2 soldați au rămas în viață: primul și ultimul.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;ambuscada.in&lt;br /&gt;
:5 2 &lt;br /&gt;
:2 7 8&lt;br /&gt;
:1 &lt;br /&gt;
&lt;br /&gt;
;ambuscada.out&lt;br /&gt;
:Date invalide: Linia 1 nu contine suficiente valori&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3540 Ambuscada&lt;br /&gt;
def verificare_date_intrare(N, M, V, atacuri):&lt;br /&gt;
  # Verificăm dacă N, M și V sunt în intervalul specificat&lt;br /&gt;
  if not (2 &amp;lt;= N &amp;lt;= 1000000000 and 1 &amp;lt;= M &amp;lt;= 100000 and 1 &amp;lt;= V &amp;lt;= 1000000000):&lt;br /&gt;
    return False&lt;br /&gt;
  &lt;br /&gt;
  # Verificăm fiecare atac&lt;br /&gt;
  for atac in atacuri:&lt;br /&gt;
    i, j, k = atac&lt;br /&gt;
    # Verificăm dacă i, j și k sunt în intervalul specificat&lt;br /&gt;
    if not (1 &amp;lt;= i &amp;lt;= j &amp;lt;= N and 1 &amp;lt;= k &amp;lt;= V):&lt;br /&gt;
      return False&lt;br /&gt;
  &lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def soldati_ramasii(N, M, V, atacuri):&lt;br /&gt;
  # Inițializăm un vector cu viețile soldaților&lt;br /&gt;
  soldati = [V] * N&lt;br /&gt;
  &lt;br /&gt;
  # Parcurgem fiecare atac și actualizăm starea soldaților afectați&lt;br /&gt;
  for atac in atacuri:&lt;br /&gt;
    i, j, k = atac&lt;br /&gt;
    for index in range(i-1, j):&lt;br /&gt;
      soldati[index] -= k&lt;br /&gt;
  &lt;br /&gt;
  # Numărăm câți soldați au vieți pozitive și returnăm rezultatul&lt;br /&gt;
  soldati_ramas = sum(1 for viata in soldati if viata &amp;gt; 0)&lt;br /&gt;
  return soldati_ramas&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citim datele de intrare din fișier&lt;br /&gt;
  with open(&#039;ambuscada.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
    linii = f.readlines()&lt;br /&gt;
  &lt;br /&gt;
  # Verificăm dacă există suficiente linii în fișierul de intrare&lt;br /&gt;
  if len(linii) &amp;lt; 2:&lt;br /&gt;
    # Scriem mesaj de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&#039;ambuscada.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date invalide: Nu sunt suficiente date in fisierul de intrare&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Extragem N, M și V din prima linie&lt;br /&gt;
  try:&lt;br /&gt;
    N, M, V = map(int, linii[0].split())&lt;br /&gt;
  except ValueError:&lt;br /&gt;
    # Scriem mesaj de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&#039;ambuscada.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date invalide: Linia 1 nu contine suficiente valori&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Verificăm dacă există suficiente atacuri în fișierul de intrare&lt;br /&gt;
  if len(linii) - 1 &amp;lt; M:&lt;br /&gt;
    # Scriem mesaj de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&#039;ambuscada.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date invalide: Nu sunt suficiente atacuri in fisierul de intrare&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Citim atacurile&lt;br /&gt;
  atacuri = [tuple(map(int, line.split())) for line in linii[1:M+1]]&lt;br /&gt;
  &lt;br /&gt;
  # Verificăm datele de intrare&lt;br /&gt;
  if not verificare_date_intrare(N, M, V, atacuri):&lt;br /&gt;
    # Scriem mesaj de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&#039;ambuscada.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Datele de intrare sunt invalide&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Calculăm numărul de soldați rămași în viață&lt;br /&gt;
  soldati_ramas = soldati_ramasii(N, M, V, atacuri)&lt;br /&gt;
  &lt;br /&gt;
  # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
  with open(&#039;ambuscada.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
    f.write(str(soldati_ramas))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2957_-_Nests&amp;diff=9747</id>
		<title>2957 - Nests</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2957_-_Nests&amp;diff=9747"/>
		<updated>2024-04-01T09:35:17Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Pe vârfurile unui poligon regulat și-au făcut cuibul 𝑁 păsări. Cele 𝑁 vârfuri ale poligonului sunt numerotate cu numere de la 0 la 𝑁−1 în ordine sens trigonometric. Fiecare pasăre se găsește în câte un cuib. La un moment dat păsările își schimbe cuiburile. Se obține astfel o permutare (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) unde 𝑐𝑖 reprezintă cuibul în care s-a mutat pasărea care locuia inițial în cuibul 𝑖. Pentru ca toate...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Pe vârfurile unui poligon regulat și-au făcut cuibul 𝑁 păsări. Cele 𝑁 vârfuri ale poligonului sunt numerotate cu numere de la 0 la 𝑁−1 în ordine sens trigonometric. Fiecare pasăre se găsește în câte un cuib. La un moment dat păsările își schimbe cuiburile. Se obține astfel o permutare (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) unde 𝑐𝑖 reprezintă cuibul în care s-a mutat pasărea care locuia inițial în cuibul 𝑖. Pentru ca toate păsările sa depună același efort cuiburile vor fi alese astfel încât distanța între cuibul inițial 𝑖 și cel final 𝑐𝑖 să fie aceeași pentru toate cele 𝑁 păsări. Se consideră toate permutările (𝑐0 ,𝑐1 ,𝑐2 ,..., 𝑐𝑁−1) obținute după mutarea păsărilor și se ordonează lexicografic.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Scrieți un program citește două numere naturale 𝑁 și 𝐾 și care afișează permutarea situată pe poziția 𝐾 în ordine lexicografică după ordonarea permutărilor obținute prin mutarea păsărilor. ATENȚIE: numărul K va fi dat în baza 2.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
De la intrarea standard se va citi de pe prima linie numărul 𝑁 și de pe a doua linie un șir de valori 0 sau 1 neseparate prin spatii reprezentând cifrele numărului K scris în baza 2.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
La ieșirea standard vor fi afișate N numere întregi distincte, separate prin câte un spațiu, cu valori între 0 și 𝑁−1, reprezentând permutarea situată pe poziția 𝐾 în ordine lexicografică între toate permutările posibile obținute după mutarea păsărilor.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ N ≤ 1.000.000&lt;br /&gt;
*Se asigură că pentru N dat există cel puțin K posibilități pentru mutarea păsărilor.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:4&lt;br /&gt;
:101&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:0 3 2 1&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:101&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Date invalide: N trebuie să fie un număr natural între 1 și 1.000.000&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2957 nests&lt;br /&gt;
def nth_lexicographic_permutation(N, K):&lt;br /&gt;
  # Convertim numărul K din baza 2 în baza 10&lt;br /&gt;
  K_base10 = int(K, 2)&lt;br /&gt;
  &lt;br /&gt;
  # Inițializăm permutarea cu cifrele de la 0 la N-1&lt;br /&gt;
  permutation = list(range(N))&lt;br /&gt;
  &lt;br /&gt;
  # Algoritmul lui Narayana pentru generarea permutărilor lexicografice&lt;br /&gt;
  for _ in range(K_base10):&lt;br /&gt;
    i = N - 2&lt;br /&gt;
    while i &amp;gt;= 0 and permutation[i] &amp;gt; permutation[i + 1]:&lt;br /&gt;
      i -= 1&lt;br /&gt;
    &lt;br /&gt;
    j = N - 1&lt;br /&gt;
    while permutation[j] &amp;lt; permutation[i]:&lt;br /&gt;
      j -= 1&lt;br /&gt;
    &lt;br /&gt;
    permutation[i], permutation[j] = permutation[j], permutation[i]&lt;br /&gt;
    permutation[i + 1:] = reversed(permutation[i + 1:])&lt;br /&gt;
&lt;br /&gt;
  return permutation&lt;br /&gt;
&lt;br /&gt;
def validate_input(N, K):&lt;br /&gt;
  try:&lt;br /&gt;
    N = int(N)&lt;br /&gt;
    if not 1 &amp;lt;= N &amp;lt;= 1000000:&lt;br /&gt;
      raise ValueError(&amp;quot;N trebuie să fie între 1 și 1.000.000&amp;quot;)&lt;br /&gt;
  except ValueError:&lt;br /&gt;
    return False, &amp;quot;N trebuie să fie un număr natural între 1 și 1.000.000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  if not K.isdigit() or set(K) - {&#039;0&#039;, &#039;1&#039;}:&lt;br /&gt;
    return False, &amp;quot;K trebuie să fie un număr în baza 2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
  return True, &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citirea datelor de intrare&lt;br /&gt;
  N = input(&amp;quot;Introduceți numărul N: &amp;quot;)&lt;br /&gt;
  K = input(&amp;quot;Introduceți numărul K în baza 2: &amp;quot;).strip()&lt;br /&gt;
&lt;br /&gt;
  # Validarea datelor de intrare&lt;br /&gt;
  is_valid, error_message = validate_input(N, K)&lt;br /&gt;
  if not is_valid:&lt;br /&gt;
    print(&amp;quot;Date invalide:&amp;quot;, error_message)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Generarea permutării și afișarea ei&lt;br /&gt;
  result = nth_lexicographic_permutation(int(N), K)&lt;br /&gt;
  print(&amp;quot;Permutarea lexicografică corespunzătoare poziției K:&amp;quot;, &#039; &#039;.join(map(str, result)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2556_-_HN&amp;diff=9746</id>
		<title>2556 - HN</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2556_-_HN&amp;diff=9746"/>
		<updated>2024-04-01T09:18:52Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Fie N un număr natural și expresia HN=1+1/2+1/3+…+1/N.  ==Cerința== Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile HN=P/Q.  ==Date de intrare== Fișierul de intrare hn.in conţine pe prima linie numărul natural N.  ==Date de ieșire== Fișierul de ieșire hn.out va conţine pe prima linie numărul P și pe a doua linie numărul Q.  ==Restricții și precizări== *2 ≤ N ≤ 10000  ==Exemplul 1==...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Fie N un număr natural și expresia HN=1+1/2+1/3+…+1/N.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Determinați numerele naturale P și Q ce reprezintă numărătorul respectiv numitorul fracției ireductibile HN=P/Q.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare hn.in conţine pe prima linie numărul natural N.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire hn.out va conţine pe prima linie numărul P și pe a doua linie numărul Q.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*2 ≤ N ≤ 10000&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;hn.in&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
;hn.out&lt;br /&gt;
:49&lt;br /&gt;
:20&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;hn.in&lt;br /&gt;
:20&lt;br /&gt;
&lt;br /&gt;
;hn.out&lt;br /&gt;
:55835135&lt;br /&gt;
:15519504&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;hn.in&lt;br /&gt;
:-10&lt;br /&gt;
&lt;br /&gt;
;hn.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2556 hn&lt;br /&gt;
def gcd(a, b):&lt;br /&gt;
  while b:&lt;br /&gt;
    a, b = b, a % b&lt;br /&gt;
  return a&lt;br /&gt;
&lt;br /&gt;
def simplify_fraction(num, denom):&lt;br /&gt;
  divisor = gcd(num, denom)&lt;br /&gt;
  return num // divisor, denom // divisor&lt;br /&gt;
&lt;br /&gt;
def calculate_harmonic_fraction(N):&lt;br /&gt;
  numerator = 0&lt;br /&gt;
  denominator = 1&lt;br /&gt;
  for i in range(1, N + 1):&lt;br /&gt;
    numerator = numerator * i + denominator&lt;br /&gt;
    denominator *= i&lt;br /&gt;
  return numerator, denominator&lt;br /&gt;
&lt;br /&gt;
def validate_input(N):&lt;br /&gt;
  if not (isinstance(N, int) and 2 &amp;lt;= N &amp;lt;= 10000):&lt;br /&gt;
    with open(&#039;hn.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  try:&lt;br /&gt;
    # Citirea datelor din fișierul de intrare&lt;br /&gt;
    with open(&#039;hn.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
      N = int(f.readline().strip())&lt;br /&gt;
  except FileNotFoundError:&lt;br /&gt;
    with open(&#039;hn.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Fisierul de intrare nu a fost gasit.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  except ValueError:&lt;br /&gt;
    with open(&#039;hn.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
      f.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Validarea datelor de intrare&lt;br /&gt;
  if not validate_input(N):&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Calcularea fractiei armonice si simplificarea ei&lt;br /&gt;
  numerator, denominator = calculate_harmonic_fraction(N)&lt;br /&gt;
  numerator, denominator = simplify_fraction(numerator, denominator)&lt;br /&gt;
&lt;br /&gt;
  # Scrierea rezultatului in fisierul de iesire&lt;br /&gt;
  with open(&#039;hn.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
    f.write(str(numerator) + &#039;\n&#039;)&lt;br /&gt;
    f.write(str(denominator))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2100_-_Prod_Nr&amp;diff=9745</id>
		<title>2100 - Prod Nr</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2100_-_Prod_Nr&amp;diff=9745"/>
		<updated>2024-04-01T07:00:56Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o succesiune de numere naturale a[1] a[2] ... a[N]. Cu aceste numere se construieşte un şir de caractere astfel: pentru fiecare număr a[i] din şir (i=1, 2, ..., N) se scrie mai întâi numărul de cifre ale lui a[i], apoi cifrele lui a[i].  ==Cerința== Scrieţi un program care pe baza şirului de caractere să determine câte numere sunt în succesiune, precum şi descompunerea în factori primi a produsului numerelor din succesiune.  ==Date de i...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o succesiune de numere naturale a[1] a[2] ... a[N]. Cu aceste numere se construieşte un şir de caractere astfel: pentru fiecare număr a[i] din şir (i=1, 2, ..., N) se scrie mai întâi numărul de cifre ale lui a[i], apoi cifrele lui a[i].&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Scrieţi un program care pe baza şirului de caractere să determine câte numere sunt în succesiune, precum şi descompunerea în factori primi a produsului numerelor din succesiune.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare prodnr.in conţine pe prima linie şirul de caractere.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fişierul de ieşire prodnr.out va conţine pe prima linie numărul natural N, reprezentând numărul de numere din succesiune. Pe următoarele linii va fi scrisă descompunerea în factori primi a produsului celor N numere din succesiune. Pe fiecare linie vor fi scrise două numere naturale separate printr-un singur spaţiu f m, unde f reprezintă factorul prim, iar m multiplicitatea acestuia în produs. Factorii primi vor fi afişaţi în fişier în ordine strict crescătoare.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*Lungimea şirului este de cel mult 30.000;&lt;br /&gt;
*Numerele din succesiune sunt nenule şi au cel mult 5 cifre.&lt;br /&gt;
*Produsul numerelor este strict mai mare decât 1.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;prodnr.in&lt;br /&gt;
:410242253100213235&lt;br /&gt;
&lt;br /&gt;
;prodnr.out&lt;br /&gt;
:5&lt;br /&gt;
:2 12&lt;br /&gt;
:5 5&lt;br /&gt;
:7 1&lt;br /&gt;
:13 1&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Numerele sunt: 1024 25 100 13 35&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;prodnr.in&lt;br /&gt;
:12a34b&lt;br /&gt;
&lt;br /&gt;
;prodnr.out&lt;br /&gt;
:Date de intrare invalide!&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2100 ProdNr&lt;br /&gt;
def descompunere_in_factori_primi(n):&lt;br /&gt;
  factori = {}&lt;br /&gt;
  divizor = 2&lt;br /&gt;
  while n &amp;gt; 1:&lt;br /&gt;
    if n % divizor == 0:&lt;br /&gt;
      if divizor not in factori:&lt;br /&gt;
        factori[divizor] = 1&lt;br /&gt;
      else:&lt;br /&gt;
        factori[divizor] += 1&lt;br /&gt;
      n //= divizor&lt;br /&gt;
    else:&lt;br /&gt;
      divizor += 1&lt;br /&gt;
  return factori&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(sir):&lt;br /&gt;
  if not sir:&lt;br /&gt;
    return False&lt;br /&gt;
  for caracter in sir:&lt;br /&gt;
    if not caracter.isdigit():&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citirea şirului de caractere&lt;br /&gt;
  with open(&amp;quot;prodnr.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    sir = fin.readline().strip()&lt;br /&gt;
&lt;br /&gt;
  # Verificarea datelor de intrare&lt;br /&gt;
  if not verifica_date_intrare(sir):&lt;br /&gt;
    # Scrierea mesajului de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;prodnr.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Extrage numerele din şir&lt;br /&gt;
  numere = []&lt;br /&gt;
  i = 0&lt;br /&gt;
  while i &amp;lt; len(sir):&lt;br /&gt;
    lungime_numar = int(sir[i])&lt;br /&gt;
    numar = int(sir[i + 1:i + 1 + lungime_numar])&lt;br /&gt;
    numere.append(numar)&lt;br /&gt;
    i += 1 + lungime_numar&lt;br /&gt;
&lt;br /&gt;
  # Calculul numărului de numere din succesiune&lt;br /&gt;
  N = len(numere)&lt;br /&gt;
&lt;br /&gt;
  # Calculul produsului numerelor din succesiune&lt;br /&gt;
  produs = 1&lt;br /&gt;
  for numar in numere:&lt;br /&gt;
    produs *= numar&lt;br /&gt;
&lt;br /&gt;
  # Calculul descompunerii în factori primi a produsului&lt;br /&gt;
  descompunere = descompunere_in_factori_primi(produs)&lt;br /&gt;
&lt;br /&gt;
  # Scrierea rezultatelor în fișierul de ieșire&lt;br /&gt;
  with open(&amp;quot;prodnr.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    # Scrierea numărului de numere din succesiune&lt;br /&gt;
    fout.write(str(N) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    # Scrierea descompunerii în factori primi&lt;br /&gt;
    for factor, multiplicitate in descompunere.items():&lt;br /&gt;
      fout.write(f&amp;quot;{factor} {multiplicitate}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1172_%E2%80%93_FList%C4%83_Num%C4%83rare&amp;diff=9744</id>
		<title>1172 – FListă Numărare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1172_%E2%80%93_FList%C4%83_Num%C4%83rare&amp;diff=9744"/>
		<updated>2024-04-01T06:52:52Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      int numarare(nod * p);  care determina și returnează numărul de elemente memorate în lista pe...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    int numarare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care determina și returnează numărul de elemente memorate în lista pentru care primul element are adresa memorată în pointerul p.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1172 FListaNumarare&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = None&lt;br /&gt;
&lt;br /&gt;
def create_linked_list(elements):&lt;br /&gt;
  if not elements:&lt;br /&gt;
    return None&lt;br /&gt;
  head = Node(elements[0])&lt;br /&gt;
  current = head&lt;br /&gt;
  for element in elements[1:]:&lt;br /&gt;
    current.next = Node(element)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
def numarare(p):&lt;br /&gt;
  count = 0&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    count += 1&lt;br /&gt;
    current = current.next&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
def main():&lt;br /&gt;
  # Creăm o listă de elemente&lt;br /&gt;
  elements = [1, 2, 3, 4]&lt;br /&gt;
&lt;br /&gt;
  # Creăm lista liniară simplu înlănțuită&lt;br /&gt;
  p = create_linked_list(elements)&lt;br /&gt;
&lt;br /&gt;
  # Apelăm funcția numarare pentru a număra elementele listei&lt;br /&gt;
  result = numarare(p)&lt;br /&gt;
  print(&amp;quot;Numărul de elemente în listă este:&amp;quot;, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1789_-_3_Secv&amp;diff=9743</id>
		<title>1789 - 3 Secv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1789_-_3_Secv&amp;diff=9743"/>
		<updated>2024-04-01T05:58:06Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Cerința== Se consideră un șir de n elemente numere naturale. O subsecvență se definește ca o succesiune de elemente ale șirului luate de pe poziții consecutive.  De exemplu şirul 1 4 3 5 are 10 subsecvenţe:  *4 subsecvențe de lungime 1 **1 **4 **3 **5 *3 subsecvențe de lungime 2 **1 4 **4 3 **3 5 *2 subsecvențe de lungime 3 **1 4 3 **4 3 5 *1 subsecvenţă de lungime 4 **1 4 3 5 Să se scrie un program care pentru un şir cunoscut determină pentru câte subsec...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se consideră un șir de n elemente numere naturale. O subsecvență se definește ca o succesiune de elemente ale șirului luate de pe poziții consecutive.&lt;br /&gt;
&lt;br /&gt;
De exemplu şirul 1 4 3 5 are 10 subsecvenţe:&lt;br /&gt;
&lt;br /&gt;
*4 subsecvențe de lungime 1&lt;br /&gt;
**1&lt;br /&gt;
**4&lt;br /&gt;
**3&lt;br /&gt;
**5&lt;br /&gt;
*3 subsecvențe de lungime 2&lt;br /&gt;
**1 4&lt;br /&gt;
**4 3&lt;br /&gt;
**3 5&lt;br /&gt;
*2 subsecvențe de lungime 3&lt;br /&gt;
**1 4 3&lt;br /&gt;
**4 3 5&lt;br /&gt;
*1 subsecvenţă de lungime 4&lt;br /&gt;
**1 4 3 5&lt;br /&gt;
Să se scrie un program care pentru un şir cunoscut determină pentru câte subsecvenţe ale şirului suma elementelor care le alcătuiesc are un anumit rest dat la împărţirea cu 3.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare 3secv.in conține pe prima linie două numere naturale n şi r, separate prin spaţiu, n reprezentând numărul de elemente din şirul dat, iar r reprezentând restul pentru care trebuie rezolvată cerinţa. Pe linia a doua vor fi n numere naturale separate prin câte un spaţiu, reprezentând elementele şirului dat.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire 3secv.out va conține pe prima linie un număr natural reprezentând numărul de subsecvențe ale șirului pentru care suma elementelor dă restul r la împărțirea cu 3.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ n ≤ 1.000.000&lt;br /&gt;
*r ∈ {0,1,2}&lt;br /&gt;
*Elementele șirului sunt numere naturale mai mici sau egale cu 32767&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;3secv.in&lt;br /&gt;
:4 0&lt;br /&gt;
:1 4 3 5&lt;br /&gt;
&lt;br /&gt;
;3secv.out&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;3secv.in&lt;br /&gt;
:4 1&lt;br /&gt;
:1 4 3 5&lt;br /&gt;
&lt;br /&gt;
;3secv.out&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;3secv.in&lt;br /&gt;
:4 2&lt;br /&gt;
:1 4 3 5&lt;br /&gt;
&lt;br /&gt;
;3secv.out&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
==Exemplul 4==&lt;br /&gt;
;3secv.in&lt;br /&gt;
:1000001 1&lt;br /&gt;
:1 2 3 4 5 6 1000001&lt;br /&gt;
&lt;br /&gt;
;3secv.out&lt;br /&gt;
:Date de intrare invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1789 3secv&lt;br /&gt;
def is_valid_input(n, r, arr):&lt;br /&gt;
  # Verificăm dacă n și r sunt în limitele impuse&lt;br /&gt;
  if not (1 &amp;lt;= n &amp;lt;= 1000000 and r in {0, 1, 2}):&lt;br /&gt;
    return False&lt;br /&gt;
  # Verificăm dacă toate elementele din șir sunt numere naturale mai mici sau egale cu 32767&lt;br /&gt;
  if any(not (1 &amp;lt;= x &amp;lt;= 32767) for x in arr):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def count_subsequences(n, arr, r):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for i in range(n):&lt;br /&gt;
    for j in range(i, n):&lt;br /&gt;
      subsequence_sum = sum(arr[i:j+1])&lt;br /&gt;
      if subsequence_sum % 3 == r:&lt;br /&gt;
        count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citirea datelor de intrare&lt;br /&gt;
  with open(&amp;quot;3secv.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    n, r = map(int, fin.readline().split())&lt;br /&gt;
    arr = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
  # Verificarea datelor de intrare&lt;br /&gt;
  if not is_valid_input(n, r, arr):&lt;br /&gt;
    # Scrierea mesajului de date invalide în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;3secv.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide.\n&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Calculul numărului de subsecvențe cu suma dată prin restul r la împărțirea cu 3&lt;br /&gt;
  result = count_subsequences(n, arr, r)&lt;br /&gt;
  &lt;br /&gt;
  # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
  with open(&amp;quot;3secv.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3789_%E2%80%93_FList%C4%83_Oglindire&amp;diff=9742</id>
		<title>3789 – FListă Oglindire</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3789_%E2%80%93_FList%C4%83_Oglindire&amp;diff=9742"/>
		<updated>2024-04-01T05:05:29Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      void oglindire(nod * &amp;amp; p);  care oglindește nodurile din lista pentru care primul element are ad...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void oglindire(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care oglindește nodurile din lista pentru care primul element are adresa memorată în pointerul p.&lt;br /&gt;
&lt;br /&gt;
==Restricţii şi precizări==&lt;br /&gt;
numele funcției va fi oglindire&lt;br /&gt;
se recomandă evitarea folosirii unor structuri de date suplimentare&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3789 FListaOglindire&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def oglindire(p):&lt;br /&gt;
  anterior = None&lt;br /&gt;
  curent = p&lt;br /&gt;
  urmator = None&lt;br /&gt;
&lt;br /&gt;
  while curent is not None:&lt;br /&gt;
    urmator = curent.urm&lt;br /&gt;
    curent.urm = anterior&lt;br /&gt;
    anterior = curent&lt;br /&gt;
    curent = urmator&lt;br /&gt;
&lt;br /&gt;
  p = anterior  # Actualizăm referința către primul nod&lt;br /&gt;
  return p&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru afișarea listei&lt;br /&gt;
def afisare_lista(p):&lt;br /&gt;
  while p is not None:&lt;br /&gt;
    print(p.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    p = p.urm&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
nod1 = Nod(1)&lt;br /&gt;
nod2 = Nod(2)&lt;br /&gt;
nod3 = Nod(3)&lt;br /&gt;
&lt;br /&gt;
nod1.urm = nod2&lt;br /&gt;
nod2.urm = nod3&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&lt;br /&gt;
nod1 = oglindire(nod1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista oglindita:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1226_-_Nebuni&amp;diff=9741</id>
		<title>1226 - Nebuni</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1226_-_Nebuni&amp;diff=9741"/>
		<updated>2024-04-01T04:55:55Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Pe o tablă de şah cu N linii şi N coloane sunt plasaţi M nebuni. După cum se ştie de la jocul de şah, nebunii atacă doar în diagonală.  O poziţie de pe tabla de şah este considerată sigură dacă nu este atacată de niciun nebun aflat pe tablă.  ==Cerinţă== Scrieţi un program care să determine numărul de poziţii sigure de pe tabla de şah.  ==Date de intrare== Fișierul de intrare nebuni.in conține pe prima linie numerele naturale N M, separate...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Pe o tablă de şah cu N linii şi N coloane sunt plasaţi M nebuni. După cum se ştie de la jocul de şah, nebunii atacă doar în diagonală.&lt;br /&gt;
&lt;br /&gt;
O poziţie de pe tabla de şah este considerată sigură dacă nu este atacată de niciun nebun aflat pe tablă.&lt;br /&gt;
&lt;br /&gt;
==Cerinţă==&lt;br /&gt;
Scrieţi un program care să determine numărul de poziţii sigure de pe tabla de şah.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare nebuni.in conține pe prima linie numerele naturale N M, separate prin spaţiu, cu semnificaţia din enunţ. Pe următoarele M linii sunt descrise poziţiile (linia şi coloana, separate prin spaţiu) celor M nebuni, câte un nebun pe o linie a fişierului.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire nebuni.out va conține o singură linie pe care va fi scris un număr natural reprezentând numărul de poziţii sigure de pe tabla de şah.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
1 ≤ N ≤ 1 000 000&lt;br /&gt;
1 ≤ M &amp;lt; 16 500&lt;br /&gt;
Liniile şi coloanele sunt numerotate de la 1 la N.&lt;br /&gt;
Pentru 50% dintre teste N ≤ 300.&lt;br /&gt;
Pentru 60% dintre teste M ≤ 1000.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;nebuni.in&lt;br /&gt;
:5 4&lt;br /&gt;
:2 1&lt;br /&gt;
:1 3&lt;br /&gt;
:4 2&lt;br /&gt;
:5 2&lt;br /&gt;
&lt;br /&gt;
;nebuni.out&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;nebuni.in&lt;br /&gt;
:10 3&lt;br /&gt;
:1 1&lt;br /&gt;
:15 8&lt;br /&gt;
:5 12&lt;br /&gt;
&lt;br /&gt;
;nebuni.out&lt;br /&gt;
:Date de intrare invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1226 Nebuni&lt;br /&gt;
def verificare_date_intrare(N, M, nebuni):&lt;br /&gt;
  if not (1 &amp;lt;= N &amp;lt;= 1000000):&lt;br /&gt;
    return False&lt;br /&gt;
  if not (1 &amp;lt;= M &amp;lt; 16500):&lt;br /&gt;
    return False&lt;br /&gt;
  for x, y in nebuni:&lt;br /&gt;
    if not (1 &amp;lt;= x &amp;lt;= N and 1 &amp;lt;= y &amp;lt;= N):&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def numar_pozitii_sigure(N, M, nebuni):&lt;br /&gt;
  # Inițializăm o matrice pentru tabla de șah și o marcam pe toate pozițiile atacate de nebuni&lt;br /&gt;
  tabla = [[False] * N for _ in range(N)]&lt;br /&gt;
  for x, y in nebuni:&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
      for j in range(N):&lt;br /&gt;
        if abs(x - i) == abs(y - j):&lt;br /&gt;
          tabla[i][j] = True&lt;br /&gt;
&lt;br /&gt;
  # Numărăm pozițiile sigure care nu sunt atacate de niciun nebun&lt;br /&gt;
  numar_pozitii_sigure = 0&lt;br /&gt;
  for i in range(N):&lt;br /&gt;
    for j in range(N):&lt;br /&gt;
      if not tabla[i][j]:&lt;br /&gt;
        numar_pozitii_sigure += 1&lt;br /&gt;
&lt;br /&gt;
  return numar_pozitii_sigure&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  # Citim datele de intrare&lt;br /&gt;
  try:&lt;br /&gt;
    with open(&amp;quot;nebuni.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
      N, M = map(int, fin.readline().split())&lt;br /&gt;
      nebuni = [tuple(map(int, line.split())) for line in fin]&lt;br /&gt;
  except ValueError:&lt;br /&gt;
    # Date invalide&lt;br /&gt;
    with open(&amp;quot;nebuni.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date invalide\n&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Verificăm datele de intrare&lt;br /&gt;
  if not verificare_date_intrare(N, M, nebuni):&lt;br /&gt;
    with open(&amp;quot;nebuni.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide.\n&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  # Determinăm numărul de poziții sigure&lt;br /&gt;
  rezultat = numar_pozitii_sigure(N, M, nebuni)&lt;br /&gt;
&lt;br /&gt;
  # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
  with open(&amp;quot;nebuni.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2449_-_PM&amp;diff=9740</id>
		<title>2449 - PM</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2449_-_PM&amp;diff=9740"/>
		<updated>2024-04-01T04:29:36Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Vom numi secvenţă PM o succesiune formată din plus şi minus, care NU conţine două semne minus alăturate. De exemplu, există 5 secvenţe PM de lungime 3: + + + , + + - , + - + , - + + , - + -.  ==Cerința== Să se determine numărul de secvenţe PM care conţin x semne plus şi y semne minus.  ==Date de intrare== Fişierul de intrare pm.in conţine pe prima linie două numere naturale separate prin spaţiu x, y, cu semnificaţia din enunţ.  ==Date de ieșir...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Vom numi secvenţă PM o succesiune formată din plus şi minus, care NU conţine două semne minus alăturate.&lt;br /&gt;
De exemplu, există 5 secvenţe PM de lungime 3: + + + , + + - , + - + , - + + , - + -.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se determine numărul de secvenţe PM care conţin x semne plus şi y semne minus.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare pm.in conţine pe prima linie două numere naturale separate prin spaţiu x, y, cu semnificaţia din enunţ.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fişierul de ieşire pm.out va conţine o singură linie pe care va fi scris un singur număr natural, reprezentând numărul de secvenţe PM care conţin x semne plus şi y semne minus.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*0 ≤ y ≤ x ≤ 250&lt;br /&gt;
*Rezultatul va avea maxim 100 cifre.&lt;br /&gt;
*Pentru 50% din testele de evaluare, x &amp;lt; 32.&lt;br /&gt;
*10% din punctaj se va acorda pe exemple.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;pm.in&lt;br /&gt;
:2 1&lt;br /&gt;
&lt;br /&gt;
;pm.out&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;pm.in&lt;br /&gt;
:300 200&lt;br /&gt;
&lt;br /&gt;
;pm.out&lt;br /&gt;
:Date de intrare invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2449 PM&lt;br /&gt;
def verificare_date_intrare(x, y):&lt;br /&gt;
  if not (0 &amp;lt;= y &amp;lt;= x &amp;lt;= 250):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def numar_secvente_PM(x, y):&lt;br /&gt;
  if not verificare_date_intrare(x, y):&lt;br /&gt;
    return &amp;quot;Date de intrare invalide.&amp;quot;&lt;br /&gt;
  &lt;br /&gt;
  dp = [[0] * (y + 1) for _ in range(x + 1)]&lt;br /&gt;
  dp[0][0] = 1&lt;br /&gt;
&lt;br /&gt;
  for i in range(1, x + 1):&lt;br /&gt;
    for j in range(min(i, y) + 1):&lt;br /&gt;
      if j == 0:&lt;br /&gt;
        dp[i][j] = dp[i - 1][j]&lt;br /&gt;
      else:&lt;br /&gt;
        dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]&lt;br /&gt;
&lt;br /&gt;
  numar_total = sum(dp[x])&lt;br /&gt;
&lt;br /&gt;
  return numar_total&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;pm.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    x, y = map(int, fin.readline().split())&lt;br /&gt;
&lt;br /&gt;
  rezultat = numar_secvente_PM(x, y)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;pm.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1686_-_Leduri&amp;diff=9739</id>
		<title>1686 - Leduri</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1686_-_Leduri&amp;diff=9739"/>
		<updated>2024-04-01T04:14:16Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Am un cablu cu N leduri (numerotate de la 1 la N) aşezate echidistant. Inițial, unele leduri sunt aprinse, iar altele sunt stinse. Ledurile sunt legate între ele astfel încât atingerea fiecărui led produce modificarea atât a stării lui, cât şi a ledurilor vecine lui. Deci, dacă se atinge ledul i (2≤i≤N-1) atunci se modifică stările ledurilor i-1, i și i+1. Dacă se atinge ledul 1, atunci se modifică stările ledurilor 1 și 2, iar dacă se atinge...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Am un cablu cu N leduri (numerotate de la 1 la N) aşezate echidistant. Inițial, unele leduri sunt aprinse, iar altele sunt stinse. Ledurile sunt legate între ele astfel încât atingerea fiecărui led produce modificarea atât a stării lui, cât şi a ledurilor vecine lui. Deci, dacă se atinge ledul i (2≤i≤N-1) atunci se modifică stările ledurilor i-1, i și i+1. Dacă se atinge ledul 1, atunci se modifică stările ledurilor 1 și 2, iar dacă se atinge ledul N, atunci se modifică stările ledurilor N-1 și N. Vreau să modific starea ledurilor astfel încât să semene cu cablul cu N leduri pe care îl are Ionuț, prietenul meu (două cabluri seamănă dacă pentru orice i=1..N stările ledurilor de pe poziția i sunt identice).&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Cunoscând cum arată cablul lui Ionuț, ajutați-mă să determin numărul minim de atingeri ale unor leduri astfel încât cablul meu să arate ca și cablul lui Ionuț.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare leduri.in conține pe prima linie numărul natural N. Pe a doua linie sunt N cifre binare separate prin câte un spațiu reprezentând stările ledurilor de pe cablul meu. Cifra de pe poziția i este 0 dacă ledul i este stins, respectiv este 1 dacă ledul i este aprins (i=1..N). Pe a treia linie sunt N cifre binare separate prin câte un spațiu, reprezentând stările ledurilor de pe cablul lui Ionuț.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire leduri.out va conține pe prima linie un singur număr natural reprezentând numărul minim de atingeri ale unor leduri astfel încât cablul meu să arate ca și cablul lui Ionuț.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ N ≤ 100000&lt;br /&gt;
*Se garantează că pentru toate testele există soluție.&lt;br /&gt;
*Pentru teste valorând 30 de puncte, N va fi cel mult 20&lt;br /&gt;
&lt;br /&gt;
==Exemplu1==&lt;br /&gt;
;leduri.in&lt;br /&gt;
:4&lt;br /&gt;
:1 0 1 0&lt;br /&gt;
:0 1 1 1&lt;br /&gt;
&lt;br /&gt;
;leduri.out&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
==Exemplu2==&lt;br /&gt;
;leduri.in&lt;br /&gt;
:5&lt;br /&gt;
:1 0 1 1&lt;br /&gt;
:1 0 1 1&lt;br /&gt;
&lt;br /&gt;
;leduri.out&lt;br /&gt;
:Date de intrare invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1686 Leduri&lt;br /&gt;
def verificare_date_intrare(N, starea_mea, starea_ionut):&lt;br /&gt;
  if not (1 &amp;lt;= N &amp;lt;= 100000):&lt;br /&gt;
    return False&lt;br /&gt;
  if len(starea_mea) != N or len(starea_ionut) != N:&lt;br /&gt;
    return False&lt;br /&gt;
  for bit in starea_mea:&lt;br /&gt;
    if bit not in {0, 1}:&lt;br /&gt;
      return False&lt;br /&gt;
  for bit in starea_ionut:&lt;br /&gt;
    if bit not in {0, 1}:&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def numar_minim_atingeri(N, starea_mea, starea_ionut):&lt;br /&gt;
  atingeri = 0&lt;br /&gt;
  for i in range(N):&lt;br /&gt;
    if starea_mea[i] != starea_ionut[i]:&lt;br /&gt;
      atingeri += 1&lt;br /&gt;
      if i &amp;gt; 0:&lt;br /&gt;
        starea_mea[i - 1] = 1 - starea_mea[i - 1]&lt;br /&gt;
      if i &amp;lt; N - 1:&lt;br /&gt;
        starea_mea[i + 1] = 1 - starea_mea[i + 1]&lt;br /&gt;
  return atingeri&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;leduri.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    N = int(fin.readline())&lt;br /&gt;
    starea_mea = list(map(int, fin.readline().split()))&lt;br /&gt;
    starea_ionut = list(map(int, fin.readline().split()))&lt;br /&gt;
&lt;br /&gt;
  if not verificare_date_intrare(N, starea_mea, starea_ionut):&lt;br /&gt;
    with open(&amp;quot;leduri.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
      fout.write(&amp;quot;Date de intrare invalide.\n&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  numar_atingeri = numar_minim_atingeri(N, starea_mea, starea_ionut)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;leduri.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    fout.write(str(numar_atingeri) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1171_%E2%80%93_F%C8%98terge_Primul_Din_List%C4%83&amp;diff=9738</id>
		<title>1171 – FȘterge Primul Din Listă</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1171_%E2%80%93_F%C8%98terge_Primul_Din_List%C4%83&amp;diff=9738"/>
		<updated>2024-04-01T04:00:22Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      void stergePrimul(nod * &amp;amp; p);  care șterge primul element al unei liste; pointerul p are ca valo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void stergePrimul(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care șterge primul element al unei liste; pointerul p are ca valoarea adresa primului element din listă – cel care va fi șters.&lt;br /&gt;
&lt;br /&gt;
==Restricţii şi precizări==&lt;br /&gt;
numele funcției va fi stergePrimul&lt;br /&gt;
dacă lista nu conține niciun element, pointerul p va avea valoarea NULL&lt;br /&gt;
în toate cazurile, la ieșirea din apel p va memora adresa primului element al listei; dacă elementul șters este ultimul, p va avea valoarea NULL&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1171 FStergePrimulDinLista&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def stergePrimul(p):&lt;br /&gt;
  if p is None:&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  p = p.urm&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
# Crearea unei liste liniare simplu înlănțuite&lt;br /&gt;
nod1 = Nod(1)&lt;br /&gt;
nod2 = Nod(2)&lt;br /&gt;
nod3 = Nod(3)&lt;br /&gt;
nod1.urm = nod2&lt;br /&gt;
nod2.urm = nod3&lt;br /&gt;
&lt;br /&gt;
# Afisarea listei inainte de stergerea primului element&lt;br /&gt;
print(&amp;quot;Lista inainte de stergerea primului element:&amp;quot;)&lt;br /&gt;
current = nod1&lt;br /&gt;
while current is not None:&lt;br /&gt;
  print(current.info)&lt;br /&gt;
  current = current.urm&lt;br /&gt;
&lt;br /&gt;
# Stergerea primului element&lt;br /&gt;
stergePrimul(nod1)&lt;br /&gt;
&lt;br /&gt;
# Afisarea listei dupa stergerea primului element&lt;br /&gt;
print(&amp;quot;Lista dupa stergerea primului element:&amp;quot;)&lt;br /&gt;
current = nod1.urm&lt;br /&gt;
while current is not None:&lt;br /&gt;
  print(current.info)&lt;br /&gt;
  current = current.urm&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;#1171 FStergePrimulDinLista&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1181_%E2%80%93_FList%C4%83_Interclasare2&amp;diff=9737</id>
		<title>1181 – FListă Interclasare2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1181_%E2%80%93_FList%C4%83_Interclasare2&amp;diff=9737"/>
		<updated>2024-04-01T03:35:03Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      void inserare(nod * p);  care inserează după fiecare element par al unei liste pentru care prim...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void inserare(nod * p);&lt;br /&gt;
&lt;br /&gt;
care inserează după fiecare element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1181 FListaInserare2&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.urm = None&lt;br /&gt;
&lt;br /&gt;
def inserare(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    if current.info % 2 == 0:&lt;br /&gt;
      new_node = Node(2 * current.info)&lt;br /&gt;
      new_node.urm = current.urm&lt;br /&gt;
      current.urm = new_node&lt;br /&gt;
      current = current.urm.urm&lt;br /&gt;
    else:&lt;br /&gt;
      current = current.urm&lt;br /&gt;
&lt;br /&gt;
def afisare_lista(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info)&lt;br /&gt;
    current = current.urm&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
nod1 = Node(1)&lt;br /&gt;
nod2 = Node(2)&lt;br /&gt;
nod3 = Node(3)&lt;br /&gt;
nod1.urm = nod2&lt;br /&gt;
nod2.urm = nod3&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&lt;br /&gt;
inserare(nod1)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista dupa inserare:&amp;quot;)&lt;br /&gt;
afisare_lista(nod1)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1182_%E2%80%93_FList%C4%83_Interclasare3&amp;diff=9736</id>
		<title>1182 – FListă Interclasare3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1182_%E2%80%93_FList%C4%83_Interclasare3&amp;diff=9736"/>
		<updated>2024-03-29T05:13:32Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ==  Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.  ==Cerinţa== Să se scrie o funcție C++ cu următorul prototip:      void inserare(nod * &amp;amp; p);  care inserează înaintea fiecărui element par al unei liste pentru...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr natural, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerinţa==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
    void inserare(nod * &amp;amp; p);&lt;br /&gt;
&lt;br /&gt;
care inserează înaintea fiecărui element par al unei liste pentru care primul element are adresa memorată în pointerul p dublul acelui element.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*lista va conține cel puțin un element&lt;br /&gt;
*la ieșirea din apel p va conține adresa primului element al listei&lt;br /&gt;
*rezolvarea se va face în python&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1182 FListaInserare3&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info, next_node=None):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = next_node&lt;br /&gt;
&lt;br /&gt;
def inserare(p):&lt;br /&gt;
  prev = None&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    if current.info % 2 == 0:&lt;br /&gt;
      new_node = Node(current.info * 2)&lt;br /&gt;
      new_node.next = current&lt;br /&gt;
      if prev is not None:&lt;br /&gt;
        prev.next = new_node&lt;br /&gt;
      else:&lt;br /&gt;
        p = new_node  &lt;br /&gt;
      prev = new_node&lt;br /&gt;
      current = current.next&lt;br /&gt;
    else:&lt;br /&gt;
      prev = current&lt;br /&gt;
      current = current.next&lt;br /&gt;
&lt;br /&gt;
def print_list(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  values = [1, 2, 3, 4, 5]&lt;br /&gt;
  p = Node(values[0])  &lt;br /&gt;
  current = p&lt;br /&gt;
  for value in values[1:]:  &lt;br /&gt;
    current.next = Node(value)  &lt;br /&gt;
    current = current.next  &lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
  print_list(p)&lt;br /&gt;
&lt;br /&gt;
  inserare(p)&lt;br /&gt;
&lt;br /&gt;
  print(&amp;quot;Lista dupa inserare:&amp;quot;)&lt;br /&gt;
  print_list(p)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2563_%E2%80%93_FAdCresc&amp;diff=9735</id>
		<title>2563 – FAdCresc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2563_%E2%80%93_FAdCresc&amp;diff=9735"/>
		<updated>2024-03-29T04:47:45Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct nod{       int info;       nod * urm;     };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  Informațiile din listă sunt ordonate crescător.  ==Cerința== Să se scrie o funcție C++ cu următorul prototip:          void ins_cresc(nod *&amp;amp;p, int x);  care ins...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct nod{&lt;br /&gt;
      int info;&lt;br /&gt;
      nod * urm;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
Informațiile din listă sunt ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
    &lt;br /&gt;
    void ins_cresc(nod *&amp;amp;p, int x);&lt;br /&gt;
&lt;br /&gt;
care inserează în listă un nou nod care memorează valoarea x astfel încât informațiile din lista să fie în continuare ordonate crescător; pointerul p are ca valoarea adresa primului element din listă.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*numele funcției va fi ins_cresc.&lt;br /&gt;
*lista conține inițial cel puțin un nod.&lt;br /&gt;
*rezolvarea problemei se va face în ptyhon&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2563 FAdCresc&lt;br /&gt;
class Node:&lt;br /&gt;
  def __init__(self, info):&lt;br /&gt;
    self.info = info&lt;br /&gt;
    self.next = None&lt;br /&gt;
&lt;br /&gt;
def ins_cresc(p, x):&lt;br /&gt;
  new_node = Node(x)&lt;br /&gt;
  &lt;br /&gt;
  # Dacă lista este goală sau noul nod trebuie inserat înaintea primului nod&lt;br /&gt;
  if p is None or x &amp;lt; p.info:&lt;br /&gt;
    new_node.next = p&lt;br /&gt;
    p = new_node&lt;br /&gt;
    return p&lt;br /&gt;
  &lt;br /&gt;
  # Parcurgem lista până găsim locul corect pentru inserare&lt;br /&gt;
  current = p&lt;br /&gt;
  while current.next is not None and current.next.info &amp;lt; x:&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  # Inserăm noul nod între current și current.next&lt;br /&gt;
  new_node.next = current.next&lt;br /&gt;
  current.next = new_node&lt;br /&gt;
  &lt;br /&gt;
  return p&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru afișarea listei&lt;br /&gt;
def print_list(p):&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru crearea listei inițiale&lt;br /&gt;
def create_list(values):&lt;br /&gt;
  if not values:&lt;br /&gt;
    return None&lt;br /&gt;
  &lt;br /&gt;
  p = Node(values[0])&lt;br /&gt;
  current = p&lt;br /&gt;
  for val in values[1:]:&lt;br /&gt;
    current.next = Node(val)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  return p&lt;br /&gt;
    &lt;br /&gt;
# Funcție pentru afișarea listei în ordine crescătoare&lt;br /&gt;
def print_list_sorted(p):&lt;br /&gt;
  # Creează o listă pentru a stoca valorile din listă&lt;br /&gt;
  values = []&lt;br /&gt;
  current = p&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    values.append(current.info)&lt;br /&gt;
    current = current.next&lt;br /&gt;
  &lt;br /&gt;
  # Sortează valorile&lt;br /&gt;
  values.sort()&lt;br /&gt;
  &lt;br /&gt;
  # Afișează valorile sortate&lt;br /&gt;
  for val in values:&lt;br /&gt;
    print(val, end=&amp;quot; &amp;quot;)&lt;br /&gt;
  print()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  # Cream lista de test&lt;br /&gt;
  values = [2, 4, 8, 6, 1, 0]&lt;br /&gt;
  p = create_list(values)&lt;br /&gt;
&lt;br /&gt;
  #  Afisam lista in ordine crescatoare&lt;br /&gt;
  print(&amp;quot;Lista creata:&amp;quot;)&lt;br /&gt;
  print_list_sorted(p)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1476_%E2%80%93_FSortare&amp;diff=9734</id>
		<title>1476 – FSortare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1476_%E2%80%93_FSortare&amp;diff=9734"/>
		<updated>2024-03-29T04:35:34Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:     struct nod{      int info;      nod *urm;    };  în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.  ==Cerința== Să se scrie o funcție C++ cu următorul prototip:    void sortareCrescator(nod *&amp;amp;prim)  care sortează crescător elementele listei al cărei prim element ar...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
   struct nod{&lt;br /&gt;
     int info;&lt;br /&gt;
     nod *urm;&lt;br /&gt;
   };&lt;br /&gt;
&lt;br /&gt;
în care câmpul info memorează un număr întreg, iar câmpul urm memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
  void sortareCrescator(nod *&amp;amp;prim)&lt;br /&gt;
&lt;br /&gt;
care sortează crescător elementele listei al cărei prim element are adresa memorată în prim.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*numele funcției va fi sortareCrescator&lt;br /&gt;
*lista va conține cel puțin 3 elemente&lt;br /&gt;
*rezolvarea se va face in python&lt;br /&gt;
&lt;br /&gt;
==Exemplu==&lt;br /&gt;
Dacă lista este formată din valorile (5, 3, 9, 4, 2, 12), după apelul funcţiei ea va conţine elementele (2, 3, 4, 5, 9, 12).&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1476 FSortare&lt;br /&gt;
class Node:&lt;br /&gt;
    def __init__(self, info):&lt;br /&gt;
        self.info = info&lt;br /&gt;
        self.next = None&lt;br /&gt;
&lt;br /&gt;
def create_linked_list(values):&lt;br /&gt;
    head = None&lt;br /&gt;
    tail = None&lt;br /&gt;
    for value in values:&lt;br /&gt;
        new_node = Node(value)&lt;br /&gt;
        if head is None:&lt;br /&gt;
            head = new_node&lt;br /&gt;
            tail = new_node&lt;br /&gt;
        else:&lt;br /&gt;
            tail.next = new_node&lt;br /&gt;
            tail = new_node&lt;br /&gt;
    return head&lt;br /&gt;
&lt;br /&gt;
def sortareCrescator(prim):&lt;br /&gt;
    # Funcție pentru inserarea unui nod într-o listă sortată&lt;br /&gt;
    def insert_sorted(head, new_node):&lt;br /&gt;
        if head is None or head.info &amp;gt;= new_node.info:&lt;br /&gt;
            new_node.next = head&lt;br /&gt;
            return new_node&lt;br /&gt;
&lt;br /&gt;
        current = head&lt;br /&gt;
        while current.next is not None and current.next.info &amp;lt; new_node.info:&lt;br /&gt;
            current = current.next&lt;br /&gt;
        &lt;br /&gt;
        new_node.next = current.next&lt;br /&gt;
        current.next = new_node&lt;br /&gt;
        return head&lt;br /&gt;
    &lt;br /&gt;
    # Inițializăm lista sortată ca fiind lista vidă&lt;br /&gt;
    sorted_list = None&lt;br /&gt;
    current = prim&lt;br /&gt;
    &lt;br /&gt;
    # Parcurgem lista inițială și inserăm fiecare nod în lista sortată&lt;br /&gt;
    while current is not None:&lt;br /&gt;
        sorted_list = insert_sorted(sorted_list, Node(current.info))&lt;br /&gt;
        current = current.next&lt;br /&gt;
    &lt;br /&gt;
    # Copiem lista sortată înapoi în lista inițială&lt;br /&gt;
    current = prim&lt;br /&gt;
    sorted_current = sorted_list&lt;br /&gt;
    while sorted_current is not None:&lt;br /&gt;
        current.info = sorted_current.info&lt;br /&gt;
        current = current.next&lt;br /&gt;
        sorted_current = sorted_current.next&lt;br /&gt;
&lt;br /&gt;
# Testăm funcția&lt;br /&gt;
def print_list(head):&lt;br /&gt;
    current = head&lt;br /&gt;
    while current is not None:&lt;br /&gt;
        print(current.info, end=&amp;quot; &amp;quot;)&lt;br /&gt;
        current = current.next&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
# Cream lista de test folosind funcția create_linked_list&lt;br /&gt;
values = [5, 3, 9, 4, 2, 12]&lt;br /&gt;
l = create_linked_list(values)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista initiala:&amp;quot;)&lt;br /&gt;
print_list(l)&lt;br /&gt;
&lt;br /&gt;
# Sortam lista&lt;br /&gt;
sortareCrescator(l)&lt;br /&gt;
&lt;br /&gt;
print(&amp;quot;Lista sortata:&amp;quot;)&lt;br /&gt;
print_list(l)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3527_%E2%80%93_F%C8%98terge_Duplicate&amp;diff=9733</id>
		<title>3527 – FȘterge Duplicate</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3527_%E2%80%93_F%C8%98terge_Duplicate&amp;diff=9733"/>
		<updated>2024-03-29T04:23:07Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct Nod{&lt;br /&gt;
      int val;&lt;br /&gt;
      Nod *next;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul val memorează un număr întreg, iar câmpul next memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
Valorile din listă sunt ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
void FStergeDuplicate(Nod *&amp;amp;L);&lt;br /&gt;
Funcția primește ca parametru un pointer L la o listă simplu înlănțuită care are valorile din noduri în ordine crescătoare. Funcția trebuie să elimine nodurile care conțin valori duplicate. De exemplu, dacă lista conține valorile 3,3,3,5,6,7,7,7,7,20, atunci după eliminarea duplicatelor, lista va conține 3,5,6,7,20.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*numele funcției va fi FStergeDuplicate.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
Rezolvarea se va face în python.&lt;br /&gt;
&lt;br /&gt;
==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct Nod{&lt;br /&gt;
      int val;&lt;br /&gt;
      Nod *next;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul val memorează un număr întreg, iar câmpul next memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
Valorile din listă sunt ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
void FStergeDuplicate(Nod *&amp;amp;L);&lt;br /&gt;
Funcția primește ca parametru un pointer L la o listă simplu înlănțuită care are valorile din noduri în ordine crescătoare. Funcția trebuie să elimine nodurile care conțin valori duplicate. De exemplu, dacă lista conține valorile 3,3,3,5,6,7,7,7,7,20, atunci după eliminarea duplicatelor, lista va conține 3,5,6,7,20.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*numele funcției va fi FStergeDuplicate.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
Rezolvarea se va face în python.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3527 FStergeDuplicate&lt;br /&gt;
# Definim clasa pentru nodul unei liste liniare simplu înlănțuite&lt;br /&gt;
class Nod:&lt;br /&gt;
  def __init__(self, val=0, next=None):&lt;br /&gt;
    self.val = val&lt;br /&gt;
    self.next = next&lt;br /&gt;
&lt;br /&gt;
# Funcția care elimină duplicatele din lista&lt;br /&gt;
def FStergeDuplicate(L):&lt;br /&gt;
  if L is None:&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  current = L&lt;br /&gt;
  while current.next is not None:&lt;br /&gt;
    if current.val == current.next.val:&lt;br /&gt;
      next_next = current.next.next&lt;br /&gt;
      current.next = None&lt;br /&gt;
      current.next = next_next&lt;br /&gt;
    else:&lt;br /&gt;
      current = current.next&lt;br /&gt;
&lt;br /&gt;
# Funcția care creează o listă liniară simplu înlănțuită pe baza unei liste de valori&lt;br /&gt;
def createLinkedList(values):&lt;br /&gt;
  if not values:&lt;br /&gt;
    return None&lt;br /&gt;
&lt;br /&gt;
  # Creăm primul nod al listei&lt;br /&gt;
  head = Nod(values[0])&lt;br /&gt;
  current = head&lt;br /&gt;
&lt;br /&gt;
  # Iterăm prin valorile date și le adăugăm ca noduri în listă&lt;br /&gt;
  for val in values[1:]:&lt;br /&gt;
    current.next = Nod(val)&lt;br /&gt;
    current = current.next&lt;br /&gt;
&lt;br /&gt;
  return head&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  # Lista de valori din exemplu&lt;br /&gt;
  values = [3, 3, 3, 5, 6, 7, 7, 7, 7, 20]&lt;br /&gt;
&lt;br /&gt;
  # Creăm lista liniară simplu înlănțuită&lt;br /&gt;
  L = createLinkedList(values)&lt;br /&gt;
&lt;br /&gt;
  # Eliminăm duplicatele din lista&lt;br /&gt;
  FStergeDuplicate(L)&lt;br /&gt;
&lt;br /&gt;
  # Afisam lista rezultata&lt;br /&gt;
  current = L&lt;br /&gt;
  while current is not None:&lt;br /&gt;
    print(current.val, end=&amp;quot; &amp;quot;)&lt;br /&gt;
    current = current.next&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3527_%E2%80%93_F%C8%98terge_Duplicate&amp;diff=9732</id>
		<title>3527 – FȘterge Duplicate</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3527_%E2%80%93_F%C8%98terge_Duplicate&amp;diff=9732"/>
		<updated>2024-03-29T04:21:58Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:      struct Nod{       int val;       Nod *next;     };  în care câmpul val memorează un număr întreg, iar câmpul next memorează adresa următorului element al listei.  Valorile din listă sunt ordonate crescător.  ==Cerința== Să se scrie o funcție C++ cu următorul prototip:  void FStergeDuplicate(Nod *&amp;amp;L); Funcția primește ca p...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Se consideră o listă liniară simplu înlănțuită, alocată dinamic, în care elementele sunt de tipul declarat mai jos:&lt;br /&gt;
&lt;br /&gt;
    struct Nod{&lt;br /&gt;
      int val;&lt;br /&gt;
      Nod *next;&lt;br /&gt;
    };&lt;br /&gt;
&lt;br /&gt;
în care câmpul val memorează un număr întreg, iar câmpul next memorează adresa următorului element al listei.&lt;br /&gt;
&lt;br /&gt;
Valorile din listă sunt ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se scrie o funcție C++ cu următorul prototip:&lt;br /&gt;
&lt;br /&gt;
void FStergeDuplicate(Nod *&amp;amp;L);&lt;br /&gt;
Funcția primește ca parametru un pointer L la o listă simplu înlănțuită care are valorile din noduri în ordine crescătoare. Funcția trebuie să elimine nodurile care conțin valori duplicate. De exemplu, dacă lista conține valorile 3,3,3,5,6,7,7,7,7,20, atunci după eliminarea duplicatelor, lista va conține 3,5,6,7,20.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*numele funcției va fi FStergeDuplicate.&lt;br /&gt;
&lt;br /&gt;
==Important==&lt;br /&gt;
Soluţia propusă va conţine definiţia funcţiei cerute. Prezenţa în soluţie a altor instrucţiuni poate duce erori de compilare sau de execuţie care vor avea ca efect depunctarea soluţiei.&lt;br /&gt;
Rezolvarea se va face în python.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3527 FStergeDuplicate&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4094_-_oneout&amp;diff=9731</id>
		<title>4094 - oneout</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4094_-_oneout&amp;diff=9731"/>
		<updated>2024-03-28T11:05:43Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Definim un număr liber de pătrate ca fiind un număr natural care nu are ca divizor niciun pătrat perfect mai mare ca 1. Prin convenție, 1 este considerat liber de pătrate.  Așadar, șirul numerelor libere de pătrate este: 1,2,3,5,6,7,10,11,13,14,15,17, ...  Se consideră un șir de N numere naturale X[i], 1 ≤ i ≤ N, unde N este un număr natural. O secvență este un subșir format din numere aflate pe poziții consecutive în șirul dat. Definim o bise...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Definim un număr liber de pătrate ca fiind un număr natural care nu are ca divizor niciun pătrat perfect mai mare ca 1. Prin convenție, 1 este considerat liber de pătrate.&lt;br /&gt;
&lt;br /&gt;
Așadar, șirul numerelor libere de pătrate este: 1,2,3,5,6,7,10,11,13,14,15,17, ...&lt;br /&gt;
&lt;br /&gt;
Se consideră un șir de N numere naturale X[i], 1 ≤ i ≤ N, unde N este un număr natural. O secvență este un subșir format din numere aflate pe poziții consecutive în șirul dat. Definim o bisecvență ca un subșir nevid obținut prin eliminarea dintr-o secvență a unui număr care nu este la începutul sau la sfârșitul secvenței.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
*1) Să se determine câte numere libere de pătrate conține șirul dat.&lt;br /&gt;
*2) Să se determine cea mai lungă bisecvență din șir formată din numere libere de pătrate, obținută prin eliminarea unui număr care nu este liber de pătrate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare oneout.in conține pe primul rând un număr natural C, care poate fi doar 1 sau 2, reprezentând cerința, pe a doua linie numărul natural N iar pe a treia linie N numere naturale, separate prin câte un spațiu, cu semnificația de mai sus.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Dacă C = 1, în fișierul de ieșire oneout.out se va scrie numărul de numere libere de pătrate din șir. Dacă C = 2:&lt;br /&gt;
:- pe prima linie a fișierului de ieșire oneout.out se vor scrie două numere L și K despărțite printr-un spațiu, unde L reprezintă lungimea maximă a unei bisecvențe cu proprietățile cerute, iar K reprezintă numărul de bisecvențe de lungime maximă existente în șir&lt;br /&gt;
:- pe următoarele K linii se vor scrie indicii de început și de sfârșit ai fiecărei bisecvențe de lungime maximă găsite, în ordinea crescătoare a indicelui de start, despărțite printr-un spațiu&lt;br /&gt;
:- dacă șirul nu conține nicio bisecvență cu proprietățile cerute, în fișierul de ieșire se va scrie -1.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*3 ≤ N ≤ 1.000.000&lt;br /&gt;
*2 ≤ X[i] ≤ 1.000.000, 1 ≤ i ≤ N&lt;br /&gt;
*Lungimea unei bisecvențe reprezintă numărul de numere din aceasta.&lt;br /&gt;
*Datorită dimensiunilor prea mari ale testelor, s-au adăugat doar o parte din ele&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;oneout.in&lt;br /&gt;
:1&lt;br /&gt;
:6&lt;br /&gt;
:10 2 12 7 8 15&lt;br /&gt;
&lt;br /&gt;
;oneout.out&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;oneout.in&lt;br /&gt;
:0&lt;br /&gt;
:5&lt;br /&gt;
:10 20 30 40 50 &lt;br /&gt;
&lt;br /&gt;
;oneout.out&lt;br /&gt;
:Date de intrare invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4094 oneout&lt;br /&gt;
def is_square_free(num):&lt;br /&gt;
  i = 2&lt;br /&gt;
  while i * i &amp;lt;= num:&lt;br /&gt;
    if num % (i * i) == 0:&lt;br /&gt;
      return False&lt;br /&gt;
    i += 1&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def count_square_free_numbers(numbers):&lt;br /&gt;
  count = 0&lt;br /&gt;
  for num in numbers:&lt;br /&gt;
    if is_square_free(num):&lt;br /&gt;
      count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def longest_square_free_bisect(numbers):&lt;br /&gt;
  longest_length = 0&lt;br /&gt;
  current_length = 0&lt;br /&gt;
  max_length_count = 0&lt;br /&gt;
  max_length_start = -1&lt;br /&gt;
  max_length_end = -1&lt;br /&gt;
  current_start = -1&lt;br /&gt;
&lt;br /&gt;
  for i, num in enumerate(numbers):&lt;br /&gt;
    if is_square_free(num):&lt;br /&gt;
      current_length += 1&lt;br /&gt;
      if current_start == -1:&lt;br /&gt;
        current_start = i&lt;br /&gt;
    else:&lt;br /&gt;
      if current_length &amp;gt; longest_length:&lt;br /&gt;
        longest_length = current_length&lt;br /&gt;
        max_length_count = 1&lt;br /&gt;
        max_length_start = current_start&lt;br /&gt;
        max_length_end = i - 1&lt;br /&gt;
      elif current_length == longest_length:&lt;br /&gt;
        max_length_count += 1&lt;br /&gt;
      current_length = 0&lt;br /&gt;
      current_start = -1&lt;br /&gt;
&lt;br /&gt;
  if current_length &amp;gt; longest_length:&lt;br /&gt;
    longest_length = current_length&lt;br /&gt;
    max_length_count = 1&lt;br /&gt;
    max_length_start = current_start&lt;br /&gt;
    max_length_end = len(numbers) - 1&lt;br /&gt;
  elif current_length == longest_length:&lt;br /&gt;
    max_length_count += 1&lt;br /&gt;
&lt;br /&gt;
  if longest_length == 0:&lt;br /&gt;
    return -1&lt;br /&gt;
  else:&lt;br /&gt;
    return longest_length, max_length_count, max_length_start, max_length_end&lt;br /&gt;
&lt;br /&gt;
def validate_input(C, N, numbers):&lt;br /&gt;
  if C not in [1, 2]:&lt;br /&gt;
    return False&lt;br /&gt;
  if N &amp;lt; 3 or N &amp;gt; 1000000:&lt;br /&gt;
    return False&lt;br /&gt;
  if any(num &amp;lt; 2 or num &amp;gt; 1000000 for num in numbers):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;oneout.in&amp;quot;, &amp;quot;r&amp;quot;) as f_in:&lt;br /&gt;
    C = int(f_in.readline().strip())&lt;br /&gt;
    N = int(f_in.readline().strip())&lt;br /&gt;
    numbers = list(map(int, f_in.readline().split()))&lt;br /&gt;
&lt;br /&gt;
  if not validate_input(C, N, numbers):&lt;br /&gt;
    with open(&amp;quot;oneout.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
      f_out.write(&amp;quot;Date de intrare invalide.\n&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;oneout.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    if C == 1:&lt;br /&gt;
      result = count_square_free_numbers(numbers)&lt;br /&gt;
      f_out.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    elif C == 2:&lt;br /&gt;
      result = longest_square_free_bisect(numbers)&lt;br /&gt;
      if result == -1:&lt;br /&gt;
        f_out.write(&amp;quot;-1\n&amp;quot;)&lt;br /&gt;
      else:&lt;br /&gt;
        length, count, start, end = result&lt;br /&gt;
        f_out.write(f&amp;quot;{length} {count}\n&amp;quot;)&lt;br /&gt;
        for i in range(count):&lt;br /&gt;
          f_out.write(f&amp;quot;{start} {end}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
      f_out.write(&amp;quot;Cerința introdusă nu este validă.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3560_-_Stampile&amp;diff=9730</id>
		<title>3560 - Stampile</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3560_-_Stampile&amp;diff=9730"/>
		<updated>2024-03-28T10:50:45Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Cerința== Pe fiecare din porțile celor n (n &amp;lt;= 100) case dintr-un sat se scrie câte un număr, prin aplicarea unor ștampile cu cifre. Exemplu: pentru a scrie numărul 3404 se vor aplica ștampilele 3 și 0 câte o dată și ștampila 4 de două ori.  Se citesc n numere naturale (cele ce se scriu pe porți) și se cer următoarele:  a) Care este ștampila cea mai puțin folosită? b) Care este ordinea celor 10 ștampile (cu cele 10 cifre), începând cu cea mai uzată ș...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Pe fiecare din porțile celor n (n &amp;lt;= 100) case dintr-un sat se scrie câte un număr, prin aplicarea unor ștampile cu cifre. Exemplu: pentru a scrie numărul 3404 se vor aplica ștampilele 3 și 0 câte o dată și ștampila 4 de două ori.&lt;br /&gt;
&lt;br /&gt;
Se citesc n numere naturale (cele ce se scriu pe porți) și se cer următoarele:&lt;br /&gt;
&lt;br /&gt;
a) Care este ștampila cea mai puțin folosită?&lt;br /&gt;
b) Care este ordinea celor 10 ștampile (cu cele 10 cifre), începând cu cea mai uzată și terminând cu cea mai puțin folosită?&lt;br /&gt;
c) Care numere au folosit exact două ștampile?&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi n numere naturale, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Programul va afișa pe prima linie cea mai puțin uzată ștampilă, cu numărul cel mai mic. Pe a doua linie ordinea celor 10 ștampile, începând cu cea mai uzată și terminând cu cea mai puțin folosită. Pe treia linie se vor numerele care au folosit exact doua ștampile, în ordine crescătoare sau numărul -1, dacă nu există.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
1 ≤ n ≤ 100&lt;br /&gt;
Pentru a doua cerintă, dacă există mai multe ștampile care sunt la fel de uzate, atunci ele se vor afișa în ordinea descrescătoare a numărului lor.&lt;br /&gt;
Cele n numere citite vor fi cuprinse între 1 și 99999&lt;br /&gt;
&lt;br /&gt;
==Exemplu1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:7&lt;br /&gt;
:36411 78978 7824 33 6200 200 5&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:9&lt;br /&gt;
:0 2 3 7 8 1 4 6 5 9&lt;br /&gt;
:200&lt;br /&gt;
&lt;br /&gt;
==Exemplu2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:101&lt;br /&gt;
:36411 78978 7824 33 6200 200 5&lt;br /&gt;
&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Date de intrare invalide! &lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3560 Stampile&lt;br /&gt;
def least_used_stamp(numbers):&lt;br /&gt;
  stamps_freq = {}&lt;br /&gt;
  for num in numbers:&lt;br /&gt;
    for digit in str(num):&lt;br /&gt;
      stamps_freq[digit] = stamps_freq.get(digit, 0) + 1&lt;br /&gt;
  &lt;br /&gt;
  least_used = min(stamps_freq, key=stamps_freq.get)&lt;br /&gt;
  return least_used&lt;br /&gt;
&lt;br /&gt;
def stamps_order(numbers):&lt;br /&gt;
  stamps_freq = {}&lt;br /&gt;
  for num in numbers:&lt;br /&gt;
    for digit in str(num):&lt;br /&gt;
      stamps_freq[digit] = stamps_freq.get(digit, 0) + 1&lt;br /&gt;
  &lt;br /&gt;
  sorted_stamps = sorted(stamps_freq, key=lambda x: (-stamps_freq[x], int(x)))&lt;br /&gt;
  return sorted_stamps&lt;br /&gt;
&lt;br /&gt;
def numbers_with_two_stamps(numbers):&lt;br /&gt;
  result = []&lt;br /&gt;
  for num in numbers:&lt;br /&gt;
    distinct_digits = set(str(num))&lt;br /&gt;
    if len(distinct_digits) == 2:&lt;br /&gt;
      result.append(num)&lt;br /&gt;
  return result if result else -1&lt;br /&gt;
&lt;br /&gt;
def validate_input(numbers):&lt;br /&gt;
    if not numbers:&lt;br /&gt;
        return False&lt;br /&gt;
    &lt;br /&gt;
    for num in numbers:&lt;br /&gt;
        if not (isinstance(num, int) and 0 &amp;lt;= num &amp;lt;= 99999):&lt;br /&gt;
            return False&lt;br /&gt;
    &lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  n = int(input(&amp;quot;Introduceți numărul de numere: &amp;quot;))&lt;br /&gt;
  numbers = list(map(int, input(&amp;quot;Introduceți numerele separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
  if not (1 &amp;lt;= n &amp;lt;= 100 and validate_input(numbers)):&lt;br /&gt;
    print(&amp;quot;Date de intrare invalide!&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  least_used = least_used_stamp(numbers)&lt;br /&gt;
  print(least_used)&lt;br /&gt;
&lt;br /&gt;
  sorted_stamps = stamps_order(numbers)&lt;br /&gt;
  print(&amp;quot; &amp;quot;.join(sorted_stamps))&lt;br /&gt;
&lt;br /&gt;
  numbers_with_two = numbers_with_two_stamps(numbers)&lt;br /&gt;
  if numbers_with_two != -1:&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join(map(str, numbers_with_two)))&lt;br /&gt;
  else:&lt;br /&gt;
    print(-1)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4139_-_triprime&amp;diff=9729</id>
		<title>4139 - triprime</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4139_-_triprime&amp;diff=9729"/>
		<updated>2024-03-28T10:06:26Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Un număr se numește triprim dacă este produsul a trei numere prime distincte. Exemple de numere triprime: 30 = 2 × 3 × 5, 42 = 2 × 3 × 7, 231 = 3 × 7 × 11. Exemple de numere care nu sunt triprime: 77 = 7 × 11 (prea puține numere prime în produs), 3003 = 3 × 7 × 11 × 13 (prea multe numere prime în produs), 18 = 2 × 3 × 3 (numerele prime nu sunt distincte), 10241 = 7 × 7 × 11 × 19 (prea multe numere prime în produs).  ==Cerința== Date fiind num...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Un număr se numește triprim dacă este produsul a trei numere prime distincte. Exemple de numere triprime: 30 = 2 × 3 × 5, 42 = 2 × 3 × 7, 231 = 3 × 7 × 11. Exemple de numere care nu sunt triprime: 77 = 7 × 11 (prea puține numere prime în produs), 3003 = 3 × 7 × 11 × 13 (prea multe numere prime în produs), 18 = 2 × 3 × 3 (numerele prime nu sunt distincte), 10241 = 7 × 7 × 11 × 19 (prea multe numere prime în produs).&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Date fiind numerele A și B, să se afișeze numărul de numere triprime din intervalul [A, B] (inclusiv A și B).&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare triprime.in conține pe prima linie două numere naturale A și B, despărțite printr-un&lt;br /&gt;
singur spațiu.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire triprime.out va conține numărul de numere triprime din intervalul [A, B].&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ A ≤ B ≤ 390.000.000&lt;br /&gt;
*Pentru 18 puncte, 1 ≤ B ≤ 1.500.000&lt;br /&gt;
*Pentru 6 puncte, 1.500.000 &amp;lt; B ≤ 2.500.000&lt;br /&gt;
*Pentru 20 puncte, 2.500.000 &amp;lt; B ≤ 4.500.000&lt;br /&gt;
*Pentru 31 puncte, 4.500.000 &amp;lt; B ≤ 35.000.000&lt;br /&gt;
*Pentru 25 puncte, nu există alte restricții&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;triprime.in&lt;br /&gt;
:1 50&lt;br /&gt;
&lt;br /&gt;
;triprime.out&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Sunt două numere triprime de la 1 la 50: 30 = 2 × 3 × 5 și 42 = 2 × 3 × 7.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;triprime.in&lt;br /&gt;
:10 5&lt;br /&gt;
&lt;br /&gt;
;triprime.out&lt;br /&gt;
:Datele sunt invalide&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4139 triprime&lt;br /&gt;
def sieve_of_eratosthenes(n):&lt;br /&gt;
  primes = [True] * (n + 1)&lt;br /&gt;
  primes[0], primes[1] = False, False&lt;br /&gt;
  p = 2&lt;br /&gt;
  while p * p &amp;lt;= n:&lt;br /&gt;
    if primes[p] == True:&lt;br /&gt;
      for i in range(p * p, n + 1, p):&lt;br /&gt;
        primes[i] = False&lt;br /&gt;
    p += 1&lt;br /&gt;
  return [i for i in range(n + 1) if primes[i]]&lt;br /&gt;
&lt;br /&gt;
def count_triprimes_in_interval(A, B):&lt;br /&gt;
  primes = sieve_of_eratosthenes(B)&lt;br /&gt;
  count = 0&lt;br /&gt;
  for num in range(A, B + 1):&lt;br /&gt;
    prime_factors = [p for p in primes if num % p == 0]&lt;br /&gt;
    if len(prime_factors) == 3:&lt;br /&gt;
      count += 1&lt;br /&gt;
  return count&lt;br /&gt;
&lt;br /&gt;
def is_valid_input(A, B):&lt;br /&gt;
  if not (1 &amp;lt;= A &amp;lt;= B &amp;lt;= 390_000_000):&lt;br /&gt;
    return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;triprime.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    A, B = map(int, f.readline().split())&lt;br /&gt;
    &lt;br /&gt;
  if not is_valid_input(A, B):&lt;br /&gt;
    with open(&amp;quot;triprime.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(&amp;quot;Datele sunt invalide&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
&lt;br /&gt;
  triprime_count = count_triprimes_in_interval(A, B)&lt;br /&gt;
&lt;br /&gt;
  with open(&amp;quot;triprime.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
    f.write(str(triprime_count))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4140_-_bug&amp;diff=9728</id>
		<title>4140 - bug</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4140_-_bug&amp;diff=9728"/>
		<updated>2024-03-28T09:50:44Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Dacă vrei să-ți schimbi buletinul trebuie să mergi la Serviciul de Evidență a Populației. Acolo trebuie să iei un număr de ordine și să aștepți să-ți vină rândul. Numerele de ordine sunt emise de un robot, în ordinea 1,2,3,... Programatorul Vasile, care a elaborat soft-ul pentru robot și care asigură (contra cost) întreținerea sistemului, a creat intenționat un bug în sistem. Vasile are un număr natural preferat N. Un număr de ordine x va...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Dacă vrei să-ți schimbi buletinul trebuie să mergi la Serviciul de Evidență a Populației. Acolo trebuie să iei un număr de ordine și să aștepți să-ți vină rândul. Numerele de ordine sunt emise de un robot, în ordinea 1,2,3,... Programatorul Vasile, care a elaborat soft-ul pentru robot și care asigură (contra cost) întreținerea sistemului, a creat intenționat un bug în sistem. Vasile are un număr natural preferat N. Un număr de ordine x va fi emis dacă și numai dacă x este un subșir al lui N (adică toate cifrele lui x apar în N în ordinea din x, nu neapărat pe poziții consecutive). Dacă numărul de ordine curent x nu îndeplinește această condiție, robotul se blochează și nu mai emite numere de ordine.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Scrieți un program care, cunoscând valoarea lui N, numărul natural preferat de Vasile, rezolvă următoarele două cerințe:&lt;br /&gt;
1. determină câte cifre are numărul de ordine x care conduce la blocarea robotului;&lt;br /&gt;
2. determină numărul de ordine x care conduce la blocarea robotului.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare bug.in conține pe prima linie cerința C care trebuie să fie rezolvată (1 sau 2). Pe cea de-a doua linie se află numărul natural N.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire bug.out va conține o singură linie pe care va fi scris răspunsul la cerința C.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*N este un număr natural nenul având cel mult 100.000 de cifre.&lt;br /&gt;
*Pentru 23 de puncte, C = 1&lt;br /&gt;
*Pentru 10 de puncte, C = 2 și N are cel mult 18 cifre.&lt;br /&gt;
*Pentru 10 de puncte, C = 2, N are cel puțin 20 de cifre și rezultatul are cel mult 7 cifre.&lt;br /&gt;
*Pentru 30 de puncte, C = 2, N are cel puțin 101 și cel mult 10.000 de cifre.&lt;br /&gt;
*Pentru 27 de puncte, C = 2 și nu există alte restricții.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;bug.in&lt;br /&gt;
:1&lt;br /&gt;
:1032&lt;br /&gt;
&lt;br /&gt;
;bug.out&lt;br /&gt;
:1&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Cel mai mic număr natural nenul care nu este subșir al lui 1032 are o singură cifră.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;bug.in&lt;br /&gt;
:2&lt;br /&gt;
:1032&lt;br /&gt;
&lt;br /&gt;
;bug.out&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Cel mai mic număr natural nenul care nu este subșir al lui 1032 este 4.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;bug.in&lt;br /&gt;
:1&lt;br /&gt;
:-1032&lt;br /&gt;
&lt;br /&gt;
;bug.out&lt;br /&gt;
:Eroare: Numărul preferat trebuie să fie un număr natural nenul.&lt;br /&gt;
&lt;br /&gt;
==Exemplul 4==&lt;br /&gt;
;bug.in&lt;br /&gt;
:3&lt;br /&gt;
:-1032&lt;br /&gt;
&lt;br /&gt;
;bug.out&lt;br /&gt;
:Eroare: Query-ul trebuie să fie 1 sau 2.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4140 bug&lt;br /&gt;
def check_input(query, preferred_number):&lt;br /&gt;
    # Verificăm dacă query-ul este valid&lt;br /&gt;
    if query != 1 and query != 2:&lt;br /&gt;
        return &amp;quot;Eroare: Query-ul trebuie să fie 1 sau 2.&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    # Verificăm dacă preferred_number este un număr natural nenul&lt;br /&gt;
    if preferred_number &amp;lt;= 0:&lt;br /&gt;
        return &amp;quot;Eroare: Numărul preferat trebuie să fie un număr natural nenul.&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    return None&lt;br /&gt;
&lt;br /&gt;
def is_subsequence(number, preferred_number):&lt;br /&gt;
    number_str = str(number)&lt;br /&gt;
    preferred_str = str(preferred_number)&lt;br /&gt;
    i = 0&lt;br /&gt;
    &lt;br /&gt;
    for digit in preferred_str:&lt;br /&gt;
        if digit == number_str[i]:&lt;br /&gt;
            i += 1&lt;br /&gt;
            if i == len(number_str):&lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def find_smallest_non_subsequence(preferred_number):&lt;br /&gt;
    i = 1&lt;br /&gt;
    while True:&lt;br /&gt;
        if not is_subsequence(i, preferred_number):&lt;br /&gt;
            return i&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citim datele de intrare&lt;br /&gt;
    with open(&amp;quot;bug.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        query = int(f.readline())&lt;br /&gt;
        preferred_number = int(f.readline())&lt;br /&gt;
&lt;br /&gt;
    # Verificăm datele de intrare&lt;br /&gt;
    error_message = check_input(query, preferred_number)&lt;br /&gt;
    if error_message:&lt;br /&gt;
        with open(&amp;quot;bug.out&amp;quot;, &amp;quot;w&amp;quot;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
            f.write(error_message)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Rezolvăm cerința&lt;br /&gt;
    if query == 1:&lt;br /&gt;
        smallest_non_subsequence = find_smallest_non_subsequence(preferred_number)&lt;br /&gt;
        with open(&amp;quot;bug.out&amp;quot;, &amp;quot;w&amp;quot;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
            f.write(str(len(str(smallest_non_subsequence))))&lt;br /&gt;
    else:&lt;br /&gt;
        smallest_non_subsequence = find_smallest_non_subsequence(preferred_number)&lt;br /&gt;
        with open(&amp;quot;bug.out&amp;quot;, &amp;quot;w&amp;quot;, encoding=&#039;utf-8&#039;) as f:&lt;br /&gt;
            f.write(str(smallest_non_subsequence))&lt;br /&gt;
&lt;br /&gt;
# Apelăm funcția main pentru a rezolva cerința&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1161_-_Big_Number&amp;diff=9727</id>
		<title>1161 - Big Number</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1161_-_Big_Number&amp;diff=9727"/>
		<updated>2024-03-28T08:53:39Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Algorel tocmai a avut un interviu la AlgoTech. Fiind isteţ din fire, el a reuşit să rezolve toate problemele, mai puţin una de care nu reuşeşte nicicum să se prindă cum se face. Aflând că la Iaşi are loc Concursul Urmaşii lui Moisil, s-a gândit să propună această problemă şi să ofere 100 de puncte ca recompensă celor care o rezolvă corect.  Fie un şir cu N cifre asupra căruia se poate efectua operaţia swap de maxim X ori. Prin swap se înţe...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Algorel tocmai a avut un interviu la AlgoTech. Fiind isteţ din fire, el a reuşit să rezolve toate problemele, mai puţin una de care nu reuşeşte nicicum să se prindă cum se face. Aflând că la Iaşi are loc Concursul Urmaşii lui Moisil, s-a gândit să propună această problemă şi să ofere 100 de puncte ca recompensă celor care o rezolvă corect.&lt;br /&gt;
&lt;br /&gt;
Fie un şir cu N cifre asupra căruia se poate efectua operaţia swap de maxim X ori. Prin swap se înţelege interschimbarea a două elemente din şir aflate pe poziţii vecine.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Să se determine numărul maxim care se poate obţine din şirul cu N cifre, după efectuarea a maxim X operaţii swap.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare bignumber.in conține pe prima linie numerele naturale N şi X separate prin exact un spaţiu, iar pe următoarea linie se află N cifre fără spaţiu.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire bignumber.out va conține pe prima linie numărul maxim care se poate obţine conform cerinţei din enunţ.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ N ≤ 1.000.000&lt;br /&gt;
*0 ≤ X ≤ 1.000.000.000&lt;br /&gt;
*Pentru 30% din teste N ≤ 5.000&lt;br /&gt;
*Pentru alte 20% din teste X ≤ 25.000.000&lt;br /&gt;
&lt;br /&gt;
==Exemplu1==&lt;br /&gt;
;bignumber.in&lt;br /&gt;
:5 3&lt;br /&gt;
:14325&lt;br /&gt;
&lt;br /&gt;
;bignumber.out&lt;br /&gt;
:41532&lt;br /&gt;
&lt;br /&gt;
==Exemplu2==&lt;br /&gt;
;bignumber.in&lt;br /&gt;
:1000001 3&lt;br /&gt;
:12345&lt;br /&gt;
&lt;br /&gt;
;bignumber.out&lt;br /&gt;
:Date invalide.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1161 BigNumber&lt;br /&gt;
def maximum_number(N, X, digits):&lt;br /&gt;
  result = list(digits)&lt;br /&gt;
&lt;br /&gt;
  for i in range(N):&lt;br /&gt;
    max_index = i&lt;br /&gt;
    for j in range(i + 1, min(N, i + X + 1)):&lt;br /&gt;
      if digits[j] &amp;gt; digits[max_index]:&lt;br /&gt;
        max_index = j&lt;br /&gt;
&lt;br /&gt;
    for j in range(max_index, i, -1):&lt;br /&gt;
      if X &amp;lt;= 0:&lt;br /&gt;
        break&lt;br /&gt;
      result[j], result[j - 1] = result[j - 1], result[j]&lt;br /&gt;
      X -= 1&lt;br /&gt;
&lt;br /&gt;
  return &#039;&#039;.join(result)&lt;br /&gt;
&lt;br /&gt;
def is_valid_input(N, X, digits):&lt;br /&gt;
  if not (1 &amp;lt;= N &amp;lt;= 1000000):&lt;br /&gt;
    return False&lt;br /&gt;
  if not (0 &amp;lt;= X &amp;lt;= 1000000000):&lt;br /&gt;
    return False&lt;br /&gt;
  if len(digits) != N:&lt;br /&gt;
    return False&lt;br /&gt;
  for digit in digits:&lt;br /&gt;
    if not (&#039;0&#039; &amp;lt;= digit &amp;lt;= &#039;9&#039;):&lt;br /&gt;
      return False&lt;br /&gt;
  return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;bignumber.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    N, X = map(int, f.readline().split())&lt;br /&gt;
    digits = f.readline().strip()&lt;br /&gt;
&lt;br /&gt;
  if not is_valid_input(N, X, digits):&lt;br /&gt;
    with open(&amp;quot;bignumber.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
        f_out.write(&amp;quot;Date invalide.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
  else:&lt;br /&gt;
    max_number = maximum_number(N, X, digits)&lt;br /&gt;
    with open(&amp;quot;bignumber.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
        f_out.write(max_number)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1505_-_B_210&amp;diff=9726</id>
		<title>1505 - B 210</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1505_-_B_210&amp;diff=9726"/>
		<updated>2024-03-28T08:21:28Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Vasilică tocmai a învăţat la şcoală despre sistemul de numeraţie cu baza 2. I se pare interesant şi a inventat jocul b210, pe care vrea să îl joace cu prietenul său Gigel. Vasilică îi spune lui Gigel un număr natural nenul n, scris în baza 10. Gigel trebuie să scrie numărul în baza 2, obţinând astfel o secvenţă de cifre binare, care începe cu 1. Asupra scrierii în baza 2 a numărului n Gigel poate aplica una sau mai multe permutări circular...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Vasilică tocmai a învăţat la şcoală despre sistemul de numeraţie cu baza 2. I se pare interesant şi a inventat jocul b210, pe care vrea să îl joace cu prietenul său Gigel. Vasilică îi spune lui Gigel un număr natural nenul n, scris în baza 10. Gigel trebuie să scrie numărul în baza 2, obţinând astfel o secvenţă de cifre binare, care începe cu 1. Asupra scrierii în baza 2 a numărului n Gigel poate aplica una sau mai multe permutări circulare. Printr-o permutare circulară, toate cifrele secvenţei date, exceptând ultima, sunt mutate cu o poziţie spre dreapta, iar ultima cifră devine prima.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă n=107, scrierea sa în baza 2 este 1101011. Prin permutări circulare succesive putem obţine, în ordine, secvenţele:&lt;br /&gt;
&lt;br /&gt;
:1110101&lt;br /&gt;
:1111010&lt;br /&gt;
:0111101&lt;br /&gt;
:1011110&lt;br /&gt;
:...&lt;br /&gt;
&lt;br /&gt;
Fiecare astfel de secvenţă este scrierea în baza 2 a unui număr natural, pe care Gigel îl transformă în baza 10. Gigel trebuie să afle care este cel mai mare număr natural m, scris în baza 10, a cărui scriere în baza 2 se poate obţine prin una sau mai multe permutări circulare ale scrierii în baza 2 a numărului n. Lui Gigel jocul nu i se pare aşa interesant şi ar prefera să aibă un program care să determine în locul lui numărul natural m.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Scrieţi un program care citeşte numărul natural nenul n şi care determină cel mai mare număr natural m, scris în baza 10, care poate fi obţinut prin una sau mai multe permutări circulare ale scrierii în baza 2 a numărului natural n.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare b210.in conține pe prima linie numărul natural nenul n.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fișierul de ieșire b210.out va conține pe prima linie numărul natural m, cu semnificaţia din enunţ.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
0 &amp;lt; n ≤ 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
==Exemplu1==&lt;br /&gt;
;b210.in&lt;br /&gt;
:13&lt;br /&gt;
&lt;br /&gt;
;b210.out&lt;br /&gt;
:14&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Scrierea în baza 2 a lui 13 este 1101.&lt;br /&gt;
&lt;br /&gt;
Numărul maxim scris în baza 10 a cărui scriere în baza 2 se poate obţine din permutări circulare ale scrierii în baza 2 a lui 13 este 14, a cărui scriere în baza 2 este 1110.&lt;br /&gt;
&lt;br /&gt;
==Exemplu2==&lt;br /&gt;
;b210.in&lt;br /&gt;
:-10&lt;br /&gt;
&lt;br /&gt;
;b210.out&lt;br /&gt;
:Date invalide in fisierul de intrare.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1505 B210&lt;br /&gt;
def decimal_to_binary(n):&lt;br /&gt;
  # Convertim numărul din baza 10 în baza 2&lt;br /&gt;
  return bin(n)[2:]&lt;br /&gt;
&lt;br /&gt;
def rotate_left(s):&lt;br /&gt;
  # Rotim cifrele la stânga&lt;br /&gt;
  return s[1:] + s[0]&lt;br /&gt;
&lt;br /&gt;
def find_largest_permuted_number(n):&lt;br /&gt;
  binary = decimal_to_binary(n)&lt;br /&gt;
  largest_number = n&lt;br /&gt;
  &lt;br /&gt;
  # Generăm toate permutările circulare&lt;br /&gt;
  for _ in range(len(binary) - 1):&lt;br /&gt;
      binary = rotate_left(binary)&lt;br /&gt;
      # Convertim înapoi în baza 10&lt;br /&gt;
      num = int(binary, 2)&lt;br /&gt;
      # Actualizăm cel mai mare număr&lt;br /&gt;
      largest_number = max(largest_number, num)&lt;br /&gt;
  &lt;br /&gt;
  return largest_number&lt;br /&gt;
&lt;br /&gt;
def is_valid_input(n):&lt;br /&gt;
  # Verificăm dacă numărul este nenul și se încadrează în limitele impuse&lt;br /&gt;
  return 0 &amp;lt; n &amp;lt;= 1000000000&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
  with open(&amp;quot;b210.in&amp;quot;, &amp;quot;r&amp;quot;) as f_in:&lt;br /&gt;
    n = int(f_in.readline().strip())&lt;br /&gt;
&lt;br /&gt;
  if not is_valid_input(n):&lt;br /&gt;
    with open(&amp;quot;b210.out&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
      f_out.write(&amp;quot;Date invalide in fisierul de intrare.&amp;quot;)&lt;br /&gt;
    return&lt;br /&gt;
  &lt;br /&gt;
  # Determinăm cel mai mare număr permis&lt;br /&gt;
  largest_number = find_largest_permuted_number(n)&lt;br /&gt;
  &lt;br /&gt;
  # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
  with open(&amp;quot;b210.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
    f.write(str(largest_number))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2120_-_Concurs_4&amp;diff=9725</id>
		<title>2120 - Concurs 4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2120_-_Concurs_4&amp;diff=9725"/>
		<updated>2024-03-28T07:26:12Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== La concursul de patinaj artistic din acest an s-au înscris n concurenţi. După înscriere, participanţilor li se asociază coduri numerice distincte aparţinând mulţimii primelor n numere prime.  Pentru a stabili ordinea intrării în concurs, concurenţii sunt aşezaţi în cerc, după care se procedează astfel:  primul participant în concurs este cel situat pe poziţia 1 pentru alegerea celorlalţi, se parcurge circular lista de concurenţi, alegând din k...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
La concursul de patinaj artistic din acest an s-au înscris n concurenţi. După înscriere, participanţilor li se asociază coduri numerice distincte aparţinând mulţimii primelor n numere prime.&lt;br /&gt;
&lt;br /&gt;
Pentru a stabili ordinea intrării în concurs, concurenţii sunt aşezaţi în cerc, după care se procedează astfel:&lt;br /&gt;
&lt;br /&gt;
primul participant în concurs este cel situat pe poziţia 1&lt;br /&gt;
pentru alegerea celorlalţi, se parcurge circular lista de concurenţi, alegând din k în k, câte un unul, până la repartizarea tuturor.&lt;br /&gt;
Regulamentul prevede ca participanţii să intre în concurs în ordinea crescătoare a codurilor lor.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
Cunoscând numărul n de concurenţi precum şi numărul k folosit la repartizarea concurenţilor în concurs, se cere să se determine şirul codurilor asociate concurenţilor, astfel încât intrarea lor în concurs să se facă conform regulamentului.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul concurs4.in conţine pe prima linie numerele naturale n şi k cu semnificaţiile din enunţ.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Fişierul concurs4.out va conţine n numere naturale separate prin câte un spaţiu, reprezentând şirul codurilor asociate concurenţilor, astfel încât intrarea lor în concurs să se facă conform regulamentului.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
• 2 ≤ k ≤ n ≤ 30000&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;concurs4.in&lt;br /&gt;
:10 4&lt;br /&gt;
&lt;br /&gt;
;concurs4.out&lt;br /&gt;
:2 29 23 7 3 17 13 19 5 11&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
Distribuirea codurilor se face astfel:&lt;br /&gt;
2 29 23 7 3 17 13 19 5 11 Numărând din 4 în 4, începând cu primul cod, se obţine următoarea listă:&lt;br /&gt;
2 3 5 7 11 13 17 19 23 29 reprezentând primele 10 numere prime.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;concurs4.in&lt;br /&gt;
:1 1&lt;br /&gt;
&lt;br /&gt;
;concurs4.out&lt;br /&gt;
Valorile pentru n si k trebuie sa fie in intervalul [2, 30000].&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2120 Concurs4&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar ** 0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def genereaza_prime(n):&lt;br /&gt;
    prime = []&lt;br /&gt;
    numar = 2&lt;br /&gt;
    while len(prime) &amp;lt; n:&lt;br /&gt;
        if este_prim(numar):&lt;br /&gt;
            prime.append(numar)&lt;br /&gt;
        numar += 1&lt;br /&gt;
    return prime&lt;br /&gt;
&lt;br /&gt;
def alege_concurenti(n, k):&lt;br /&gt;
    prime = genereaza_prime(n)&lt;br /&gt;
    concurenti = []&lt;br /&gt;
&lt;br /&gt;
    index = 0&lt;br /&gt;
    while len(concurenti) &amp;lt; n:&lt;br /&gt;
        index = (index + k - 1) % len(prime)&lt;br /&gt;
        concurenti.append(prime.pop(index))&lt;br /&gt;
    return concurenti&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(n, k):&lt;br /&gt;
    if not (2 &amp;lt;= k &amp;lt;= n &amp;lt;= 30000):&lt;br /&gt;
        with open(&amp;quot;concurs4.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(&amp;quot;Valorile pentru n si k trebuie sa fie in intervalul [2, 30000].&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;concurs4.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, k = map(int, f.readline().split())&lt;br /&gt;
        verifica_date_intrare(n, k)&lt;br /&gt;
&lt;br /&gt;
    coduri_concurenti = alege_concurenti(n, k)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;concurs4.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(&amp;quot; &amp;quot;.join(map(str, coduri_concurenti)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3680_-_Numere_X&amp;diff=9724</id>
		<title>3680 - Numere X</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3680_-_Numere_X&amp;diff=9724"/>
		<updated>2024-03-28T06:31:34Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Pentru un număr natural nenul X, se numește divizor propriu al lui X, un divizor natural al lui X, diferit de 1 și X. De exemplu, pentru numărul 20 divizorii proprii sunt 2, 4, 5, 10, iar numărul 20 are 4 divizori proprii.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
1. Se dă un număr natural N. Determinați cel mai mic număr din intervalul închis [1,N] care are număr maxim de divizori proprii.&lt;br /&gt;
2. Se dau trei numere N, M și T. Determinați câte intervale de forma [a,b] au proprietatea că există exact M numere naturale care au T divizori proprii.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare numere.in conține pe prima linie un număr natural P reprezentând cerința din problemă care trebuie rezolvată.&lt;br /&gt;
&lt;br /&gt;
Dacă P = 1 atunci pe a doua linie se găsește un număr natural N, reprezentând extremitatea din dreapta a intervalului.&lt;br /&gt;
&lt;br /&gt;
Dacă P = 2 atunci pe a doua linie se găsesc trei numere: un număr natural N, un număr natural M și un număr natural T cu semnificațiile din enunț.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Dacă P = 1 atunci fișierul de ieșire numere.out conține pe o singură linie numărul cel mai mic determinat care are număr maxim de divizori.&lt;br /&gt;
&lt;br /&gt;
Dacă P = 2 atunci fișierul de ieșire numere.out conține pe o singură linie numărul de intervale determinate care au proprietatea cerută.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ N ≤ 100000&lt;br /&gt;
*1 ≤ M ≤ 100000&lt;br /&gt;
*1 ≤ T ≤ 100000&lt;br /&gt;
*1 ≤ a ≤ b ≤ N&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;numere.in&lt;br /&gt;
:1&lt;br /&gt;
:20&lt;br /&gt;
&lt;br /&gt;
;numere.out&lt;br /&gt;
:12&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
12 are 4 divizori proprii și este cel mai mic număr cu 4 divizori proprii din [1,20].&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;numere.in&lt;br /&gt;
:2&lt;br /&gt;
:10 3 2&lt;br /&gt;
&lt;br /&gt;
;numere.out&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
[1,10], [2,10], [3,10], [4,10], [5,10], [6,10] sunt cele 6 intervale în care se găsesc exact 3 numere cu 2 divizori proprii(6, 8, 10 sunt numerele cu 3 divizori proprii).&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;numere.in&lt;br /&gt;
:1&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
;numere.out&lt;br /&gt;
:Datele introduse sunt invalide&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3680 - Numere X&lt;br /&gt;
def numar_divizori(n):&lt;br /&gt;
    divizori = 0&lt;br /&gt;
    for i in range(2, int(n**0.5) + 1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            if n // i == i:&lt;br /&gt;
                divizori += 1&lt;br /&gt;
            else:&lt;br /&gt;
                divizori += 2&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
def cel_mai_mic_numar_cu_max_divizori(N):&lt;br /&gt;
    maxim_divizori = 0&lt;br /&gt;
    numar = 0&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        divizori = numar_divizori(i)&lt;br /&gt;
        if divizori &amp;gt; maxim_divizori:&lt;br /&gt;
            maxim_divizori = divizori&lt;br /&gt;
            numar = i&lt;br /&gt;
    return numar&lt;br /&gt;
&lt;br /&gt;
def numar_intervale_cu_M_numere_T_divizori(N, M, T):&lt;br /&gt;
    numar_intervale = 0&lt;br /&gt;
    for a in range(1, N + 1):&lt;br /&gt;
        for b in range(a, N + 1):&lt;br /&gt;
            numere_cu_T_divizori = sum(1 for x in range(a, b + 1) if numar_divizori(x) == T)&lt;br /&gt;
            if numere_cu_T_divizori == M:&lt;br /&gt;
                numar_intervale += 1&lt;br /&gt;
    return numar_intervale&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(P, N, M, T):&lt;br /&gt;
    if P not in [1, 2]:&lt;br /&gt;
        return False&lt;br /&gt;
    if P == 1:&lt;br /&gt;
        if not isinstance(N, int) or N &amp;lt; 1 or N &amp;gt; 100000:&lt;br /&gt;
            return False&lt;br /&gt;
    elif P == 2:&lt;br /&gt;
        if not (isinstance(N, int) and isinstance(M, int) and isinstance(T, int)):&lt;br /&gt;
            return False&lt;br /&gt;
        if not (1 &amp;lt;= N &amp;lt;= 100000 and 1 &amp;lt;= M &amp;lt;= 100000 and 1 &amp;lt;= T &amp;lt;= 100000):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N = None&lt;br /&gt;
    with open(&amp;quot;numere.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        P = int(fin.readline().strip())&lt;br /&gt;
        if P == 1:&lt;br /&gt;
            N = int(fin.readline().strip())&lt;br /&gt;
        elif P == 2:&lt;br /&gt;
            N, M, T = map(int, fin.readline().strip().split())&lt;br /&gt;
&lt;br /&gt;
    if not verifica_date_intrare(P, N, M if P == 2 else None, T if P == 2 else None):&lt;br /&gt;
        with open(&amp;quot;numere.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(&amp;quot;Datele introduse sunt invalide\n&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if P == 1:&lt;br /&gt;
        rezultat = cel_mai_mic_numar_cu_max_divizori(N)&lt;br /&gt;
    else:&lt;br /&gt;
        rezultat = numar_intervale_cu_M_numere_T_divizori(N, M, T)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;numere.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3680_-_Numere_X&amp;diff=9723</id>
		<title>3680 - Numere X</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3680_-_Numere_X&amp;diff=9723"/>
		<updated>2024-03-28T06:30:25Z</updated>

		<summary type="html">&lt;p&gt;Cristina94: Pagină nouă: ==Enunţ== Pentru un număr natural nenul X, se numește divizor propriu al lui X, un divizor natural al lui X, diferit de 1 și X. De exemplu, pentru numărul 20 divizorii proprii sunt 2, 4, 5, 10, iar numărul 20 are 4 divizori proprii.  ==Cerința== 1. Se dă un număr natural N. Determinați cel mai mic număr din intervalul închis [1,N] care are număr maxim de divizori proprii. 2. Se dau trei numere N, M și T. Determinați câte intervale de forma [a,b] au proprietate...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Enunţ==&lt;br /&gt;
Pentru un număr natural nenul X, se numește divizor propriu al lui X, un divizor natural al lui X, diferit de 1 și X. De exemplu, pentru numărul 20 divizorii proprii sunt 2, 4, 5, 10, iar numărul 20 are 4 divizori proprii.&lt;br /&gt;
&lt;br /&gt;
==Cerința==&lt;br /&gt;
1. Se dă un număr natural N. Determinați cel mai mic număr din intervalul închis [1,N] care are număr maxim de divizori proprii.&lt;br /&gt;
2. Se dau trei numere N, M și T. Determinați câte intervale de forma [a,b] au proprietatea că există exact M numere naturale care au T divizori proprii.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare numere.in conține pe prima linie un număr natural P reprezentând cerința din problemă care trebuie rezolvată.&lt;br /&gt;
&lt;br /&gt;
Dacă P = 1 atunci pe a doua linie se găsește un număr natural N, reprezentând extremitatea din dreapta a intervalului.&lt;br /&gt;
&lt;br /&gt;
Dacă P = 2 atunci pe a doua linie se găsesc trei numere: un număr natural N, un număr natural M și un număr natural T cu semnificațiile din enunț.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Dacă P = 1 atunci fișierul de ieșire numere.out conține pe o singură linie numărul cel mai mic determinat care are număr maxim de divizori.&lt;br /&gt;
&lt;br /&gt;
Dacă P = 2 atunci fișierul de ieșire numere.out conține pe o singură linie numărul de intervale determinate care au proprietatea cerută.&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
*1 ≤ N ≤ 100000&lt;br /&gt;
*1 ≤ M ≤ 100000&lt;br /&gt;
*1 ≤ T ≤ 100000&lt;br /&gt;
*1 ≤ a ≤ b ≤ N&lt;br /&gt;
&lt;br /&gt;
==Exemplul 1==&lt;br /&gt;
;numere.in&lt;br /&gt;
:1&lt;br /&gt;
:20&lt;br /&gt;
&lt;br /&gt;
;numere.out&lt;br /&gt;
:12&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
12 are 4 divizori proprii și este cel mai mic număr cu 4 divizori proprii din [1,20].&lt;br /&gt;
&lt;br /&gt;
==Exemplul 2==&lt;br /&gt;
;numere.in&lt;br /&gt;
:2&lt;br /&gt;
:10 3 2&lt;br /&gt;
&lt;br /&gt;
;numere.out&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
==Explicație==&lt;br /&gt;
[1,10], [2,10], [3,10], [4,10], [5,10], [6,10] sunt cele 6 intervale în care se găsesc exact 3 numere cu 2 divizori proprii(6, 8, 10 sunt numerele cu 3 divizori proprii).&lt;br /&gt;
&lt;br /&gt;
==Exemplul 3==&lt;br /&gt;
;numere.in&lt;br /&gt;
:1&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
;numere.out&lt;br /&gt;
:Datele introduse sunt invalide&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def numar_divizori(n):&lt;br /&gt;
    divizori = 0&lt;br /&gt;
    for i in range(2, int(n**0.5) + 1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            if n // i == i:&lt;br /&gt;
                divizori += 1&lt;br /&gt;
            else:&lt;br /&gt;
                divizori += 2&lt;br /&gt;
    return divizori&lt;br /&gt;
&lt;br /&gt;
def cel_mai_mic_numar_cu_max_divizori(N):&lt;br /&gt;
    maxim_divizori = 0&lt;br /&gt;
    numar = 0&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        divizori = numar_divizori(i)&lt;br /&gt;
        if divizori &amp;gt; maxim_divizori:&lt;br /&gt;
            maxim_divizori = divizori&lt;br /&gt;
            numar = i&lt;br /&gt;
    return numar&lt;br /&gt;
&lt;br /&gt;
def numar_intervale_cu_M_numere_T_divizori(N, M, T):&lt;br /&gt;
    numar_intervale = 0&lt;br /&gt;
    for a in range(1, N + 1):&lt;br /&gt;
        for b in range(a, N + 1):&lt;br /&gt;
            numere_cu_T_divizori = sum(1 for x in range(a, b + 1) if numar_divizori(x) == T)&lt;br /&gt;
            if numere_cu_T_divizori == M:&lt;br /&gt;
                numar_intervale += 1&lt;br /&gt;
    return numar_intervale&lt;br /&gt;
&lt;br /&gt;
def verifica_date_intrare(P, N, M, T):&lt;br /&gt;
    if P not in [1, 2]:&lt;br /&gt;
        return False&lt;br /&gt;
    if P == 1:&lt;br /&gt;
        if not isinstance(N, int) or N &amp;lt; 1 or N &amp;gt; 100000:&lt;br /&gt;
            return False&lt;br /&gt;
    elif P == 2:&lt;br /&gt;
        if not (isinstance(N, int) and isinstance(M, int) and isinstance(T, int)):&lt;br /&gt;
            return False&lt;br /&gt;
        if not (1 &amp;lt;= N &amp;lt;= 100000 and 1 &amp;lt;= M &amp;lt;= 100000 and 1 &amp;lt;= T &amp;lt;= 100000):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N = None&lt;br /&gt;
    with open(&amp;quot;numere.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        P = int(fin.readline().strip())&lt;br /&gt;
        if P == 1:&lt;br /&gt;
            N = int(fin.readline().strip())&lt;br /&gt;
        elif P == 2:&lt;br /&gt;
            N, M, T = map(int, fin.readline().strip().split())&lt;br /&gt;
&lt;br /&gt;
    if not verifica_date_intrare(P, N, M if P == 2 else None, T if P == 2 else None):&lt;br /&gt;
        with open(&amp;quot;numere.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(&amp;quot;Datele introduse sunt invalide\n&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if P == 1:&lt;br /&gt;
        rezultat = cel_mai_mic_numar_cu_max_divizori(N)&lt;br /&gt;
    else:&lt;br /&gt;
        rezultat = numar_intervale_cu_M_numere_T_divizori(N, M, T)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;numere.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Cristina94</name></author>
	</entry>
</feed>