<?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=Ardelean+Alexandru</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=Ardelean+Alexandru"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Ardelean_Alexandru"/>
	<updated>2026-05-01T05:56:30Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2246_-_Adobe&amp;diff=6111</id>
		<title>2246 - Adobe</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2246_-_Adobe&amp;diff=6111"/>
		<updated>2023-05-07T11:24:45Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Domnul Eboda dorește să se angajeze la firma Adobe. La interviu el primește următoarea problemă.  Se dă un șir de caractere format din litere și caracterele &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;. Domnul Eboda trebuie să determine câte subsecvențe de lungime &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; sunt anagrame ale cuvântului &amp;lt;code&amp;gt;ADOBE&amp;lt;/code&amp;gt;. Regulile suplimentare sunt că nu se face distincție între literele mari și cele mici și în plus, caracterul &amp;lt;code&amp;gt;+...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Domnul Eboda dorește să se angajeze la firma Adobe. La interviu el primește următoarea problemă.&lt;br /&gt;
&lt;br /&gt;
Se dă un șir de caractere format din litere și caracterele &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt;. Domnul Eboda trebuie să determine câte subsecvențe de lungime &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; sunt anagrame ale cuvântului &amp;lt;code&amp;gt;ADOBE&amp;lt;/code&amp;gt;. Regulile suplimentare sunt că nu se face distincție între literele mari și cele mici și în plus, caracterul &amp;lt;code&amp;gt;+&amp;lt;/code&amp;gt; poate suplini oricare consoană, caracterul &amp;lt;code&amp;gt;-&amp;lt;/code&amp;gt; suplinește orice vocală, iar &amp;lt;code&amp;gt;*&amp;lt;/code&amp;gt; suplinește orice literă. Cu aceste reguli putem spune că următoarele secvențe de cinci caractere sunt anagrame ale cuvântului &amp;lt;code&amp;gt;adobe&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;aeobd&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;dBoAE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;db---&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Ae-++&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;*****&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;++---&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ad*-+&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură șirul de caractere.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa un singur număr natural reprezentând numărul de subsecvențe de lungime &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; care sunt anagrame ale cuvântului &amp;lt;code&amp;gt;ADOBE&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* Șirul va avea cel mult &amp;lt;code&amp;gt;100 000&amp;lt;/code&amp;gt; de caractere și nu conține alte caractere în afara celor precizate în enunț.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:ebodaE+m***++&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:4&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cele patru subsecvențe sunt: &amp;lt;code&amp;gt;eboda&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;bodaE&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;odaE+&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;***++&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:e1b2o3d4a5E6+7m8*9*0*9+8+76&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2246 - Adobe&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(sir):&lt;br /&gt;
    if re.match(&amp;quot;^[a-zA-Z*+-]*$&amp;quot;, sir):&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def adobe(sir):&lt;br /&gt;
    # Șirul este case-insensitive, deci poate fi convertit în litere mici&lt;br /&gt;
    sir = sir.lower()&lt;br /&gt;
    # Ținem cont de subsecvențe&lt;br /&gt;
    nr_subsecvente = 0&lt;br /&gt;
&lt;br /&gt;
    # Pentru fiecare grupare de 5 caractere&lt;br /&gt;
    for i in range(0, len(sir)-5):&lt;br /&gt;
        # Dacă este anagramă a cuvântului &amp;quot;adobe&amp;quot;...&lt;br /&gt;
        if sorted(sir[i:i + 5]) == sorted(&amp;quot;adobe&amp;quot;):&lt;br /&gt;
            # ...creștem numărul de subsecvențe&lt;br /&gt;
            nr_subsecvente += 1&lt;br /&gt;
            continue&lt;br /&gt;
        # Altfel...&lt;br /&gt;
        else:&lt;br /&gt;
            subsir = sir[i:i + 5]&lt;br /&gt;
            # Inițializăm numărul de consoane, vocale și litere lipsă&lt;br /&gt;
            # &amp;quot;Adobe&amp;quot; conține 2 consoane, 3 vocale; în total 5 litere&lt;br /&gt;
            consoane_lipsa, vocale_lipsa, litere_lipsa = 2, 3, 5&lt;br /&gt;
            # Pentru fiecare caracter din subsir...&lt;br /&gt;
            for caracter in subsir:&lt;br /&gt;
                # ...dacă caracterul este *...&lt;br /&gt;
                if caracter == &amp;quot;*&amp;quot;:&lt;br /&gt;
                    # ...scădem numărul de vocale, consoane și litere lipsă&lt;br /&gt;
                    litere_lipsa -= 1&lt;br /&gt;
                    vocale_lipsa -= 1&lt;br /&gt;
                    consoane_lipsa -= 1&lt;br /&gt;
                    continue&lt;br /&gt;
                # ...dacă caracterul este vocală sau -...&lt;br /&gt;
                if caracter in (&amp;quot;a&amp;quot;, &amp;quot;o&amp;quot;, &amp;quot;e&amp;quot;, &amp;quot;-&amp;quot;):&lt;br /&gt;
                    # ...scădem numărul de vocale și litere lipsă&lt;br /&gt;
                    vocale_lipsa -= 1&lt;br /&gt;
                    litere_lipsa -= 1&lt;br /&gt;
                    continue&lt;br /&gt;
                # ...dacă caracterul este consoană sau +...&lt;br /&gt;
                if caracter in (&amp;quot;b&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;+&amp;quot;):&lt;br /&gt;
                    # ...scădem numărul de consoane și litere lipsă&lt;br /&gt;
                    consoane_lipsa -= 1&lt;br /&gt;
                    litere_lipsa -= 1&lt;br /&gt;
                    continue&lt;br /&gt;
&lt;br /&gt;
            # Dacă nu mai lipsesc consoane, vocale sau litere...&lt;br /&gt;
            if consoane_lipsa+vocale_lipsa+litere_lipsa == 0:&lt;br /&gt;
                # ...creștem numărul de subsecvențe&lt;br /&gt;
                nr_subsecvente += 1&lt;br /&gt;
&lt;br /&gt;
    print(nr_subsecvente)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sir = input()&lt;br /&gt;
&lt;br /&gt;
    if not conditii(sir):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        adobe(sir)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1544_-_Muzical&amp;diff=6110</id>
		<title>1544 - Muzical</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1544_-_Muzical&amp;diff=6110"/>
		<updated>2023-05-07T10:35:52Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Gigel în timp ce așteptă să meargă la doctor se joacă cu noul lui telefon. A observat ca atunci când este pe ecranul de start și apasă pe o tastă numerică se aude o notă muzicală.  Dar lui i-a venit ideea să codeze fiecare notă muzicală în acest mod:  * Nota &amp;lt;code&amp;gt;do1&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; * Nota &amp;lt;code&amp;gt;re&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; * Nota &amp;lt;code&amp;gt;mi&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; * Nota &amp;lt;code&amp;gt;fa&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;3&amp;lt;/cod...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Gigel în timp ce așteptă să meargă la doctor se joacă cu noul lui telefon. A observat ca atunci când este pe ecranul de start și apasă pe o tastă numerică se aude o notă muzicală.&lt;br /&gt;
&lt;br /&gt;
Dar lui i-a venit ideea să codeze fiecare notă muzicală în acest mod:&lt;br /&gt;
&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;do1&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;re&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;mi&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;fa&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;sol&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;la&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;si&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;&lt;br /&gt;
* Nota &amp;lt;code&amp;gt;do2&amp;lt;/code&amp;gt; cu numărul &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
El creează un cântec, ia notele muzicale și le codează ca mai sus, le adună, iar apoi împarte suma la &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; și restul rămas este nota maximă.&lt;br /&gt;
&lt;br /&gt;
Ajutați-l pe Gigel sa afle nota maximă!&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;muzical.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; note muzicale.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa nota maximă.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;n ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:8&lt;br /&gt;
:do1 re mi fa sol la si do2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:sol&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;do1&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;re&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;mi&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;fa&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;sol&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;la&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;si&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;do2&amp;lt;/code&amp;gt; se codifică prin &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Adunând codificările notelor se obține suma &amp;lt;code&amp;gt;28&amp;lt;/code&amp;gt;, iar restul sumei la împărțirea prin &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, deci nota maximă este &amp;lt;code&amp;gt;sol&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5000000&lt;br /&gt;
:do1 re mi fa sol la si do2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1544 - Muzical&lt;br /&gt;
def conditii(n, note_muzicale):&lt;br /&gt;
    return n &amp;lt;= 100_000 and \&lt;br /&gt;
         all(nota in (&amp;quot;do1&amp;quot;, &amp;quot;re&amp;quot;, &amp;quot;mi&amp;quot;, &amp;quot;fa&amp;quot;, &amp;quot;sol&amp;quot;, &amp;quot;la&amp;quot;, &amp;quot;si&amp;quot;, &amp;quot;do2&amp;quot;) for nota in note_muzicale)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def muzical(note_muzicale):&lt;br /&gt;
    # Inițializăm un dicționar cu notele muzicale și codificările lor&lt;br /&gt;
    note_dictionar = {&lt;br /&gt;
        &amp;quot;do1&amp;quot;: 0, &amp;quot;re&amp;quot;: 1, &amp;quot;mi&amp;quot;: 2,&lt;br /&gt;
        &amp;quot;fa&amp;quot;: 3, &amp;quot;sol&amp;quot;: 4, &amp;quot;la&amp;quot;: 5,&lt;br /&gt;
        &amp;quot;si&amp;quot;: 6, &amp;quot;do2&amp;quot;: 7&lt;br /&gt;
    }&lt;br /&gt;
    # Însumăm codificările notelor muzicale&lt;br /&gt;
    suma_note = sum(note_dictionar[nota] for nota in note_muzicale)&lt;br /&gt;
    rest = suma_note % 8&lt;br /&gt;
    &lt;br /&gt;
    # Preluăm din dicționar nota muzicală corespunzătoare restului obținut&lt;br /&gt;
    print(note_muzicale[rest])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    note_muzicale = [nota for nota in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, note_muzicale):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        muzical(note_muzicale)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1298_-_Suma_34&amp;diff=6109</id>
		<title>1298 - Suma 34</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1298_-_Suma_34&amp;diff=6109"/>
		<updated>2023-05-07T10:14:58Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Fiind dat un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, se cere să se calculeze suma cifrelor numărului care reprezintă numărul de numere de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre formate cu cifrele &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.  ==Date de intrare== Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se va afișa numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, reprezentând...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Fiind dat un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, se cere să se calculeze suma cifrelor numărului care reprezintă numărul de numere de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre formate cu cifrele &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, reprezentând suma cerută.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:4&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:7&lt;br /&gt;
===Explicație===&lt;br /&gt;
Numerele de &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre formate cu cifrele &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; sunt &amp;lt;code&amp;gt;3333&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3334&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3343&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3433&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4333&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3344&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3434&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4334&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4343&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4433&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3443&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;3444&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4344&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4434&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4443&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;4444&amp;lt;/code&amp;gt;. Deci sunt &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; numere, iar suma cifrelor este &amp;lt;code&amp;gt;S=7&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 1298 - Suma34&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 100_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma34(n):&lt;br /&gt;
    # Numărul fiind alcătuit din n cifre, fiecare cifră din acel număr poate fi 3 sau 4, adică avem doar 2 posibilități.&lt;br /&gt;
    # Multiplicând numărul de posibilități (2) de n ori, obținem 2^n.&lt;br /&gt;
    numere_posibile = 2**n&lt;br /&gt;
    # Însumăm cifrele din numărul obținut.&lt;br /&gt;
    suma_cifre = sum([int(cifra) for cifra in str(numere_posibile)])&lt;br /&gt;
    print(suma_cifre)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        suma34(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2253_-_Vacanta_de_Vara&amp;diff=6108</id>
		<title>2253 - Vacanta de Vara</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2253_-_Vacanta_de_Vara&amp;diff=6108"/>
		<updated>2023-05-07T10:06:06Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Gigel este acum în clasa a XII-a și nu dorește să dea examenul de Bacalaureat, ci să ajungă direct la vacanța de vară. Pentru a se teleporta în timp și a ajunge la o zi după examen, acesta se folosește de o aplicație pentru mobil. Însă doar elevii foarte inteligenți au dreptul să călătorească în timp, motiv pentru care Gigel trebuie să dovedească că face parte din acea categorie. Aplicația îi generează un număr natural aleatoriu, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre aleatorii. Pentru a intra în aplicație, Gigel trebuie să introducă codul de securitate, care este cel mai mic număr care se poate forma din toate cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
&lt;br /&gt;
Gigel nu poate face singur acest lucru, dar își dorește mult să vină vacanța de vară și vă roagă pe voi să-i generați codul de securitate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;vacantadevara.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale separate prin spații.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa numărul reprezentând codul de securitate.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează faptul că există cel puțin o cifră nenulă.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10&lt;br /&gt;
:6 0 0 7 4 1 0 1 0 8&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1000014678&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cel mai mic număr care se poate forma din cifrele: &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1000014678&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:0 0 0 0 0 0 0 0 0 0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2253 - Vacanta De Vara&lt;br /&gt;
def conditii(n, cifre):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1_000 and \&lt;br /&gt;
        len(cifre) == n and \&lt;br /&gt;
        all(0 &amp;lt;= x &amp;lt;= 9 for x in cifre) and \&lt;br /&gt;
        any(x &amp;gt; 0 for x in cifre)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def vacanta_de_vara(cifre):&lt;br /&gt;
    # Mai întâi sortăm cifrele&lt;br /&gt;
    cifre.sort()&lt;br /&gt;
    # Dacă prima cifră este 0, o mutăm pe prima poziție nenulă&lt;br /&gt;
    # Dacă prima cifră nu este 0, deja avem cel mai mic număr posibil format din cifrele date&lt;br /&gt;
    if cifre[0] == 0:&lt;br /&gt;
        # Pentru fiecare cifră...&lt;br /&gt;
        for i in range(1, len(cifre)):&lt;br /&gt;
            # ...dacă cifra este nenulă...&lt;br /&gt;
            if cifre[i] != 0:&lt;br /&gt;
                # ...interschimbăm 0 cu această cifră și ieșim din loop deoarece am obținut cel mai mic număr posibil&lt;br /&gt;
                cifre[0], cifre[i] = cifre[i], cifre[0]&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(str(cif) for cif in cifre)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    cifre = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, cifre):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        vacanta_de_vara(cifre)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2253_-_Vacanta_de_Vara&amp;diff=6106</id>
		<title>2253 - Vacanta de Vara</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2253_-_Vacanta_de_Vara&amp;diff=6106"/>
		<updated>2023-05-07T10:00:33Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Gigel este acum în clasa a XII-a și nu dorește să dea examenul de Bacalaureat, ci să ajungă direct la vacanța de vară. Pentru a se teleporta în timp și a ajunge la o zi după examen, acesta se folosește de o aplicație pentru mobil. Însă doar elevii foarte inteligenți au dreptul să călătorească în timp, motiv pentru care Gigel trebuie să dovedească că face parte din acea categorie. Aplicația îi generează un număr natural aleatoriu, &amp;lt;code...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Gigel este acum în clasa a XII-a și nu dorește să dea examenul de Bacalaureat, ci să ajungă direct la vacanța de vară. Pentru a se teleporta în timp și a ajunge la o zi după examen, acesta se folosește de o aplicație pentru mobil. Însă doar elevii foarte inteligenți au dreptul să călătorească în timp, motiv pentru care Gigel trebuie să dovedească că face parte din acea categorie. Aplicația îi generează un număr natural aleatoriu, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre aleatorii. Pentru a intra în aplicație, Gigel trebuie să introducă codul de securitate, care este cel mai mic număr care se poate forma din toate cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
&lt;br /&gt;
Gigel nu poate face singur acest lucru, dar își dorește mult să vină vacanța de vară și vă roagă pe voi să-i generați codul de securitate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;vacantadevara.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale separate prin spații.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa numărul reprezentând codul de securitate.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează faptul că există cel puțin o cifră nenulă.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10&lt;br /&gt;
:6 0 0 7 4 1 0 1 0 8&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1000014678&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cel mai mic număr care se poate forma din cifrele: &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1000014678&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:0 0 0 0 0 0 0 0 0 0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# 2253 - Vacanta De Vara&lt;br /&gt;
def conditii(n, cifre):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1_000 and \&lt;br /&gt;
        len(cifre) == n and \&lt;br /&gt;
        all(0 &amp;lt;= x &amp;lt;= 9 for x in cifre) and \&lt;br /&gt;
        any(x &amp;gt; 0 for x in cifre) and \&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def vacanta_de_vara(cifre):&lt;br /&gt;
    # Mai întâi sortăm cifrele&lt;br /&gt;
    cifre.sort()&lt;br /&gt;
    # Dacă prima cifră este 0, o mutăm pe prima poziție nenulă&lt;br /&gt;
    # Dacă prima cifră nu este 0, deja avem cel mai mic număr posibil format din cifrele date&lt;br /&gt;
    if cifre[0] == 0:&lt;br /&gt;
        # Pentru fiecare cifră...&lt;br /&gt;
        for i in range(1, len(cifre)):&lt;br /&gt;
            # ...dacă cifra este nenulă...&lt;br /&gt;
            if cifre[i] != 0:&lt;br /&gt;
                # ...interschimbăm 0 cu această cifră și ieșim din loop deoarece am obținut cel mai mic număr posibil&lt;br /&gt;
                cifre[0], cifre[i] = cifre[i], cifre[0]&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;&amp;quot;.join(str(cif) for cif in cifre)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    cifre = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, cifre):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        vacanta_de_vara(cifre)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0279_-_Distincte&amp;diff=6105</id>
		<title>0279 - Distincte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0279_-_Distincte&amp;diff=6105"/>
		<updated>2023-05-07T09:32:42Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dă un şir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale cu cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; cifre, ordonate crescător. Afişaţi în ordine crescătoare elementele distincte din şir.  ==Date de intrare== Fişierul de intrare &amp;lt;code&amp;gt;distincte.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;; urmează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale şirului, dispuse pe mai multe linii şi separate prin spaţii. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de int...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un şir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale cu cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; cifre, ordonate crescător. Afişaţi în ordine crescătoare elementele distincte din şir.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;distincte.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;; urmează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale şirului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa elementele distincte din şir, în ordine crescătoare, fiecare pe o linie.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:7&lt;br /&gt;
:111 111 111 2111 4111 71111 71111&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:111 2111 4111 71111&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:111 111 111 2111 4111 71111 71111&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0279 - Distincte&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 10_000 and \&lt;br /&gt;
        numere == sorted(numere) and \&lt;br /&gt;
        all(len(str(nr)) &amp;lt;= 8 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def distincte(numere):&lt;br /&gt;
    # set() este o funcție built-in care elimină duplicatele dintr-o listă&lt;br /&gt;
    # Folosim sorted() deoarece set() nu returnează un obiect sortat&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join(str(x) for x in sorted(set(numere))))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    while len(numere) &amp;lt; n:&lt;br /&gt;
        numere.extend([int(x) for x in input().split()])&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        distincte(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4306_-_Nr_Div_Fact&amp;diff=6103</id>
		<title>4306 - Nr Div Fact</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4306_-_Nr_Div_Fact&amp;diff=6103"/>
		<updated>2023-05-07T09:16:52Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Calculați și afișați numărul de divizori pozitivi ai numărului &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;.  ==Date de intrare== Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se va afișa numărul de divizori pozitivi ai numărului &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;.  În cazul în care datele introduse de la tastatură...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Calculați și afișați numărul de divizori pozitivi ai numărului &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa numărul de divizori pozitivi ai numărului &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;n&amp;lt;=100000&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:4&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:8&lt;br /&gt;
===Explicație===&lt;br /&gt;
Factorialul lui 4 este egal cu 24, iar 24 are 8 divizori (1, 2, 3, 4, 6, 8, 12, 24).&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:&amp;lt;code&amp;gt;500000&amp;lt;/code&amp;gt;&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#4306 - NrDivFact&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return n &amp;lt;= 100_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nr_div_fact(n):&lt;br /&gt;
    # Calculăm factorialul lui n&lt;br /&gt;
    n_factorial = 1&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        n_factorial *= i&lt;br /&gt;
&lt;br /&gt;
    nr_divizori = 0&lt;br /&gt;
    # Pentru fiecare număr de la 1 la n_factorial...&lt;br /&gt;
    for i in range(1, n_factorial + 1):&lt;br /&gt;
        # ...dacă n_factorial se împarte la i...&lt;br /&gt;
        if n_factorial % i == 0:&lt;br /&gt;
            # ...atunci i este divizor al lui n_factorial&lt;br /&gt;
            nr_divizori += 1&lt;br /&gt;
&lt;br /&gt;
    print(nr_divizori)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        nr_div_fact(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3466_-_Num_Sum_Div&amp;diff=6095</id>
		<title>3466 - Num Sum Div</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3466_-_Num_Sum_Div&amp;diff=6095"/>
		<updated>2023-05-07T08:48:01Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Pentru un număr natural &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; notăm cu &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; suma divizorilor săi diferiți de &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. Dacă &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; este strict mai mică decât &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; se numește număr deficient, dacă &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; este egală cu &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; se numește număr perfect, iar dacă &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; este strict mai mare decât &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; se numește număr abundent.  Se dă un...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Pentru un număr natural &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; notăm cu &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; suma divizorilor săi diferiți de &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;. Dacă &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; este strict mai mică decât &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; se numește număr deficient, dacă &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; este egală cu &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; se numește număr perfect, iar dacă &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; este strict mai mare decât &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; se numește număr abundent.&lt;br /&gt;
&lt;br /&gt;
Se dă un șir de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale. Să se calculeze câte numere sunt deficiente, perfecte, respectiv abundente.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;num_sum_div.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale separate prin spații.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; numere separate prin câte un spațiu, reprezentând câți termeni ai șirului sunt numere deficiente, perfecte, respectiv abundente.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &amp;lt;code&amp;gt;5.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10&lt;br /&gt;
:2 6 8 20 21 13 14 15 12 24&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:6 1 3&lt;br /&gt;
===Explicație===&lt;br /&gt;
În fișierul de intrare sunt &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; numere deficiente, un singur număr perfect și &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; numere abundente.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:2 6 8 20 21 13 14 15 12 24&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#3466 - Num Sum Div&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 10_000 and \&lt;br /&gt;
        all(nr &amp;lt; 5_000_000_000 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def num_sum_div(numere):&lt;br /&gt;
    deficiente, perfecte, abundente = 0, 0, 0&lt;br /&gt;
&lt;br /&gt;
    for nr in numere:&lt;br /&gt;
        # Însumăm toți divizorii ai lui &#039;nr&#039;&lt;br /&gt;
        suma = sum(divizor for divizor in range(1, nr // 2 + 1) if nr % divizor == 0)&lt;br /&gt;
        # Dacă suma este mai mică decât &#039;nr&#039; ...&lt;br /&gt;
        if suma &amp;lt; nr:&lt;br /&gt;
            # ... incrementăm numărul de deficiente&lt;br /&gt;
            deficiente += 1&lt;br /&gt;
        # Dacă suma este egală cu &#039;nr&#039; ...&lt;br /&gt;
        elif suma == nr:&lt;br /&gt;
            # ... incrementăm numărul de perfecte&lt;br /&gt;
            perfecte += 1&lt;br /&gt;
        # Dacă suma este mai mare decât &#039;nr&#039; ...&lt;br /&gt;
        else:&lt;br /&gt;
            # ... incrementăm numărul de abundente&lt;br /&gt;
            abundente += 1&lt;br /&gt;
&lt;br /&gt;
    # Afisăm numărul de deficiente, perfecte și abundente în ordinea cerută de enunț&lt;br /&gt;
    print(deficiente, perfecte, abundente)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        num_sum_div(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2285_-_B2&amp;diff=6093</id>
		<title>2285 - B2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2285_-_B2&amp;diff=6093"/>
		<updated>2023-05-07T08:26:33Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Fie un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n &amp;lt; 2&amp;lt;sup&amp;gt;62&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Să se afişeze toate numerele naturale mai mici sau egale cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, cu proprietatea că reprezentarea lor in baza &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; are exact două cifre &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.  ==Date de intrare== Fişierul de intrare &amp;lt;code&amp;gt;b2.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Fie un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n &amp;lt; 2&amp;lt;sup&amp;gt;62&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Să se afişeze toate numerele naturale mai mici sau egale cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, cu proprietatea că reprezentarea lor in baza &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; are exact două cifre &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;b2.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa în ordine crescătoare numerele cerute, pe o singură linie cu spaţiu între ele.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ n &amp;lt; 2&amp;lt;sup&amp;gt;62&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:20&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:3 5 6 9 10 12 17 18 20&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2285 B2&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 3 &amp;lt;= n &amp;lt; 2**62&lt;br /&gt;
&lt;br /&gt;
    &lt;br /&gt;
def b2(n):&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    # Parcurgem numerele naturale de la 1 la n&lt;br /&gt;
    # Folosim n+1 pentru a-l include și pe n&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        # bin() este o funcție built-in care transformă un număr în reprezentarea sa binară&lt;br /&gt;
        # Secționăm reprezentarea [2:] pentru a elimina prefixul &amp;quot;0b&amp;quot;&lt;br /&gt;
        binary = bin(i)[2:]&lt;br /&gt;
        # count() este o funcție built-in care numără de câte ori apare un subșir într-un șir&lt;br /&gt;
        # Dacă avem exact două cifre &amp;quot;1&amp;quot;, îl adăugăm la rezultat&lt;br /&gt;
        if binary.count(&#039;1&#039;) == 2:&lt;br /&gt;
            rezultat.append(i)&lt;br /&gt;
&lt;br /&gt;
    # Sortăm și printăm vectorul rezultat&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in sorted(rezultat)]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        b2(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0989_-_Sum_Perm&amp;diff=6092</id>
		<title>0989 - Sum Perm</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0989_-_Sum_Perm&amp;diff=6092"/>
		<updated>2023-05-07T08:14:07Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre zecimale: &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, … , &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Determinaţi suma: &amp;lt;code&amp;gt;S = a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;...a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; + a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;...a&amp;lt;sub&amp;gt;n-1&amp;lt;/sub&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;...a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, în care fiecare termen este obţinut prin permutarea circulară spre dreapta a cifrelor termenului precedent cu o poziţie.  ==Date de intrare== Fișieru...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre zecimale: &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, … , &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Determinaţi suma: &amp;lt;code&amp;gt;S = a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;...a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt; + a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;...a&amp;lt;sub&amp;gt;n-1&amp;lt;/sub&amp;gt; + a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;...a&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, în care fiecare termen este obţinut prin permutarea circulară spre dreapta a cifrelor termenului precedent cu o poziţie.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;sumperm.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe a doua linie cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cifre separate prin spații.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, reprezentând suma calculată.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 9&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
:2 5 4&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1221&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;S=254 + 425 + 542 =1221&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:2 5 4&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0989 Sum Perm&lt;br /&gt;
def conditii(n, cifre):&lt;br /&gt;
    return n == len(cifre) and 2 &amp;lt;= n &amp;lt;= 9&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sumperm(cifre):&lt;br /&gt;
    # Inițializăm suma ca fiind concatenarea cifrelor din vectorul cifre&lt;br /&gt;
    suma = int(&amp;quot;&amp;quot;.join([cif for cif in cifre]))&lt;br /&gt;
&lt;br /&gt;
    # Iterăm vectorul cifre de n ori, unde n = lungimea vectorului-1&lt;br /&gt;
    # Îl rotim cu 1 mai puțin decât lungimea sa pentru a nu repeta suma inițială&lt;br /&gt;
    for i in range(len(cifre) - 1):&lt;br /&gt;
        # append() este o funcție built-in care adaugă un element la sfârșitul unui vector&lt;br /&gt;
        # pop() este o funcție built-in care elimină un element dintr-un vector și returnează valoarea sa&lt;br /&gt;
        cifre.append(cifre.pop(0))&lt;br /&gt;
        # Concatenăm cifrele din vectorul modificat și le convertim la int, apoi le adunăm la suma inițială&lt;br /&gt;
        suma += int(&amp;quot;&amp;quot;.join([cif for cif in cifre]))&lt;br /&gt;
&lt;br /&gt;
    print(suma)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    cifre = [x for x in input().split()]&lt;br /&gt;
    if not conditii(n, cifre):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        sumperm(cifre)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1141_-_Ech&amp;diff=6091</id>
		<title>1141 - Ech</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1141_-_Ech&amp;diff=6091"/>
		<updated>2023-05-07T07:37:13Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Numim număr echilibrat un număr natural pentru care suma cifrelor de pe poziţii pare este egală cu suma cifrelor de pe poziţii impare.  De exemplu numărul &amp;lt;code&amp;gt;13552&amp;lt;/code&amp;gt; este echilibrat, pentru că &amp;lt;code&amp;gt;1+5+2=8=3+5&amp;lt;/code&amp;gt;.  Dat fiind un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; să se determine cel mai mic număr echilibrat, strict mai mare decât &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.  ==Date de intrare== Fișierul de intrare &amp;lt;code&amp;gt;ech.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Numim număr echilibrat un număr natural pentru care suma cifrelor de pe poziţii pare este egală cu suma cifrelor de pe poziţii impare.&lt;br /&gt;
&lt;br /&gt;
De exemplu numărul &amp;lt;code&amp;gt;13552&amp;lt;/code&amp;gt; este echilibrat, pentru că &amp;lt;code&amp;gt;1+5+2=8=3+5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dat fiind un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; să se determine cel mai mic număr echilibrat, strict mai mare decât &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;ech.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa cel mai mic număr echilibrat, strict mai mare decât &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* Numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;23&amp;lt;/code&amp;gt; de cifre.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:99&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:110&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;1+0=1&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:123133&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:123134&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;1+3+3=2+1+4&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:123456789098765432101234567890987654321012345678909876543210&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1141 Ech&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return len(str(n)) &amp;lt;= 23&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_echilibrat(n):&lt;br /&gt;
    # Ținem cont de sumele cifrelor de pe poziții impare și pare&lt;br /&gt;
    suma_impara = 0&lt;br /&gt;
    suma_para = 0&lt;br /&gt;
    for i in range(len(str(n))):&lt;br /&gt;
        # Dacă indicele este par (indicele 0, 2, 4...),&lt;br /&gt;
        # adunăm la suma cifrelor impare (indicele 0 înseamnă poziția 1, indicele 2 = poziția 3 etc.)&lt;br /&gt;
        if i % 2 == 0:&lt;br /&gt;
            suma_impara += int(str(n)[i])&lt;br /&gt;
        # Dacă indicele este impar (indicele 1, 3, 5...),&lt;br /&gt;
        # adunăm la suma cifrelor pare (indicele 1 înseamnă poziția 2, indicele 3 = poziția 4 etc.)&lt;br /&gt;
        else:&lt;br /&gt;
            suma_para += int(str(n)[i])&lt;br /&gt;
&lt;br /&gt;
    return suma_impara == suma_para&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def ech(n):&lt;br /&gt;
    # Pornim de la n+1 deoarece rezultatul trebuie să fie strict mai mare decât n&lt;br /&gt;
    n += 1&lt;br /&gt;
&lt;br /&gt;
    # Atâta timp cât numărul nu este echilibrat, îl incrementăm&lt;br /&gt;
    while not is_echilibrat(n):&lt;br /&gt;
        n += 1&lt;br /&gt;
&lt;br /&gt;
    # La ieșirea din while, n este un număr echilibrat&lt;br /&gt;
    print(n)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        ech(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0129_-_Sortare&amp;diff=6090</id>
		<title>0129 - Sortare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0129_-_Sortare&amp;diff=6090"/>
		<updated>2023-05-07T07:14:34Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dă un vector cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente numere întregi.  Să se ordoneze descrescător elementele vectorului.  ==Date de intrare== Fişierul de intrare &amp;lt;code&amp;gt;sortare.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi separate prin spaţii. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se vor afișa cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; eleme...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un vector cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente numere întregi.&lt;br /&gt;
&lt;br /&gt;
Să se ordoneze descrescător elementele vectorului.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;sortare.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;0 &amp;lt; n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;&amp;lt;big&amp;gt;30&amp;lt;/big&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
:8 2 9 4 5 7&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:9 8 7 5 4 2&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-2&lt;br /&gt;
:8 2 9 4 5 7&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0129 Sortare&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        0 &amp;lt; n &amp;lt;= 100 and \&lt;br /&gt;
        all(abs(nr) &amp;lt; 2**30 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sortare(numere):&lt;br /&gt;
    # sorted() este o funcție built-in care sortează o listă dată&lt;br /&gt;
    # reverse=True înseamnă că lista va fi sortată descrescător&lt;br /&gt;
    rezultat = sorted(numere, reverse=True)&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        sortare(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0086_-_Half_Sort&amp;diff=6089</id>
		<title>0086 - Half Sort</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0086_-_Half_Sort&amp;diff=6089"/>
		<updated>2023-05-07T06:57:12Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dă un vector cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente numere întregi, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; fiind număr par.  Să se ordoneze crescător elementele din prima jumătate a vectorului și descrescător elementele din a doua jumătate.  ==Date de intrare== Fişierul de intrare &amp;lt;code&amp;gt;halfsort.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi separate prin spaţii. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un vector cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente numere întregi, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; fiind număr par.&lt;br /&gt;
&lt;br /&gt;
Să se ordoneze crescător elementele din prima jumătate a vectorului și descrescător elementele din a doua jumătate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;halfsort.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; număr par&lt;br /&gt;
&lt;br /&gt;
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &amp;lt;code&amp;gt;1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
:8 2 9 4 5 7&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:2 8 9 7 5 4&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-2&lt;br /&gt;
:8 2 9 4 5 7&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0086 Half Sort&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 100 and \&lt;br /&gt;
        n % 2 == 0 and \&lt;br /&gt;
        all(abs(nr) &amp;lt; 1_000_000_000 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def half_sort(numere):&lt;br /&gt;
    # Secționăm și sortăm crescător prima jumătate a listei: numere[ :len(numere)//2]&lt;br /&gt;
    # Secționăm și sortăm descrescător a doua jumătate a listei: numere[len(numere)//2: ]&lt;br /&gt;
    # Folosim operatorul + pentru a concatena elementele celor două liste&lt;br /&gt;
    rezultat = sorted(numere[:len(numere)//2], reverse=False) + \&lt;br /&gt;
               sorted(numere[len(numere)//2:], reverse=True)&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        half_sort(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0130_-_Sort_Cif&amp;diff=6088</id>
		<title>0130 - Sort Cif</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0130_-_Sort_Cif&amp;diff=6088"/>
		<updated>2023-05-07T06:41:20Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dă un vector cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente numere întregi.  Să se ordoneze crescător elementele unui vector crescător după suma cifrelor.  ==Date de intrare== Fişierul de intrare &amp;lt;code&amp;gt;sortcif.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi separate prin spaţii. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se vor afi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un vector cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente numere întregi.&lt;br /&gt;
&lt;br /&gt;
Să se ordoneze crescător elementele unui vector crescător după suma cifrelor.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;sortcif.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; si pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere întregi separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale vectorului, ordonate conform cerinței, separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* valoarea absolută a numerelor de pe a doua linie a fişierului de intrare va fi mai mică decât &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;&amp;lt;big&amp;gt;30&amp;lt;/big&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
:89 22 91 4005 51 721&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:22 51 4005 91 721 89 &lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-2&lt;br /&gt;
:89 22 91 4005 51 721&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0130 Sort Cif&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        0 &amp;lt; n &amp;lt;= 1000 and \&lt;br /&gt;
        all(abs(nr) &amp;lt; 2**30 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sort_cif(numere):&lt;br /&gt;
    rezultat = sorted(numere, key=lambda numar: sum([int(cifra) for cifra in str(numar)]))&lt;br /&gt;
    # cheia de sortare returneaza suma cifrelor unui număr, SCif(numar) -&amp;gt; sum([int(cifra) for cifra in str(numar)])&lt;br /&gt;
    # Numerele sunt sortate după SCif(x)&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        sort_cif(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3902_-_Sort_Sum&amp;diff=6087</id>
		<title>3902 - Sort Sum</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3902_-_Sort_Sum&amp;diff=6087"/>
		<updated>2023-05-07T06:19:11Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Scrie un program care citind un șir de numere naturale afișează numerele citite ordonate crescător după suma cifrelor lor, iar dacă suma cifrelor este egală, descrescător după valoarea lor.  ==Date de intrare== Fișierul de intrare &amp;lt;code&amp;gt;sortsum.in&amp;lt;/code&amp;gt; conține pe prima linie numere naturale separate prin spații. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se vor afișa...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Scrie un program care citind un șir de numere naturale afișează numerele citite ordonate crescător după suma cifrelor lor, iar dacă suma cifrelor este egală, descrescător după valoarea lor.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;sortsum.in&amp;lt;/code&amp;gt; conține pe prima linie numere naturale separate prin spații.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa numerele ordonate conform cerinței.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* în fișier vor fi mai puțin de &amp;lt;code&amp;gt;1.000.000&amp;lt;/code&amp;gt; de numere&lt;br /&gt;
&lt;br /&gt;
*numerele din fișierul de intrare vor fi mai mici decât &amp;lt;code&amp;gt;10.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:102 60 51 600 21 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:102 21 3 600 60 51&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10516212154212 651621215516212150 5162121551 60516212150 2605116051 605160513&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#3902 - Sort Sum&lt;br /&gt;
def conditii(numere):&lt;br /&gt;
    return len(numere) &amp;lt; 1_000_000 and \&lt;br /&gt;
        all(nr &amp;lt; 100_000_000 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sort_sum(numere):&lt;br /&gt;
    rezultat = sorted(numere, key=lambda numar: (sum([int(cifra) for cifra in str(numar)]), -numar))&lt;br /&gt;
    # cheia de sortare returneaza un tuplu de 2 elemente:&lt;br /&gt;
    # 1) suma cifrelor unui număr, SCif(numar) -&amp;gt; sum([int(cifra) for cifra in str(numar)])&lt;br /&gt;
    # 2) numărul în sine, dar negat -&amp;gt; -numar&lt;br /&gt;
    # Numerele sunt sortate după SCif(x). Dacă două numere au aceeași SCif, atunci sunt sortate după valoarea lor negată.&lt;br /&gt;
    # Negăm numărul pentru a-l sorta descrescător.&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        sort_sum(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1347_-_A_k_cifra_dintr-un_numar&amp;diff=6086</id>
		<title>1347 - A k cifra dintr-un numar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1347_-_A_k_cifra_dintr-un_numar&amp;diff=6086"/>
		<updated>2023-05-07T05:09:28Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se construiește un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ale cărui prime &amp;lt;code&amp;gt;51&amp;lt;/code&amp;gt; cifre sunt:  &amp;lt;code&amp;gt;N = 112233445566778899100111122133144155166177188199200......&amp;lt;/code&amp;gt;  Deduceți regula prin care se construiește numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și stabiliți care este cea de a &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;-a cifră din scrierea acestui număr.  Scrieţi un program care citeşte numărul &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; şi care determină cea de a &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;-a cifră din scrierea lui &amp;lt;code&amp;gt;N&amp;lt;/co...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se construiește un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ale cărui prime &amp;lt;code&amp;gt;51&amp;lt;/code&amp;gt; cifre sunt:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;N = 112233445566778899100111122133144155166177188199200......&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Deduceți regula prin care se construiește numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și stabiliți care este cea de a &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;-a cifră din scrierea acestui număr.&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care citeşte numărul &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; şi care determină cea de a &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;-a cifră din scrierea lui &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește din fișierul &amp;lt;code&amp;gt;kcifra.in&amp;lt;/code&amp;gt;, de pe prima linie, numărul natural nenul &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un număr natural (o cifră) reprezentând cea de a &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;-a cifră din scrierea numărului &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; construit.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 588888&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; număr natural&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10&lt;br /&gt;
;Ieșire&lt;br /&gt;
:5&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; cifre ale lui &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; sunt: 1 1 2 2 3 3 4 4 5 &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:51&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primele &amp;lt;code&amp;gt;51&amp;lt;/code&amp;gt; cifre ale lui &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; sunt: &amp;lt;code&amp;gt;112233445566778899100111122133144155166177188199200&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1347 K cifra&lt;br /&gt;
def conditii(k):&lt;br /&gt;
    if not is_natural(k):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return 1 &amp;lt;= int(k) &amp;lt;= 588_888&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_natural(k):&lt;br /&gt;
    try:&lt;br /&gt;
        # Dacă &#039;k&#039; poate fi convertit la un număr întreg, verificăm dacă este pozitiv&lt;br /&gt;
        # (numerele naturale sunt numere întregi pozitive)&lt;br /&gt;
        return int(k) &amp;gt; 0&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def k_cifra(k):&lt;br /&gt;
    # Generarea numărului N&lt;br /&gt;
    n = &#039;&#039;&lt;br /&gt;
    i = 1&lt;br /&gt;
    # Generăm numărul N doar până la cea de a k-a cifră&lt;br /&gt;
    while len(n) &amp;lt; k:&lt;br /&gt;
        # Secvența N urmărește regula: pentru orice i -&amp;gt; n(i) = i + ultima cifră a lui i&lt;br /&gt;
        # ex: pentru i=12 -&amp;gt; n(i)=122. pentru i=150 -&amp;gt; n(i)=1500&lt;br /&gt;
        n += str(i)+str(i)[-1]&lt;br /&gt;
        &lt;br /&gt;
        # Pasul următor&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    print(n[k-1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    k = input()&lt;br /&gt;
    if not conditii(k):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        k_cifra(int(k))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2433_-_Cufar&amp;diff=5993</id>
		<title>2433 - Cufar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2433_-_Cufar&amp;diff=5993"/>
		<updated>2023-05-06T16:26:06Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Cerința==&lt;br /&gt;
Vrăjitoarea cea bună are un cufăr în care este închisă piatra magică de către piticii lăzii cu ajutorul unui cifru digital. Piticii i-au dat vrăjitoarei o cutie în care sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cartonașe. Pe fiecare cartonaș este scris un număr natural pe care vrăjitoarea îl va folosi să deschidă lada. Valorile scrise pe cartonașe sunt distincte între ele.&lt;br /&gt;
&lt;br /&gt;
Pentru a afla cifrul trebuie să procedeze astfel: extrage fiecare cartonaș din cutie și apoi determină valoarea magică asociată numărului natural scris pe cartonaș. Pentru fiecare cartonaș valoarea magică este dată de al &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;-lea divizor prim al numărului înscris pe acesta. Vrăjitoarea trebuie să adune valorile magice obținute pentru cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cartonașe și apoi să introducă în ordine cifrele valorii obținute, pentru a descuia lada.&lt;br /&gt;
&lt;br /&gt;
Deoarece vrăjitoarea nu are timp la dispoziție vă roagă pe voi să o ajutați să rezolve următoarele probleme:&lt;br /&gt;
&lt;br /&gt;
1. Să afle valoarea magică pentru un cartonaș dat;&lt;br /&gt;
&lt;br /&gt;
2. Să afle cifrul cufărului.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare este &amp;lt;code&amp;gt;cufar.in&amp;lt;/code&amp;gt;. Pe prima linie a fișierului de intrare se găsesc o valoare &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; care poate fi doar &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; de cartonașe despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; pe linia a doua a fișierului de intrare se găsesc două valori reprezentând numărul de pe cartonașul dat și valoarea &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, separate printr-un spațiu, cu semnificația de mai sus.&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii ale fișierului de intrare se găsesc câte două valori, separate prin câte un spațiu, reprezentând numărul de pe cartonaș și valoarea lui &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; pentru fiecare din cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cartonașe.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, atunci se va rezolva doar cerința &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și pe următorul rând se va afișa valoarea magică asociată cartonașului dat.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, atunci se va rezolva doar cerința &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și pe următorul rând se va afișa cifrul necesar deschiderii cufărului.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n &amp;lt; 1 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ valoarea înscrisă pe un cartonaș ≤ 1 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se garantează că pentru fiecare pereche &amp;lt;code&amp;gt;(număr, k)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;număr&amp;lt;/code&amp;gt; are cel puțin &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; divizori primi.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1 1&lt;br /&gt;
:30 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:5&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;p = 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n = 1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se rezolvă doar prima cerință. Al treilea divizor prim al numărului &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2 5&lt;br /&gt;
:30 3&lt;br /&gt;
:64 1&lt;br /&gt;
:105 2&lt;br /&gt;
:1001 3&lt;br /&gt;
:5474 4&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:48&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;p = 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n = 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se rezolvă doar a doua cerință. Al treilea divizor prim al numărului &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Primul divizor prim al numărului &amp;lt;code&amp;gt;64&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Al doilea divizor prim al numărului &amp;lt;code&amp;gt;105&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Al treilea divizor prim al numărului &amp;lt;code&amp;gt;1001&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;13&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Al patrulea divizor prim al numărului &amp;lt;code&amp;gt;5474&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;23&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Suma căutată va fi &amp;lt;code&amp;gt;S = 5 + 2 + 5 + 13 + 23&amp;lt;/code&amp;gt;, de unde rezultă cifrul &amp;lt;code&amp;gt;48&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2 3&lt;br /&gt;
:1 3&lt;br /&gt;
:1000000 1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2433 Cufar&lt;br /&gt;
def conditie_n(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt; 1_000_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditie_cartonas(cartonas):&lt;br /&gt;
    return 2 &amp;lt;= cartonas &amp;lt; 1_000_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prim(nr):&lt;br /&gt;
    # Dace nr &amp;lt;= 1, atunci nr nu este prim.&lt;br /&gt;
    if nr &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    # Dacă de la 2 până la rădăcina pătrată a lui nr există un divizor a lui nr, atunci nr nu este prim.&lt;br /&gt;
    for i in range(2, int(nr**0.5) + 1):&lt;br /&gt;
        if nr % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cufar(cartonas, k):&lt;br /&gt;
    nr = 0&lt;br /&gt;
&lt;br /&gt;
    # Iterăm toate numerele de la 2 la cartonas&lt;br /&gt;
    for i in range(2, cartonas+1):&lt;br /&gt;
        # Dacă i este divizor al lui cartonas și este prim...&lt;br /&gt;
        if cartonas % i == 0 and prim(i):&lt;br /&gt;
            # ... incrementăm nr&lt;br /&gt;
            nr += 1&lt;br /&gt;
            # Dacă nr este egal cu k, atunci am găsit al k-lea divizor prim al lui cartonas&lt;br /&gt;
            if nr == k:&lt;br /&gt;
                return i&lt;br /&gt;
&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    p, n = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditie_n(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Iterăm de la 1 până la n&lt;br /&gt;
        suma = 0&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            # La fiecare iterație, citim 2 valori: cartonas și k&lt;br /&gt;
            cartonas, k = [int(x) for x in input().split()]&lt;br /&gt;
            if not conditie_cartonas(cartonas):&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
                exit(0)&lt;br /&gt;
            # Adăugăm la variabila suma rezultatul funcției cufar&lt;br /&gt;
            suma += cufar(cartonas, k)&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        print(suma)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2494_-_Desc_Mult&amp;diff=5975</id>
		<title>2494 - Desc Mult</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2494_-_Desc_Mult&amp;diff=5975"/>
		<updated>2023-05-06T15:49:33Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se consideră două șiruri &amp;lt;code&amp;gt;D=(D1,D2,...,Dn)&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;E=(E1,E2,... ,En)&amp;lt;/code&amp;gt; ce reprezintă descompunerea în factori primi pentru un număr natural nenul &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, după cum urmează: &amp;lt;code&amp;gt;Di&amp;lt;/code&amp;gt; – factorul prim, &amp;lt;code&amp;gt;Ei&amp;lt;/code&amp;gt; – puterea la care apare factorul prim &amp;lt;code&amp;gt;Di&amp;lt;/code&amp;gt; în descompunerea numărului &amp;lt;code&amp;gt;X (1≤i≤n)&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; reprezintă numărul factorilor primi.&lt;br /&gt;
&lt;br /&gt;
Să se determine:&lt;br /&gt;
&lt;br /&gt;
1. numărul total de divizori naturali ai lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. divizorii lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; care aparțin intervalului &amp;lt;code&amp;gt;[A,B]&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt; sunt două numere naturale date.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;descmult.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; care reprezintă cerința ce trebuie rezolvată (&amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
A doua linie conține, despărțite prin câte un spațiu, trei numere naturale &amp;lt;code&amp;gt;n A B&amp;lt;/code&amp;gt;, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
Pe linie a treia se află &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin câte un spațiu, ce reprezintă factorii primi &amp;lt;code&amp;gt;D1 D2 ... Dn&amp;lt;/code&amp;gt; din descompunerea lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pe linia a patra se află &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale, separate prin câte un spațiu, ce reprezintă puterile la care apar acești factori &amp;lt;code&amp;gt;E1 E2 ... En&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pentru &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt; se va rezolva doar prima cerință. În acest caz, pe următorul rând se va afișa un singur număr natural nenul ce reprezintă numărul total de divizori naturali ai lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt; se va rezolva cea de-a doua cerință. În acest caz, pe următorul rând se va afișa, separați prin câte un spațiu, divizorii lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; ce aparțin intervalului &amp;lt;code&amp;gt;[A,B]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 20&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ A ≤ B ≤ 107&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ Di &amp;lt; 1000&amp;lt;/code&amp;gt; (numere prime distincte), &amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ Ei ≤ 10&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se garantează că numărul maxim de divizori naturali ai lui &amp;lt;code&amp;gt;X ≤ 10&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;19&amp;lt;/code&amp;gt;&lt;br /&gt;
* Intervalul &amp;lt;code&amp;gt;[A,B]&amp;lt;/code&amp;gt; conține cel puțin un divizor&lt;br /&gt;
* Numărul maxim de divizori aflați în intervalul &amp;lt;code&amp;gt;[A,B]&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;≤ 10&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;&lt;br /&gt;
* Ordinea de afișare a divizorilor nu este importantă&lt;br /&gt;
* Pentru rezolvarea corectă a cerinței &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; se acordă &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt; de puncte, iar pentru cea de-a doua cerință se acordă &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; de puncte.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:4 30 50&lt;br /&gt;
:3 2 5 11&lt;br /&gt;
:1 3 2 1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:48&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;X=31*23*52*111=6600&amp;lt;/code&amp;gt; și are &amp;lt;code&amp;gt;48&amp;lt;/code&amp;gt; de divizori: &amp;lt;code&amp;gt;1, 2, 3, 4, 5, 6, 8, 10, 11, 12, 15, 20, 22, 24, 25, 30, 33, 40, 44, 50, 55, 60, 66, 75, 88, 100, 110, 120, 132, 150, 165, 200, 220, 264, 275, 300, 330, 440, 550, 600, 660, 825, 1100, 1320, 1650, 2200, 3300, 6600&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
:4 30 50&lt;br /&gt;
:3 2 5 11&lt;br /&gt;
:1 3 2 1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:30 44 50 40 33&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;X=31*23*52*111=6600&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Divizorii ce aparțin intervalului &amp;lt;code&amp;gt;[30,50]&amp;lt;/code&amp;gt; sunt: &amp;lt;code&amp;gt;30,33,40,44,50&amp;lt;/code&amp;gt;. Ordinea de afișare a divizorilor nu este importantă.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:4 30 50&lt;br /&gt;
:3 2 5 11&lt;br /&gt;
:1 10 15 1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2494 Desc Mult&lt;br /&gt;
&lt;br /&gt;
def conditii(n, A, B, nr_naturale_factori_primi, nr_naturale_puteri):&lt;br /&gt;
    if not 2 &amp;lt;= n &amp;lt;= 20:&lt;br /&gt;
        return False&lt;br /&gt;
    if not len(nr_naturale_puteri) == len(nr_naturale_factori_primi) == n:&lt;br /&gt;
        return False&lt;br /&gt;
    if not 1 &amp;lt;= A &amp;lt;= B &amp;lt;= 10**7:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for nr_f_p in nr_naturale_factori_primi:&lt;br /&gt;
        if not 2 &amp;lt;= nr_f_p &amp;lt; 1_000:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    for nr_n_p in nr_naturale_puteri:&lt;br /&gt;
        if not 1 &amp;lt;= nr_n_p &amp;lt;= 10:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def divizori(n, nr_naturale_puteri):&lt;br /&gt;
    # Calculăm numărul de divizori ai unui număr cu factorizarea în factori primi&lt;br /&gt;
    nr_divizori = 1&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        nr_divizori *= nr_naturale_puteri[i] + 1&lt;br /&gt;
&lt;br /&gt;
    return nr_divizori&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def divizori_interval(n, nr_naturale_puteri, nr_naturale_factori_primi, a, b):&lt;br /&gt;
    # Găsim divizorii unui număr în intervalul [a, b]&lt;br /&gt;
    x = 1&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        x *= (nr_naturale_factori_primi[i] ** nr_naturale_puteri[i])&lt;br /&gt;
&lt;br /&gt;
    divizori_solutie = []&lt;br /&gt;
    # Pentru fiecare număr din intervalul [a, b]...&lt;br /&gt;
    for i in range(a, b+1):&lt;br /&gt;
        # ... verificăm dacă este divizor al lui x&lt;br /&gt;
        if x % i == 0:&lt;br /&gt;
            # Dacă da, îl adăugăm în lista de soluții&lt;br /&gt;
            divizori_solutie.append(i)&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot; &amp;quot;.join([str(x) for x in sorted(divizori_solutie)])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def descmult(c, n, A, B, nr_naturale_factori_primi, nr_naturale_puteri):&lt;br /&gt;
    # c este numărul cerinței&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        print(divizori(n, nr_naturale_puteri))&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        print(divizori_interval(n, nr_naturale_puteri, nr_naturale_factori_primi, A, B))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    c = int(input())&lt;br /&gt;
    n, A, B = [int(x) for x in input().split()]&lt;br /&gt;
    nr_naturale_factori_primi = [int(x) for x in input().split()]&lt;br /&gt;
    nr_naturale_puteri = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, A, B, nr_naturale_factori_primi, nr_naturale_puteri):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        descmult(c, n, A, B, nr_naturale_factori_primi, nr_naturale_puteri)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2148_-_ADN&amp;diff=5966</id>
		<title>2148 - ADN</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2148_-_ADN&amp;diff=5966"/>
		<updated>2023-05-06T15:26:37Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Cerința==&lt;br /&gt;
Pe Marte s-au descoperit &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; marțieni, identificați de către oamenii de știință de pe Pământ prin numerele de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Cercetările au dovedit că ADN-ul oricărui marțian &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; este format din mulțimea factorilor primi din descompunerea lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;. De exemplu &amp;lt;code&amp;gt;ADN(6)={2,3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Se știe că marțianul cu numărul de ordine &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; îl moștenește pe marțianul cu numărul de ordine &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; dacă &amp;lt;code&amp;gt;ADN(X)&amp;lt;/code&amp;gt; este inclus în &amp;lt;code&amp;gt;ADN(Y)&amp;lt;/code&amp;gt;, adică mulțimea factorilor primi ai lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; este inclusă în mulțimea factorilor primi ai lui &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De exemplu, marțianul &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; îl moștenește pe marțianul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; deoarece &amp;lt;code&amp;gt;ADN(3)={3}&amp;lt;/code&amp;gt; este inclus în &amp;lt;code&amp;gt;ADN(6)={2,3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Trebuie să specificăm că se pot întâlni situații extreme în care &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; îl moștenește pe &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; dar și &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; îl moștenește pe &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, atunci când cei doi marțieni au ADN-urile egale. Este situația marțianului &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt; care îl moștenește pe &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; dar și &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; îl moștenește pe &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Realizați un program care, considerând mulțimea celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; marțieni, determină numărul de perechi de marțieni &amp;lt;code&amp;gt;(Y, X)&amp;lt;/code&amp;gt; pentru care &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt; îl moștenește pe &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;1 ≤ X ≤ N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;1 ≤ Y ≤ N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;adn.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de marțieni.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul de perechi determinat.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 5 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pe planeta Marte orice marțian &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; îl moștenește pe &amp;lt;code&amp;gt;X.&amp;lt;/code&amp;gt;&lt;br /&gt;
* Orice marțian îl moștenește pe marțianul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; deoarece &amp;lt;code&amp;gt;ADN(1)={}&amp;lt;/code&amp;gt;, adică mulțimea vidă, care se consideră inclusă în orice mulțime nevidă.&lt;br /&gt;
* Se garantează că numărul de perechi determinat are cel mult nouă cifre.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:16&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;ADN(1)={}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ADN(2)={2}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ADN(3)={3}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ADN(4)={2}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ADN(5)={5}&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;ADN(6)={2,3}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Perechile de marțieni determinate sunt &amp;lt;code&amp;gt;(1,1)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(2,2)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(3,3)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(4,4)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(5,5)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(6,6)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(4,2)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(2,4)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(6,2)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(6,3)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(6,4)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(2,1)&amp;lt;/code&amp;gt; ; &amp;lt;code&amp;gt;(3,1)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(4,1)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(5,1)&amp;lt;/code&amp;gt;; &amp;lt;code&amp;gt;(6,1)&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:19&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:88&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:38&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:251&lt;br /&gt;
&lt;br /&gt;
== Exemplu 4 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:99&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:961&lt;br /&gt;
&lt;br /&gt;
== Exemplu 5 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2148 ADN&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 5_000_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def ADN(n):&lt;br /&gt;
    martieni_adn = {}&lt;br /&gt;
    nr_perechi = 0&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm un dicționar cu cheile de la 1 la n și valorile 1&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        martieni_adn[i] = 1&lt;br /&gt;
&lt;br /&gt;
    # Folosim Ciurul lui Eratostene pentru a calcula factorizarea în numere prime a fiecărui număr de la 2 la n&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        # Dacă martieni_adn[i] == 1, atunci i este un număr prim&lt;br /&gt;
        if martieni_adn[i] == 1:&lt;br /&gt;
            # Setăm factorizarea în numere prime a lui martieni_adn[i] să fie pasul i&lt;br /&gt;
            martieni_adn[i] = i&lt;br /&gt;
            # Folosind algoritmul Ciurului lui Eratostene, marcam toți multiplii lui i cu factorul prim i&lt;br /&gt;
            j = 2&lt;br /&gt;
            while j * i &amp;lt;= n:&lt;br /&gt;
                martieni_adn[i * j] = martieni_adn[i * j] * i&lt;br /&gt;
                # Incrementăm j pentru a considera următorul multiplu al lui i&lt;br /&gt;
                j += 1&lt;br /&gt;
&lt;br /&gt;
    # Calculăm numărul de perechi de marțieni cu ADN-e distincte&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        nr_perechi += int(n / martieni_adn[i])&lt;br /&gt;
&lt;br /&gt;
    print(nr_perechi)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        ADN(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2136_-_Peste&amp;diff=5962</id>
		<title>2136 - Peste</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2136_-_Peste&amp;diff=5962"/>
		<updated>2023-05-06T15:13:33Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Ursul: Bună, cumătră! Da cât peşte ai? Dă-mi şi mie, că tare mi-i poftă!&lt;br /&gt;
&lt;br /&gt;
Vulpea: Ia mai pune-ţi pofta-n cui. Dacă vrei pește, du-te şi-ţi înmoaie coada-n baltă şi vei avea ce să mănânci.&lt;br /&gt;
&lt;br /&gt;
Ursul: Învaţă-mă, te rog, cumătră, că eu nu ştiu cum se prinde peştele.&lt;br /&gt;
&lt;br /&gt;
Vulpea: Alei, cumetre! da’ nu ştii că nevoia te-nvaţă ce nici nu gândeşti? Du-te deseară la baltă și bagă-ţi coada-n apă. Stai pe loc, fără să te mişti, până spre ziuă. Între timp, ia foaia aceasta pe care am scris &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale și până dimineață trebuie să procedezi în felul următor:&lt;br /&gt;
&lt;br /&gt;
* elimini exact două cifre alăturate din fiecare număr scris pe foaie, astfel încât, celelalte cifre rămase după eliminare să formeze, de la stânga la dreapta, cel mai mare număr posibil (de exemplu, din numărul &amp;lt;code&amp;gt;77196&amp;lt;/code&amp;gt;, elimini cifrele &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; pentru a obține cel mai mare număr posibil &amp;lt;code&amp;gt;796&amp;lt;/code&amp;gt;).&lt;br /&gt;
* toate cele N numere obținute la pasul anterior, le lipești unul după altul, în ce ordine vrei tu. Uitându-te de la stânga la dreapta la cifrele numerelor lipite, observi că s-a format un nou număr &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;. Ai grijă cum procedezi, căci până dimineață, atâta pește se va prinde de coada ta cât vei obține tu valoarea lui &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Ajutați-l pe urs să prindă cât mai mult pește posibil.&lt;br /&gt;
Scrieți un program care citește &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale și determină:&lt;br /&gt;
&lt;br /&gt;
# Cel mai mare număr de eliminări efectuate cu aceleași două cifre alăturate.&lt;br /&gt;
# Cel mai mare număr natural &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; determinat astfel încât ursul să prindă cât mai mult pește.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;peste.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; care poate avea valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și reprezintă numărul cerinței. Cea de-a doua linie conține un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cu semnificaţia din enunţ, iar pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii, cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere scrise pe foaia ce i-a dat-o vulpea ursului, câte un număr natural pe fiecare linie a fișierului.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un singur număr natural determinat conform cerinței problemei.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;, fiecare dintre cele N numere au cel puțin 3 și cel mult 18 cifre;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:4&lt;br /&gt;
:1791&lt;br /&gt;
:802&lt;br /&gt;
:777&lt;br /&gt;
:77196&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:2&lt;br /&gt;
===Explicație===&lt;br /&gt;
Se va rezolva cerința 1 și în fișier sunt patru numere cu care vom proceda astfel:&lt;br /&gt;
&lt;br /&gt;
* din &amp;lt;code&amp;gt;1791&amp;lt;/code&amp;gt; eliminăm cifrele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; iar numărul rezultat este &amp;lt;code&amp;gt;91&amp;lt;/code&amp;gt;&lt;br /&gt;
* din &amp;lt;code&amp;gt;802&amp;lt;/code&amp;gt; eliminăm cifrele &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; iar numărul rezultat este &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;&lt;br /&gt;
* din &amp;lt;code&amp;gt;777&amp;lt;/code&amp;gt; eliminăm cifrele &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; iar numărul rezultat este &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;&lt;br /&gt;
* din &amp;lt;code&amp;gt;77196&amp;lt;/code&amp;gt; eliminăm &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; iar numărul rezultat este &amp;lt;code&amp;gt;796&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
S-au efectuat două eliminări cu aceleași două cifre alăturate: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
:4&lt;br /&gt;
:1791&lt;br /&gt;
:802&lt;br /&gt;
:777&lt;br /&gt;
:77196&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:9187967&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cu aceleași patru numere din exemplul precedent, vom rezolva cerința 2.&lt;br /&gt;
&lt;br /&gt;
În urma eliminărilor efectuate s-au obținut numerele: &amp;lt;code&amp;gt;91 8 7 796&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cel mai mare număr posibil, obținut prin lipirea acestor numere este &amp;lt;code&amp;gt;9187967&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2 4  &lt;br /&gt;
:22 &lt;br /&gt;
:802  &lt;br /&gt;
:777  &lt;br /&gt;
:123456196&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2136 Peste&lt;br /&gt;
def conditii(nums):&lt;br /&gt;
    if not 1 &amp;lt;= len(nums) &amp;lt;= 100:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for nr in nums:&lt;br /&gt;
        if not 3 &amp;lt;= len(str(nr)) &amp;lt;= 18:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inlatura(num):&lt;br /&gt;
    # list() transformă un string într-o listă de caractere&lt;br /&gt;
    cifre = list(num)&lt;br /&gt;
    nr_max = 0&lt;br /&gt;
    cifre_sterse = []&lt;br /&gt;
&lt;br /&gt;
    # Iterăm peste perechi de cifre adiacente și le eliminăm pentru a găsi numărul maxim&lt;br /&gt;
    for i in range(len(cifre)-1):&lt;br /&gt;
        # Identificăm cifrele adiacente de eliminat și le stocăm într-o listă&lt;br /&gt;
        stergere = [min(cifre[i], cifre[i + 1]), max(cifre[i], cifre[i + 1])]&lt;br /&gt;
        # Creăm o nouă listă, excluzând cifrele eliminate&lt;br /&gt;
        # Pentru fiecare cifră din listă, dacă indicele ei nu este i sau i+1, o adăugăm în noua listă&lt;br /&gt;
        cifre_ramase = [cif for idx, cif in enumerate(cifre) if idx not in [i, i + 1]]&lt;br /&gt;
        # Convertim cifrele rămase într-un număr întreg pentru a găsi numărul maxim&lt;br /&gt;
        nr_obtinut = int(&#039;&#039;.join(cifre_ramase))&lt;br /&gt;
        # Dacă numărul maxim obținut este mai mare decât numărul maxim anterior,&lt;br /&gt;
        # actualizăm cifrele stocate și numărul maxim&lt;br /&gt;
        if nr_obtinut &amp;gt; nr_max:&lt;br /&gt;
            cifre_sterse = stergere&lt;br /&gt;
            nr_max = nr_obtinut&lt;br /&gt;
&lt;br /&gt;
    return cifre_sterse, nr_max&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nr_eliminari(cifre_eliminate):&lt;br /&gt;
    # Găsim cifra care a fost eliminată de cele mai multe ori&lt;br /&gt;
    return max(&lt;br /&gt;
        set([elem for sublist in cifre_eliminate for elem in sublist]),&lt;br /&gt;
        key=cifre_eliminate.count&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cel_mai_mare(numere_maxime):&lt;br /&gt;
    # Sortăm în ordine descrescătoare și le concatenăm&lt;br /&gt;
    numere_sortate = sorted(numere_maxime, reverse=True)&lt;br /&gt;
    result = &#039;&#039;.join(numere_sortate)&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def peste(p, numere):&lt;br /&gt;
    cifre_eliminate = []&lt;br /&gt;
    numere_maxime = []&lt;br /&gt;
&lt;br /&gt;
    # Pentru fiecare număr, eliminăm cifrele adiacente și găsim numărul maxim în urma înlăturării&lt;br /&gt;
    for nr in numere:&lt;br /&gt;
        cifre_sterse, nr_maxim = inlatura(nr)&lt;br /&gt;
        # Adăugăm cifrele eliminate și numărul maxim în listele separate&lt;br /&gt;
        cifre_eliminate.append(cifre_sterse)&lt;br /&gt;
        numere_maxime.append(str(nr_maxim))&lt;br /&gt;
&lt;br /&gt;
    # p este cerința problemei&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        print(nr_eliminari(cifre_eliminate))&lt;br /&gt;
    if p == 2:&lt;br /&gt;
        print(cel_mai_mare(numere_maxime))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    p = int(input())&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        numere.append(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        peste(p, numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2351_-_Numere_23&amp;diff=5956</id>
		<title>2351 - Numere 23</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2351_-_Numere_23&amp;diff=5956"/>
		<updated>2023-05-06T14:54:48Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se numește număr 3-prim, un număr natural care se poate descompune în produs de cel mult &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; numere prime, nu neapărat distincte. Cunoscând numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, construiți un șir format din primele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere 3-prime. Ordinea numerelor în șir va fi stabilită astfel încât, extrăgând pe rând numerele din șir, începând cu primul număr și apoi câte un număr din &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; în &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; poziții, circular, să obținem în ordine crescătoare, șirul primelor &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere 3-prime. Parcurgerea circulară înseamnă că după elementul aflat în vector pe locul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, urmează elementul de pe locul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cunoscând numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;c = 1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;c = 2&amp;lt;/code&amp;gt;), se cere:&lt;br /&gt;
&lt;br /&gt;
1. dacă &amp;lt;code&amp;gt;c = 1&amp;lt;/code&amp;gt;, să se afișeze cel mai mare din cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere 3-prime.&lt;br /&gt;
&lt;br /&gt;
2. dacă &amp;lt;code&amp;gt;c = 2&amp;lt;/code&amp;gt;, să se construiască șirul de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere care îndeplinește condiția din enunț.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;numere23.in&amp;lt;/code&amp;gt; conţine pe prima linie, despărțite prin câte un spațiu, numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, cu semnificaţia din enunţ.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;code&amp;gt;c = 1&amp;lt;/code&amp;gt;, atunci pe următorul rând se va afișa un singur număr ce reprezintă cel mai mare din cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere 3-prime. Dacă &amp;lt;code&amp;gt;c = 2&amp;lt;/code&amp;gt;, atunci se vor afișa despărțite prin câte un spațiu, șirul celor &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere 3-prime.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; k &amp;lt; n ≤ 10000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* numerotarea elementelor în vector se face de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5  3  2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:2 6 4 3 5&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primele cinci numere 3-prime sunt: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, și &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;. Șirul de numere &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; parcurs din &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; în &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, va forma în ordine crescătoare șirul de numere inițial.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10 4  2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:2 11 10 5 3 8 7 9 4 6&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; numere 3-prime sunt: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;. Șirul de numere &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, parcurs din &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; în &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, va forma în ordine crescătoare șirul de numere inițial.&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5  3  1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:6&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; numere 3-prime sunt: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;. Șirul de numere &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, parcurs din &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; în &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, va forma în ordine crescătoare șirul de numere inițial.&lt;br /&gt;
==Exemplu 4==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3  10  1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2351 Numere 23&lt;br /&gt;
def conditii(k, n):&lt;br /&gt;
    return 0 &amp;lt; k &amp;lt; n &amp;lt;= 10_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prim3(n):&lt;br /&gt;
    # Dacă n este mai mic decât 2, nu este 3-prim&lt;br /&gt;
    if n &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    divizor, nr_factori_primi = 2, 0&lt;br /&gt;
    # Cât timp n este mai mare decât 1 și nu am găsit 3 factori primi:&lt;br /&gt;
    while n != 1 and nr_factori_primi &amp;lt;= 3:&lt;br /&gt;
        # Cât timp n este divizibil cu divizorul curent și nu am găsit 3 factori primi:&lt;br /&gt;
        while n % divizor == 0 and nr_factori_primi &amp;lt;= 3:&lt;br /&gt;
            # Împărțim n la divizorul curent și creștem numărul de factori primi găsiți&lt;br /&gt;
            n //= divizor&lt;br /&gt;
            nr_factori_primi += 1&lt;br /&gt;
        # Trecem la următorul divizor&lt;br /&gt;
        divizor += 1&lt;br /&gt;
&lt;br /&gt;
    # Dacă n este 1 și am găsit 3 factori primi, n este 3-prim&lt;br /&gt;
    if n == 1 and nr_factori_primi &amp;lt;= 3:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cel_mai_mare(n):&lt;br /&gt;
    rezultat = 1&lt;br /&gt;
    # Cât timp n este nenul:&lt;br /&gt;
    while n &amp;gt; 0:&lt;br /&gt;
        # Creștem rezultatul până când găsim un număr 3-prim&lt;br /&gt;
        rezultat += 1&lt;br /&gt;
        # Dacă rezultatul este 3-prim, scădem 1 din n&lt;br /&gt;
        if prim3(rezultat):&lt;br /&gt;
            n -= 1&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sir_circular(n, k):&lt;br /&gt;
    val, poz, nr_n = 1, 1, n&lt;br /&gt;
    # Găsim cel mai mic număr 3-prim și îl asignăm pe prima poziție din vector&lt;br /&gt;
    while not prim3(val):&lt;br /&gt;
        val += 1&lt;br /&gt;
    vector = [0] * (n + 1)&lt;br /&gt;
    vector[1] = val&lt;br /&gt;
    nr_n -= 1&lt;br /&gt;
&lt;br /&gt;
    # Continuăm să adăugăm numere 3-prime în vector până când vectorul conține n numere&lt;br /&gt;
    while nr_n &amp;gt; 0:&lt;br /&gt;
        # Căutăm următorul număr 3-prim și îl asignăm pe poziția curentă din vector&lt;br /&gt;
        val += 1&lt;br /&gt;
        while not prim3(val):&lt;br /&gt;
            val += 1&lt;br /&gt;
&lt;br /&gt;
        # Trecem la următoarea poziție liberă din vector&lt;br /&gt;
        nr_k = k&lt;br /&gt;
        while nr_k &amp;gt; 0:&lt;br /&gt;
            poz += 1&lt;br /&gt;
            if poz &amp;gt; n:&lt;br /&gt;
                poz = poz % n&lt;br /&gt;
            if vector[poz] == 0:&lt;br /&gt;
                nr_k -= 1&lt;br /&gt;
&lt;br /&gt;
        # Asignăm numărul 3-prim curent pe poziția curentă din vector&lt;br /&gt;
        vector[poz] = val&lt;br /&gt;
        nr_n -= 1&lt;br /&gt;
    &lt;br /&gt;
    # Returnăm numerele din vector separate prin câte un spațiu&lt;br /&gt;
    return &amp;quot; &amp;quot;.join(str(x) for x in vector[1:])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def numere23(c, n, k):&lt;br /&gt;
    # c este cerința enunțului&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        print(cel_mai_mare(n))&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        print(sir_circular(n, k))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, k, c = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(k, n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        numere23(c, n, k)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2115_-_Prajituri&amp;diff=5955</id>
		<title>2115 - Prajituri</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2115_-_Prajituri&amp;diff=5955"/>
		<updated>2023-05-06T14:36:33Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Cerința==&lt;br /&gt;
Ilinca şi verişoara ei Daria, merg la un curs de gătit. Ilinca a făcut o prăjitură cu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; straturi, iar Daria a făcut o prăjitură cu &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; straturi, straturile prăjiturilor fiind aşezate unul după altul pe orizontală şi având diverse culori. E posibil ca unele straturi din prăjitură să aibă aceeaşi culoare.&lt;br /&gt;
&lt;br /&gt;
Ilinca a observat că dacă ar tăia prăjitura ei la capete ar putea obţine o prăjitură la fel ca prăjitura Dariei. Ilinca spune că astfel „extrage” din prăjitura ei prăjitura Dariei. La o extragere, Ilinca taie întotdeauna un număr minim de straturi din partea stângă (straturi pe care le mănâncă imediat) şi câte straturi sunt necesare în partea dreaptă pentru a obţine o prăjitură identică cu prăjitura Dariei. Prăjitura extrasă o aşază pe o farfurie şi continuă „extragerile” din bucata rămasă în partea dreaptă.&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care să citească numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; (reprezentând numărul de straturi din prăjitura Ilincăi respectiv Dariei) şi &amp;lt;code&amp;gt;a1,a2,...,aN&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;b1,b2,...,bM&amp;lt;/code&amp;gt; (reprezentând culorile straturilor din prăjitura Ilincăi respectiv din prăjitura Dariei) şi care să determine:&lt;br /&gt;
&lt;br /&gt;
a) numărul de straturi pe care le taie Ilinca din capătul din stânga şi numărul de straturi pe care le taie din capătul din dreapta la prima extragere;&lt;br /&gt;
&lt;br /&gt;
b) numărul de prăjituri identice cu prăjitura Dariei care se vor afla pe farfurie, după efectuarea tuturor extragerilor;&lt;br /&gt;
&lt;br /&gt;
c) numărul maxim de prăjituri la fel ca prăjitura Dariei care pot fi obţinute din prăjitura Ilincăi dacă aceasta ar rearanja straturile prăjiturii ei într-o ordine convenabilă.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;prajituri.in&amp;lt;/code&amp;gt; conţine pe prima linie numerele naturale &amp;lt;code&amp;gt;N M&amp;lt;/code&amp;gt; reprezentând numărul de straturi din prăjitura Ilincăi, respectiv a Dariei. A doua linie a fişierului conţine, în ordine, cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere &amp;lt;code&amp;gt;a1,a2,...,aN&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând, în ordine de la stânga la dreapta, culorile straturilor din prăjitura Ilincăi. A treia linie a fişierului conţine, în ordine, cele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; numere &amp;lt;code&amp;gt;b1,b2,...,bM&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând, în ordine de la stânga la dreapta, culorile straturilor din prăjitura Dariei.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se vor afișa două numere, separate printr-un spaţiu, reprezentând numărul de straturi tăiate din stânga, respectiv numărul de straturi tăiate din dreapta din prăjitura Ilincăi la prima extragere, separate prin spaţiu. Al treilea rând va conţine un număr natural reprezentând numărul de prăjituri aflate pe farfurie după efectuarea tuturor extragerilor. Al patrulea rând va conţine un număr natural reprezentând numărul maxim de prăjituri la fel ca prăjitura Dariei care se pot obţine din prăjitura Ilincăi dacă aceasta ar rearanja convenabil straturile prăjiturii ei.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ M ≤ N ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ ai ≤ 100, (1 ≤ i ≤ N)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ bi ≤ 100, (1 ≤ i ≤ M)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;N, M, a1, a2, ..., aN, b1, b2, ..., bM sunt numere naturale;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;Întotdeauna se poate obţine din prăjitura Ilincăi cel puţin o prăjitură la fel ca prăjitura Dariei&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5 3&lt;br /&gt;
:6 2 2 2 2&lt;br /&gt;
:6 2 2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:0 2&lt;br /&gt;
:1&lt;br /&gt;
:1&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Prăjitura Ilincăi are &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; straturi, iar a Dariei &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; straturi, pentru a obţine prăjitura Dariei, Ilinca trebuie să taie din stânga &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; straturi şi din dreapta &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; straturi, se poate obţine doar o prăjitură ca a Dariei indiferent de procedeul folosit&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10 2&lt;br /&gt;
:5 6 8 8 6 8 6 8 6 6&lt;br /&gt;
:6 8  &lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1 7&lt;br /&gt;
:3&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Prăjitura Ilincăi are &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; straturi, iar a Dariei &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; straturi, pentru a obţine prăjitura Dariei, Ilinca trebuie să taie din stânga &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; strat şi din dreapta &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; straturi. Prin procedeul de tăiere se pot obţine &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; prăjituri la fel ca prăjitura Dariei. Prin rearanjarea straturilor se pot obţine maxim &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; prăjituri la fel ca prăjitura Dariei.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2 10&lt;br /&gt;
:5 0 8 8 101 8 6 0 6 6&lt;br /&gt;
:101 0  &lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2115 Prajituri&lt;br /&gt;
&lt;br /&gt;
def conditii(n, m, straturi_ilinca, straturi_daria):&lt;br /&gt;
    if not 1 &amp;lt;= m &amp;lt;= n &amp;lt;= 10_000:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if not 1 &amp;lt;= straturi_ilinca[i] &amp;lt;= 100:&lt;br /&gt;
            return False&lt;br /&gt;
    for i in range(m):&lt;br /&gt;
        if not 1 &amp;lt;= straturi_daria[i] &amp;lt;= 100:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prajituri(n, m, straturi_ilinca, straturi_daria):&lt;br /&gt;
    # Ținem cont de frecvența fiecărui element din cele două liste&lt;br /&gt;
    frecv_ilinca = [0] * 101&lt;br /&gt;
    frecv_daria = [0] * 101&lt;br /&gt;
&lt;br /&gt;
    # Calculăm frecvența fiecărui element din cele două liste folosind lungimea listelor (n și m)&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        frecv_ilinca[straturi_ilinca[i]] += 1&lt;br /&gt;
    for i in range(m):&lt;br /&gt;
        frecv_daria[straturi_daria[i]] += 1&lt;br /&gt;
&lt;br /&gt;
    nr, stanga, dreapta, ok = 0, -1, 0, 1&lt;br /&gt;
&lt;br /&gt;
    # Iterăm toate pozițiile de început posibile pentru straturi_daria în straturi_ilinca&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt;= n - m:&lt;br /&gt;
        ok = 1&lt;br /&gt;
        # Verificăm dacă subșirul curent din straturi_ilinca coincide cu cu straturi_daria&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if straturi_ilinca[i + j] != straturi_daria[j]:&lt;br /&gt;
                ok = 0&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        # Dacă da, actualizăm variabilele folosite pentru a calcula numărul de apariții&lt;br /&gt;
        # ale lui straturi_daria în straturi_ilinca&lt;br /&gt;
        if ok:&lt;br /&gt;
            nr += 1&lt;br /&gt;
            if stanga == -1:&lt;br /&gt;
                stanga, dreapta = i, n - m - i&lt;br /&gt;
            i += m&lt;br /&gt;
        # Dacă nu, trecem la următorul subșir din straturi_ilinca&lt;br /&gt;
        else:&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
    # Calculăm numărul de apariții ale lui straturi_daria în straturi_ilinca găsind numărul minim de apariții&lt;br /&gt;
    # ale fiecărui element din straturi_daria în straturi_ilinca&lt;br /&gt;
    aparitii = n&lt;br /&gt;
    for i in range(1, 101):&lt;br /&gt;
        if frecv_daria[i] != 0:&lt;br /&gt;
            aparitii = min(aparitii, frecv_ilinca[i] // frecv_daria[i])&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;{stanga} {dreapta}&amp;quot;)&lt;br /&gt;
    print(nr)&lt;br /&gt;
    print(aparitii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m = [int(x) for x in input().split()]&lt;br /&gt;
    straturi_ilinca = [int(x) for x in input().split()]&lt;br /&gt;
    straturi_daria = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, m, straturi_ilinca, straturi_daria):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        prajituri(n, m, straturi_ilinca, straturi_daria)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2974_-_Z_Zid&amp;diff=5951</id>
		<title>2974 - Z Zid</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2974_-_Z_Zid&amp;diff=5951"/>
		<updated>2023-05-06T14:25:22Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Fie un zid perfect dreptunghiular de înălțime &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; și lățime &amp;lt;code&amp;gt;W&amp;lt;/code&amp;gt;, format din cărămizi de înălțime &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și lățime variabilă, lipite între ele.&lt;br /&gt;
&lt;br /&gt;
Să se taie acest zid pe verticală astfel încât numărul de cărămizi ce trebuie tăiate să fie minim. În cazul în care există mai multe astfel de locuri unde poate fi tăiat zidul, se dorește ca diferența lățimilor celor două bucăți obținute să fie cât mai mică.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;zzid.in&amp;lt;/code&amp;gt; conține pe prima linie numerele &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;W&amp;lt;/code&amp;gt;. Pe fiecare din următoarele &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; linii va fi descris un rând al zidului în felul următor: un număr &amp;lt;code&amp;gt;Ni&amp;lt;/code&amp;gt;, reprezentând numărul de cărămizi de pe rândul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, urmat de &amp;lt;code&amp;gt;Ni&amp;lt;/code&amp;gt; numere, reprezentând lățimea cărămizilor de pe rândul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, în ordinea în care apar. Suma lățimilor cărămizilor de pe fiecare rând este egală cu &amp;lt;code&amp;gt;W&amp;lt;/code&amp;gt;. Toate numerele din fișierul de intrare sunt naturale.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se vor afișa două numere naturale separate printr-un spațiu: numărul minim necesar de cărămizi ce trebuie tăiate astfel încât să se taie zidul în două bucăți, respectiv diferența minimă dintre cele două lățimi ale zidurilor.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ W ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ H ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Sunt maximum &amp;lt;code&amp;gt;1.000.000&amp;lt;/code&amp;gt; cărămizi&lt;br /&gt;
* Pentru &amp;lt;code&amp;gt;30%&amp;lt;/code&amp;gt; din teste &amp;lt;code&amp;gt;H&amp;lt;/code&amp;gt; si &amp;lt;code&amp;gt;W&amp;lt;/code&amp;gt; sunt mai mici decât &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru alte &amp;lt;code&amp;gt;20%&amp;lt;/code&amp;gt; din teste &amp;lt;code&amp;gt;H ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Zidul nu poate fi rotit&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 10&lt;br /&gt;
:1 10&lt;br /&gt;
:2 5 5&lt;br /&gt;
:3 2 3 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1 0&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Zidul se poate tăia fix la jumătate, și doar cărămida de pe primul rând trebuie tăiată.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 10&lt;br /&gt;
:1 10&lt;br /&gt;
:2 5 0&lt;br /&gt;
:3 2 5 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2974 Z Zid&lt;br /&gt;
def conditii(inaltime, latime, zid):&lt;br /&gt;
    if not 2 &amp;lt;= latime &amp;lt;= 1_000_000_000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not 2 &amp;lt;= inaltime &amp;lt;= 100_000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for rand in range(len(zid)):&lt;br /&gt;
        if not sum(zid[rand]) == latime:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def zzid(inaltime, latime, zid):&lt;br /&gt;
    # Creeăm un dicționar pentru a stoca frecvența fiecărei sume de segmente de zid&lt;br /&gt;
    frecv_sume = {}&lt;br /&gt;
    maxim = 0&lt;br /&gt;
    taietura = 0&lt;br /&gt;
    suma_curenta = 0&lt;br /&gt;
&lt;br /&gt;
    # Iterăm peste fiecare rând de segmente de zid&lt;br /&gt;
    for i in range(inaltime):&lt;br /&gt;
        lungime = len(zid[i])&lt;br /&gt;
        # Iterăm peste fiecare segment din rândul curent&lt;br /&gt;
        for j in range(lungime):&lt;br /&gt;
            # Adăugăm segmentul curent la suma curentă&lt;br /&gt;
            segment = zid[i][j]&lt;br /&gt;
            suma_curenta += segment&lt;br /&gt;
            # Dacă suma este egală cu lățimea zidului, trecem la următorul segment&lt;br /&gt;
            if suma_curenta == latime:&lt;br /&gt;
                continue&lt;br /&gt;
            # Dacă suma există deja în dicționar...&lt;br /&gt;
            if suma_curenta in frecv_sume:&lt;br /&gt;
                # ...incrementăm numărul de apariții&lt;br /&gt;
                frecv_sume[suma_curenta] += 1&lt;br /&gt;
            else:&lt;br /&gt;
                # ...altfel, adăugăm suma în dicționar cu numărul de apariții 1&lt;br /&gt;
                frecv_sume[suma_curenta] = 1&lt;br /&gt;
            # Dacă numărul de apariții al sumei curente din dicționar este mai mare decât numărul maxim de apariții,&lt;br /&gt;
            # actualizăm numărul maxim de apariții și tăietura corespunzătoare&lt;br /&gt;
            if frecv_sume[suma_curenta] &amp;gt; maxim:&lt;br /&gt;
                maxim = frecv_sume[suma_curenta]&lt;br /&gt;
                taietura = suma_curenta&lt;br /&gt;
            # Dacă numărul de apariții al sumei curente din dicționar este egal cu numărul maxim de apariții și&lt;br /&gt;
            # tăietura curentă este mai aproape de lățimea dorită a zidului decât tăietura anterioară, actualizăm&lt;br /&gt;
            # tăietura corespunzătoare&lt;br /&gt;
            if frecv_sume[suma_curenta] == maxim and abs(latime - taietura - taietura) &amp;gt; abs(latime - suma_curenta - suma_curenta):&lt;br /&gt;
                taietura = suma_curenta&lt;br /&gt;
        # Resetăm suma curentă pentru următorul rând&lt;br /&gt;
        suma_curenta = 0&lt;br /&gt;
&lt;br /&gt;
    # Printăm numărul minim de rânduri care trebuie tăiate și tăietura corespunzătoare&lt;br /&gt;
    print(f&amp;quot;{inaltime-maxim} {abs(taietura-latime+taietura)}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    inaltime, latime = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    zid = []&lt;br /&gt;
&lt;br /&gt;
    for i in range(inaltime):&lt;br /&gt;
        latimi = [int(x) for x in input().split()[1:]]&lt;br /&gt;
        zid.append(latimi)&lt;br /&gt;
&lt;br /&gt;
    if not conditii(inaltime, latime, zid):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        zzid(inaltime, latime, zid)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2105_-_More_Time&amp;diff=5949</id>
		<title>2105 - More Time</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2105_-_More_Time&amp;diff=5949"/>
		<updated>2023-05-06T14:18:02Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Cerința==&lt;br /&gt;
La banca Moretime, moneda este &amp;lt;code&amp;gt;Time&amp;lt;/code&amp;gt;-ul. Cei &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; clienţi ai băncii au conturi identificate prin valori naturale nenule, distincte două câte două. La deschiderea contului, fiecare client a depus un fond de siguranţă reprezentat printr-un număr natural nenul (cantitatea de &amp;lt;code&amp;gt;Time&amp;lt;/code&amp;gt; aferentă contului, ce poate fi folosită de bancă, pentru urgenţe majore). Un client al băncii este considerat premium dacă numărul său de cont începe şi se termină cu aceeaşi cifră nenulă.&lt;br /&gt;
&lt;br /&gt;
Lumea este lovită de criza de timp şi banca Moretime a hotărât să susţină doar clienţii premium printr-un program special. Astfel, banca va colecta fondurile de siguranţă ale unora dintre clienţii premium iar suma obţinută o va folosi integral pentru a finanţa, cu cantităţi egale de &amp;lt;code&amp;gt;Time&amp;lt;/code&amp;gt;, pe fiecare client premium, inclusiv pe cei de la care a colectat fondul.&lt;br /&gt;
&lt;br /&gt;
Cunoscând &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, numărul de clienţi, conturile şi valorile fondurilor de siguranţă ale acestora, să se determine:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a.&#039;&#039;&#039; numărul clienţilor premium;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b.&#039;&#039;&#039; numărul clienţilor premium ce pot fi aleşi de bancă astfel încât suma fondurilor de siguranţă colectată de la aceştia să poată fi distribuită în mod egal fiecărui client premium;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;c.&#039;&#039;&#039; numerelor de cont ale celor selectaţi la punctul &#039;&#039;&#039;b)&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul text &amp;lt;code&amp;gt;moretime.in&amp;lt;/code&amp;gt; conţine pe prima linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, numărul de clienţi ai băncii iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii perechi de numere, separate prin câte un spaţiu, reprezentând numărul contului şi valoarea fondului de siguranţă, pentru fiecare dintre cei &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; clienţi.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa &amp;lt;code&amp;gt;cp&amp;lt;/code&amp;gt;, numărul de &amp;lt;code&amp;gt;clienţi premium&amp;lt;/code&amp;gt;, pe al treilea rând &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;, numărul de &amp;lt;code&amp;gt;clienţi premium&amp;lt;/code&amp;gt; ce pot fi aleşi de bancă în condiţiile de mai sus iar pe al patrulea rând, un şir de &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; numere separate prin câte un spaţiu, reprezentând conturile acestor clienţi. Dacă sunt mai multe soluţii se va scrie una dintre acestea.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ p ≤ cp ≤ n ≤ 10000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Moneda Time nu este divizibilă.&lt;br /&gt;
* Numerele de cont sunt numere naturale cu cel puţin două şi cel mult cinci cifre.&lt;br /&gt;
* Fondurile de siguranţă sunt numere naturale nenule mai mici decât &amp;lt;code&amp;gt;100000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru răspunsuri corecte se acordă punctaje parţiale astfel: &amp;lt;code&amp;gt;a) 30%; a)+b)+c) 100%&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
:112 100&lt;br /&gt;
:217 50&lt;br /&gt;
:1231 200&lt;br /&gt;
:3000 500&lt;br /&gt;
:2902 200&lt;br /&gt;
:44 100&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:3&lt;br /&gt;
:2&lt;br /&gt;
:2902 44&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&lt;br /&gt;
* sunt &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; clienţi premium; pot fi aleşi &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; clienţi premium pentru colectarea fondurilor de siguranţă;&lt;br /&gt;
* clienţii cu conturile &amp;lt;code&amp;gt;2902&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;44&amp;lt;/code&amp;gt; pot fi aleşi pentru că suma fondurilor lor &amp;lt;code&amp;gt;(200+100=300)&amp;lt;/code&amp;gt; poate fi împărţită în mod egal celor &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; clienţi premium (fiecare ar primi &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5&lt;br /&gt;
:121 -1&lt;br /&gt;
:21712 50&lt;br /&gt;
:12311 200&lt;br /&gt;
:30003 500&lt;br /&gt;
:129021 150000&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2105 More time&lt;br /&gt;
def conditii(clienti, clienti_premium):&lt;br /&gt;
    return all((&lt;br /&gt;
        (0 &amp;lt;= client[&#039;fond&#039;] &amp;lt;= 100_000 for client in clienti),&lt;br /&gt;
        (2 &amp;lt;= len(str(client[&#039;idx&#039;])) &amp;lt;= 5 for client in clienti),&lt;br /&gt;
        (1 &amp;lt;= len(clienti_premium) &amp;lt;= len(clienti) &amp;lt;= 10_000)&lt;br /&gt;
    ))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def is_premium(client_idx):&lt;br /&gt;
    sir_client_idx = str(client_idx)&lt;br /&gt;
    # Un client este premium dacă primul și ultimul caracter din ID-ul său sunt egale&lt;br /&gt;
    return sir_client_idx[0] == sir_client_idx[-1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def moretime(clienti_premium):&lt;br /&gt;
    clienti_premium_nr = len(clienti_premium)&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm o listă pentru a ține cont de suma acumulată a fondurilor pentru fiecare client premium&lt;br /&gt;
    suma = [0] * (clienti_premium_nr + 1)&lt;br /&gt;
&lt;br /&gt;
    # Iterăm prin fiecare client premium și actualizăm suma acumulată&lt;br /&gt;
    for i in range(clienti_premium_nr):&lt;br /&gt;
        # Suma acumulată pentru clientul i+1 este suma acumulată pentru clientul i plus fondul clientului i&lt;br /&gt;
        suma[i + 1] = suma[i] + clienti_premium[i][&#039;fond&#039;]&lt;br /&gt;
&lt;br /&gt;
        # Dacă suma acumulată este divizibilă cu numărul de clienți premium...&lt;br /&gt;
        if suma[i + 1] % clienti_premium_nr == 0:&lt;br /&gt;
            # Printăm numărul de clienți din ciclu și indicii lor, apoi ieșim din program&lt;br /&gt;
            print(i + 1)&lt;br /&gt;
            for j in range(i + 1):&lt;br /&gt;
                print(clienti_premium[j][&#039;idx&#039;], end=&#039; &#039;)&lt;br /&gt;
            exit()&lt;br /&gt;
&lt;br /&gt;
    # Dacă nu există cicluri cu toți clienții premium, găsim cel mai lung ciclu cu doi clienți premium&lt;br /&gt;
    i_nou, j_nou = -1, -1&lt;br /&gt;
    for i in range(clienti_premium_nr):&lt;br /&gt;
        for j in range(i + 1, clienti_premium_nr):&lt;br /&gt;
            # Verificăm dacă diferența dintre suma acumulată celor doi clienți este divizibilă cu numărul de clienți premium&lt;br /&gt;
            if suma[i + 1] % clienti_premium_nr == suma[j + 1] % clienti_premium_nr:&lt;br /&gt;
                i_nou = i&lt;br /&gt;
                j_nou = j&lt;br /&gt;
&lt;br /&gt;
    # Printăm lungimea celui mai lung ciclu cu doi clienți premium și indicii lor&lt;br /&gt;
    print(j_nou - i_nou)&lt;br /&gt;
    for i in range(i_nou + 1, j_nou + 1):&lt;br /&gt;
        print(clienti_premium[i][&#039;idx&#039;], end=&#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    clienti = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        idx, fond = input().split()&lt;br /&gt;
        clienti.append({&#039;idx&#039;: int(idx), &#039;fond&#039;: int(fond)})&lt;br /&gt;
&lt;br /&gt;
    clienti_premium = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if is_premium(clienti[i][&#039;idx&#039;]):&lt;br /&gt;
            clienti_premium.append({&#039;idx&#039;: clienti[i][&#039;idx&#039;], &#039;fond&#039;: clienti[i][&#039;fond&#039;]})&lt;br /&gt;
&lt;br /&gt;
    if not conditii(clienti, clienti_premium):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        moretime(clienti_premium)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2056_-_Popcorn&amp;diff=5938</id>
		<title>2056 - Popcorn</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2056_-_Popcorn&amp;diff=5938"/>
		<updated>2023-05-06T13:55:25Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
==Cerința==&lt;br /&gt;
Cu toții știm că popcornul este o adevărată delicatesă culinară. În pregătirile tale pentru lotul de anul acesta (și pentru petrecerile de după), ai făcut comandă de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; tipuri de floricele de porumb pentru microunde. Fiecare tip are asociate &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; valori:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;A[i]&amp;lt;/code&amp;gt; = Timpul (în secunde) la care orice floricică de acel tip “pocnește”;&lt;br /&gt;
* &amp;lt;code&amp;gt;B[i]&amp;lt;/code&amp;gt; = Timpul (în secunde) la care orice floricică de acel tip “se arde”;&lt;br /&gt;
* &amp;lt;code&amp;gt;C[i]&amp;lt;/code&amp;gt; = Cantitatea (în floricele) a respectivului tip.&lt;br /&gt;
&lt;br /&gt;
Mai ai la dispoziție &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; pungi pentru floricele de unică folosință de capacitate foarte mare (practic, infinită) și un cuptor cu microunde. Cum, bineînțeles, nimănui nu îi plac floricelele nefăcute sau cele arse, îți dorești să le partiționezi convenabil în cele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; pungi și apoi să le introduci pe rând în cuptorul cu microunde, setându-i un timp de preparare &amp;lt;code&amp;gt;prep[i]&amp;lt;/code&amp;gt; corespunzător, astfel încât după cele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; tranșe să obții cât mai multe floricele comestibile.&lt;br /&gt;
&lt;br /&gt;
Formal, o floricică de tipul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; introdusă în punga &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt; , setată la timpul (în secunde) de preparare &amp;lt;code&amp;gt;prep[j]&amp;lt;/code&amp;gt; este comestibilă dacă și numai dacă &amp;lt;code&amp;gt;A[i] ≤ prep[j] &amp;lt; B[i]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fiind date cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; tipuri de floricele și numărul de pungi disponibile, trebuie să găsești o partiție convenabilă și timpii optimi de preparare pentru fiecare pungă, astfel încât la final să obții numărul maxim de floricele comestibile, pe care să îl afișezi în fișierul de ieșire. Prea ușor!&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;popcorn.in&amp;lt;/code&amp;gt; conține pe prima linie numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; , separate printr-un spațiu, cu semnificația din enunț. Pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii se vor afla valorile &amp;lt;code&amp;gt;A[i]&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;B[i]&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;C[i]&amp;lt;/code&amp;gt; corespunzătoare fiecărui tip de floricele.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un singur număr natural reprezentând numărul maxim de floricele comestibile care se poate obține.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ M ≤ N ≤ 200 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ A[i] &amp;lt; B[i] ≤ 200 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Numărul total de floricele nu depășește &amp;lt;code&amp;gt;109&amp;lt;/code&amp;gt;&lt;br /&gt;
* &#039;&#039;&#039;Unele pungi pot fi goale !&#039;&#039;&#039;&lt;br /&gt;
* &amp;lt;code&amp;gt;X = max{N, B[1], B[2], …, B[N]}&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5 2&lt;br /&gt;
:2 4 3&lt;br /&gt;
:1 5 6&lt;br /&gt;
:4 8 10&lt;br /&gt;
:7 8 2&lt;br /&gt;
:10 11 2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:21&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Avem &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; tipuri de floricele și &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; pungi disponibile.&lt;br /&gt;
&lt;br /&gt;
Una din soluțiile posibile este:&lt;br /&gt;
&lt;br /&gt;
* Punga &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; va conține tipurile &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și va fi preparată la timpul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Punga &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; va conține tipurile &amp;lt;code&amp;gt;3, 4, 5&amp;lt;/code&amp;gt; și va fi preparată la timpul &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Toate tipurile de floricele vor fi preparate cu succes, în afară de tipul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, care vor rămâne în stadiul de boabe.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 3&lt;br /&gt;
:1 2 2&lt;br /&gt;
:2 3 3&lt;br /&gt;
:1 3 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:10&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Putem alege pungile astfel:&lt;br /&gt;
&lt;br /&gt;
* Punga &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; va conține tipurile &amp;lt;code&amp;gt;1, 3&amp;lt;/code&amp;gt; și va fi preparată la timpul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Punga &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; va conține tipul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și va fi preparată la timpul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Punga &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; va fi goală.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 3 &lt;br /&gt;
:2 1 2  &lt;br /&gt;
:3 2 3  &lt;br /&gt;
:1 3 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2056 Popcorn&lt;br /&gt;
T_POCNIRE = 0&lt;br /&gt;
T_ARDERE = 1&lt;br /&gt;
CANTITATE = 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(n_tipuri, n_pungi, tipuri_floricele):&lt;br /&gt;
    for tip in tipuri_floricele:&lt;br /&gt;
        if not 1 &amp;lt;= tip[T_POCNIRE] &amp;lt; tip[T_ARDERE] &amp;lt;= 200_000:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    if sum([tip[CANTITATE] for tip in tipuri_floricele]) &amp;gt; 10**9:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not 1 &amp;lt;= n_pungi &amp;lt;= n_tipuri &amp;lt;= 200_000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    x = [tip[T_ARDERE] for tip in tipuri_floricele]&lt;br /&gt;
    x.append(n_tipuri)&lt;br /&gt;
&lt;br /&gt;
    x_max = max(x)&lt;br /&gt;
&lt;br /&gt;
    if not n_pungi &amp;lt;= x_max &amp;lt;= 50_000:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def popcorn(n_tipuri, n_pungi, floricele):&lt;br /&gt;
    # Inițializăm o listă bidimensională pentru a stoca cantitatea de popcorn care poate fi preparată pentru fiecare&lt;br /&gt;
    # tip de popcorn și pentru fiecare pas de timp&lt;br /&gt;
&lt;br /&gt;
    # Lista are n_tipuri rânduri și 50,000 coloane, deoarece fiecare tip de popcorn poate fi preparat pentru maxim&lt;br /&gt;
    # 50,000 de pași de timp&lt;br /&gt;
    nr = [[0 for j in range(50_000)] for i in range(n_tipuri)]&lt;br /&gt;
    for i in range(n_tipuri):&lt;br /&gt;
        # Pentru fiecare tip de popcorn, parcurgem pașii de timp când popcorn-ul poate fi preparat&lt;br /&gt;
        # (de la T_POCNIRE la T_ARDERE)&lt;br /&gt;
        for k in range(floricele[i][T_POCNIRE], floricele[i][T_ARDERE]):&lt;br /&gt;
            if k &amp;lt; floricele[i][T_ARDERE]:&lt;br /&gt;
                nr[i][k] = floricele[i][CANTITATE]&lt;br /&gt;
&lt;br /&gt;
    # Inițializăm o altă listă bidimensională cu n_tipuri+1 rânduri și n_pungi+1 coloane&lt;br /&gt;
    # Fiecare element din listă va stoca cantitatea maximă de popcorn care poate fi pusă în j pungi&lt;br /&gt;
    # folosind primele i tipuri de popcorn&lt;br /&gt;
    dinamic = [[0 for j in range(n_pungi+1)] for i in range(n_tipuri+1)]&lt;br /&gt;
    for i in range(1, n_tipuri+1):&lt;br /&gt;
        for j in range(1, n_pungi+1):&lt;br /&gt;
            for k in range(j, -1, -1):&lt;br /&gt;
                # Calculăm cantitatea maximă de popcorn care poate fi pusă în j pungi folosind primele i tipuri de popcorn,&lt;br /&gt;
                # bazat pe cantitatea de popcorn care poate fi preparată pentru fiecare tip și pas de timp, stocată în lista &amp;quot;nr&amp;quot;&lt;br /&gt;
                dinamic[i][j] = max(dinamic[i][j], dinamic[i-1][k] + sum(nr[i-1][:j-k]))&lt;br /&gt;
&lt;br /&gt;
    # Printăm cantitatea maximă de popcorn care poate fi pusă în pungi, &lt;br /&gt;
    # care este valoarea din colțul din dreapta jos al tabelei &amp;quot;dinamic&amp;quot;&lt;br /&gt;
    print(max(dinamic[-1]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n_tipuri, n_pungi = [int(x) for x in input().split(&amp;quot; &amp;quot;)]&lt;br /&gt;
&lt;br /&gt;
    floricele = []&lt;br /&gt;
&lt;br /&gt;
    for i in range(n_tipuri):&lt;br /&gt;
        timp_pana_la_pocnire, timp_pana_la_ardere, cantitate = [int(x) for x in input().split()]&lt;br /&gt;
        floricele.append([timp_pana_la_pocnire, timp_pana_la_ardere, cantitate])&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n_tipuri, n_pungi, floricele):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        popcorn(n_tipuri, n_pungi, floricele)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2104_-_Factorial_3&amp;diff=5927</id>
		<title>2104 - Factorial 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2104_-_Factorial_3&amp;diff=5927"/>
		<updated>2023-05-06T13:39:52Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Factorialul unui număr natural nenul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, notat &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;, se defineşte ca fiind produsul numerelor naturale de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Una dintre modalităţile de reprezentare a factorialului este prin enumerarea factorilor primi pe care îi conţine şi a exponenţilor acestora.&lt;br /&gt;
&lt;br /&gt;
Fiind dat un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, scrieţi un program care determină suma exponenţilor factorilor primi corespunzători descompunerii în factori primi a lui &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; factorial.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;factorial3.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un număr reprezentând suma exponenţilor numerelor prime din descompunerea în factori primi a lui &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;2 ≤ n ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:5&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;5! = 1*2*3*4*5 = 23*31*51&amp;lt;/code&amp;gt;&amp;lt;code&amp;gt;3+1+1=5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2104 Factorial3&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 2 &amp;lt;= n &amp;lt;= 100_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def factori_primi(n):&lt;br /&gt;
    factori = []&lt;br /&gt;
&lt;br /&gt;
    # Dacă n este par, îl împărțim la 2 până nu mai este par și adăugăm 2 la lista de factori primi&lt;br /&gt;
    while n % 2 == 0:&lt;br /&gt;
        n //= 2&lt;br /&gt;
        factori.append(2)&lt;br /&gt;
&lt;br /&gt;
    # Check odd numbers as potential factors starting from 3 up to sqrt(n)&lt;br /&gt;
    # Verificăm numere impare începând cu 3 până la rădăcina pătrată a lui n&lt;br /&gt;
    i = 3&lt;br /&gt;
    while i*i &amp;lt;= n:&lt;br /&gt;
        # Dacă i este factor prim, îl adăugăm la lista de factori primi&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            n //= i&lt;br /&gt;
            factori.append(i)&lt;br /&gt;
        # Dacă nu, trecem la următorul număr impar (3+2=5, 5+2=7, 7+2=9, 9+2=11 ...)&lt;br /&gt;
        else:&lt;br /&gt;
            i += 2&lt;br /&gt;
&lt;br /&gt;
    if n &amp;gt; 2:&lt;br /&gt;
        factori.append(n)&lt;br /&gt;
&lt;br /&gt;
    return factori&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def factorial3(n):&lt;br /&gt;
    factori = []&lt;br /&gt;
    # Pentru fiecare număr de la 2 la n+1, adăugăm factorii primi ai săi la lista de factori&lt;br /&gt;
    # extend() este o funcție built-in care adaugă elementele unui iterable la un alt iterable&lt;br /&gt;
    for i in range(2, n+1):&lt;br /&gt;
        factori.extend(factori_primi(i))&lt;br /&gt;
    # Creăm un dicționar care are ca chei factorii primi și ca valori numărul de apariții ale fiecărui factor prim&lt;br /&gt;
    factor_prim_nr = {}&lt;br /&gt;
    # Pentru fiecare factor prim din lista de factori...&lt;br /&gt;
    for factor in factori:&lt;br /&gt;
        # ...îl adăugăm în dicționar și incrementăm numărul de apariții&lt;br /&gt;
        # get() este o funcție built-in care returnează valoarea asociată unei chei dintr-un dicționar,&lt;br /&gt;
        # iar dacă cheia nu există, returnează valoarea default (în cazul nostru 0)&lt;br /&gt;
        factor_prim_nr[factor] = factor_prim_nr.get(factor, 0) + 1&lt;br /&gt;
&lt;br /&gt;
    print(sum(factor_prim_nr.values()))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        factorial3(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1783_-_Find_Min&amp;diff=5920</id>
		<title>1783 - Find Min</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1783_-_Find_Min&amp;diff=5920"/>
		<updated>2023-05-06T13:26:08Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un șir &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; de lungime &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cu elemente distincte din mulțimea &amp;lt;code&amp;gt;{1,2..,N}&amp;lt;/code&amp;gt;. Pentru fiecare poziție &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; din șirul &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; se cere să aflați cea mai mică poziție &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt;, astfel încât &amp;lt;code&amp;gt;P[j] &amp;lt; P[i]&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;j &amp;lt; i&amp;lt;/code&amp;gt;. În caz că o astfel de poziție nu există se consideră &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; ca soluție.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;findmin.in&amp;lt;/code&amp;gt; conţine pe prima linie &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând lungimea șirului iar pe a doua linie &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale, reprezentând elementele șirului &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se vor afișa &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere despărțite prin câte un spațiu, unde al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea număr reprezintă răspunsul pentru al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea element din șir.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 1 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Șirul &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este indexat de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:7&lt;br /&gt;
:5 6 7 3 1 4 2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:-1 1 1 -1 -1 4 5&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Pentru primele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; elemente răspunsurile sunt &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; respectiv &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Pentru al &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;-lea element răspunsul e poziția &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;(se observă că și &amp;lt;code&amp;gt;P[2] &amp;lt; P[3]&amp;lt;/code&amp;gt;). Pentru elementele de pe pozițiile &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; răspunsurile sunt: &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;-1&amp;lt;/code&amp;gt;. Răspunsul pentru al &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;-lea element: poziția &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; (se observa că și &amp;lt;code&amp;gt;P[5] &amp;lt; P[6]&amp;lt;/code&amp;gt;). În final, răspunsul pentru ultimul elementul: poziția &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1000001&lt;br /&gt;
:1 2 3 3 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1783 Find Min&lt;br /&gt;
def conditii(n, sir_p):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        1 &amp;lt;= min(sir_p),&lt;br /&gt;
        max(sir_p) &amp;lt;= 1_000_000,&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 1_000_000,&lt;br /&gt;
        len(sir_p) == n&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def findmin(sir_p):&lt;br /&gt;
    sir = []&lt;br /&gt;
&lt;br /&gt;
    # Pentru fiecare element din sir_p&lt;br /&gt;
    for i in range(len(sir_p)):&lt;br /&gt;
        # Căutăm primul element mai mic decât el&lt;br /&gt;
        minim = -1&lt;br /&gt;
        for j in range(i):&lt;br /&gt;
            # Dacă găsim unul...&lt;br /&gt;
            if sir_p[j] &amp;lt; sir_p[i]:&lt;br /&gt;
                # ...îl salvăm și ne oprim&lt;br /&gt;
                minim = j&lt;br /&gt;
                break&lt;br /&gt;
        # Dacă nu găsim niciunul, minimul rămâne -1&lt;br /&gt;
        # Altfel, adăugăm 1 la minim deoarece conform cerinței, indexarea șirului P începe de la 1&lt;br /&gt;
        sir.append(f&amp;quot;{minim+1 if minim != -1 else -1}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join(sir))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    sir_p = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, sir_p):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        findmin(sir_p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0747_-_Turism&amp;diff=5918</id>
		<title>0747 - Turism</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0747_-_Turism&amp;diff=5918"/>
		<updated>2023-05-06T13:11:42Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
În oraşul Z sunt un număr de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; obiective turistice, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Pentru a ajuta turiştii să viziteze oraşul, primăria a cumpărat un autobuz special ce are &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; locuri şi care va parcurge cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; puncte de atracţie turistică începând cu obiectivul numerotat cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, apoi obiectivul numerotat cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, …, până la obiectivul numerotat cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi apoi revine la obiectivul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, traseul având formă circulară. În fiecare staţie aşteaptă un anumit număr de călători; pentru fiecare călător se ştie numărul de staţii pe care doreşte să le parcurgă. Călătorii au acces în autobuz numai dacă sunt locuri libere, în ordinea în care așteaptă în stație, iar cei care nu pot urca părăsesc staţia; la următoarea oprire în staţia respectivă vor aştepta alţi călători. Pentru fiecare staţie parcursă costul unui bilet este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; leu. Autobuzul va face pentru ultima urcare a călătorilor şi un ultim tur în care doar coboară călători şi nu urcă nimeni. Se cere numărul de curse complete realizate şi suma încasată pentru cursele realizate.&lt;br /&gt;
&lt;br /&gt;
Determinarea valorilor ce reprezintă suma încasată şi numărul de curse complete realizate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;turism.in&amp;lt;/code&amp;gt; conține pe prima linie trei numere naturale: &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;(numărul de staţii), &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;(numărul de locuri) şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;(numărul de opriri) separate printr-un spaţiu. Pe următoarele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii secvenţe de valori ce reprezintă numărul de călători din stația respectivă şi pentru fiecare călător numărul staţiilor pe care le parcurge dacă are loc în mijlocul de transport, cu un spaţiu între ele.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul ce reprezintă suma încasată şi numărul de curse realizate, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;0 &amp;lt; n ≤ 200,n ≤ m ≤ 10000, 2 &amp;lt; k ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;0 &amp;lt;&amp;lt;/code&amp;gt; numărul de staţii parcurse de un călător &amp;lt;code&amp;gt;≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;autobuzul opreşte în fiecare staţie&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;în fiecare staţie sunt cel mult k călători&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10 8 16&lt;br /&gt;
:9 4 2 6 8 1 1 1 3 2&lt;br /&gt;
:2 1 3&lt;br /&gt;
:2 1 1&lt;br /&gt;
:2 1 2&lt;br /&gt;
:2 10 7&lt;br /&gt;
:2 10 1&lt;br /&gt;
:2 2 2&lt;br /&gt;
:2 2 2&lt;br /&gt;
:2 2 6&lt;br /&gt;
:2 4 1&lt;br /&gt;
:2 4 1&lt;br /&gt;
:4 3 1 1 1&lt;br /&gt;
:3 1 1 1&lt;br /&gt;
:8 5 7 4 10 2 3 2 5&lt;br /&gt;
:4 1 10 1 1&lt;br /&gt;
:4 1 1 1 10&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:138 3&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
În prima staţie urcă primii &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; în autobuz, în a doua coboara &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;(cei &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; care au ales sa parcurga numai &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; staţie) şi urca &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, şi aşa mai departe până se parcurg toate cele &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; opriri alea autobuzului. Suma încasată este : &amp;lt;code&amp;gt;138&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:16 8 9 &lt;br /&gt;
:9 4 2 6 8 1 1 20 3 2&lt;br /&gt;
:2 1 3  &lt;br /&gt;
:2 20 1  &lt;br /&gt;
:2 1 2  &lt;br /&gt;
:2 10 7  &lt;br /&gt;
:2 50 1  &lt;br /&gt;
:3 2 2  &lt;br /&gt;
:4 2 2&lt;br /&gt;
:2 2 6&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0747 Turism&lt;br /&gt;
def conditii(nr_statii, nr_locuri, nr_opriri):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        0 &amp;lt; nr_statii &amp;lt;= 200,&lt;br /&gt;
        nr_statii &amp;lt;= nr_opriri &amp;lt;= 10_000,&lt;br /&gt;
        2 &amp;lt; nr_locuri &amp;lt;= 100&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii_calatori(nr_statii, nr_calatori, calatori):&lt;br /&gt;
    if not nr_calatori == len(calatori):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for c in calatori:&lt;br /&gt;
        if not 0 &amp;lt; c &amp;lt;= nr_statii:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    scaune = [0] * 110&lt;br /&gt;
    cost = 0&lt;br /&gt;
&lt;br /&gt;
    nr_statii, nr_locuri, nr_opriri = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(nr_statii, nr_locuri, nr_opriri):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Pentru fiecare oprire...&lt;br /&gt;
        for i in range(1, nr_opriri+1):&lt;br /&gt;
            # ...scădem 1 din fiecare scaun ocupat&lt;br /&gt;
            for j in range(1, nr_locuri+1):&lt;br /&gt;
                if scaune[j]:&lt;br /&gt;
                    scaune[j] -= 1&lt;br /&gt;
            # Inițializăm poziția primului scaun liber cu 1&lt;br /&gt;
            poz = 1&lt;br /&gt;
&lt;br /&gt;
            rand_input = [int(x) for x in input().split()]&lt;br /&gt;
            nr_calatori = rand_input[0]&lt;br /&gt;
            calatori = rand_input[1:]&lt;br /&gt;
&lt;br /&gt;
            if not conditii_calatori(nr_statii, nr_calatori, calatori):&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
                exit(0)&lt;br /&gt;
&lt;br /&gt;
            # Pentru fiecare călător...&lt;br /&gt;
            for cal in calatori:&lt;br /&gt;
                # ...căutăm primul scaun liber și îl ocupăm&lt;br /&gt;
                while poz &amp;lt;= nr_locuri and scaune[poz]:&lt;br /&gt;
                    poz += 1&lt;br /&gt;
                if poz &amp;lt;= nr_locuri:&lt;br /&gt;
                    scaune[poz] = cal&lt;br /&gt;
                    cost += cal&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm numărul de opriri necesare bazat pe numărul maxim de călători per stație&lt;br /&gt;
        maxim = scaune[0]&lt;br /&gt;
        for i in range(1, nr_locuri):&lt;br /&gt;
            if scaune[i] &amp;gt; maxim:&lt;br /&gt;
                maxim = scaune[i]&lt;br /&gt;
&lt;br /&gt;
        rez = (nr_opriri - 1) // nr_statii + 1&lt;br /&gt;
        if maxim:&lt;br /&gt;
            rez += (maxim - nr_opriri % nr_statii - 1) // nr_statii + 1&lt;br /&gt;
&lt;br /&gt;
        print(cost, rez)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1054_-_Galbeni&amp;diff=5916</id>
		<title>1054 - Galbeni</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1054_-_Galbeni&amp;diff=5916"/>
		<updated>2023-05-06T11:49:37Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
După ce au descoperit ascunzătoarea piratului Spânu, marinarii de pe corabia “Speranţa” au hotărât să ofere sătenilor o parte din comoara acestuia. Întrucât comoara avea un număr nelimitat de bani din aur, numiţi galbeni, singura problemă a marinarilor a fost regula după care să împartă banii.&lt;br /&gt;
&lt;br /&gt;
După îndelungi discuţii au procedat astfel: i-au rugat pe săteni să se aşeze în ordine la coadă şi să vină, pe rând, unul câte unul pentru a-şi ridica galbenii cuveniţi. Primul sătean a fost rugat să îşi aleagă numărul de galbeni, cu condiţia ca acest număr să fie format din exact &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; cifre. Al doilea sătean va primi un număr de galbeni calculat astfel: se înmulţeşte numărul de galbeni ai primului sătean cu toate cifrele nenule ale acelui număr, rezultatul se înmulţeşte cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; şi apoi se împarte la &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; păstrându-se doar ultimele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; cifre ale câtului împărţirii. Dacă numărul obţinut are mai puţin de &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; cifre, atunci acestuia i se adaugă la final cifra &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, până când se completează &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
&lt;br /&gt;
Pentru a stabili câţi galbeni primeşte al treilea sătean, se aplică aceeaşi regulă, dar pornind de la numărul de galbeni ai celui de-al doilea sătean. Regula se aplică în continuare fiecărui sătean, plecând de la numărul de galbeni primiţi de săteanul care a stat la coadă exact în faţa lui.&lt;br /&gt;
&lt;br /&gt;
Cunoscând numărul de galbeni aleşi de primul sătean, determinaţi numărul de galbeni pe care îl va primi al &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;-lea sătean.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;galbeni.in&amp;lt;/code&amp;gt; conține pe prima linie cele &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; numere naturale nenule &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; separate prin câte un spaţiu, unde &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; reprezintă numărul de galbeni ales de primul sătean, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; este numărul de cifre ale numărului &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; reprezintă numărul de ordine al săteanului pentru care se cere să determinaţi numărul de galbeni primiţi.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un număr natural reprezentând rezultatul determinat.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ N ≤ 1 000 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 3&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se garantează că &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; are exact &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:51 2 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:77&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primul sătean a luat &amp;lt;code&amp;gt;51&amp;lt;/code&amp;gt; de galbeni. Cel de al doilea sătean va primi &amp;lt;code&amp;gt;26&amp;lt;/code&amp;gt; de galbeni&lt;br /&gt;
&lt;br /&gt;
(&amp;lt;code&amp;gt;51&amp;lt;/code&amp;gt; se înmulţeşte cu cifrele nenule &amp;lt;code&amp;gt;51*5*1=255&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt; se înmulţeşte cu &amp;lt;code&amp;gt;8 =2040&amp;lt;/code&amp;gt;. Câtul împărţirii lui &amp;lt;code&amp;gt;2040&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;226&amp;lt;/code&amp;gt;, ultimele două cifre fiind &amp;lt;code&amp;gt;26&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Cel de al treilea sătean va primi &amp;lt;code&amp;gt;77&amp;lt;/code&amp;gt; de galbeni (&amp;lt;code&amp;gt;26&amp;lt;/code&amp;gt; se înmulţeşte cu cifrele nenule &amp;lt;code&amp;gt;26*2*6=312&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;312&amp;lt;/code&amp;gt; se înmulţeşte cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; şi obţinem numărul &amp;lt;code&amp;gt;2496&amp;lt;/code&amp;gt;. Câtul împărţirii dintre &amp;lt;code&amp;gt;2469&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;277&amp;lt;/code&amp;gt;, ultimele două cifre fiind &amp;lt;code&amp;gt;77&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10 2 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:96&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Primul sătean primeşte &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; galbeni. Pentru a calcula câţi galbeni primeşte al doilea sătean procedăm astfel: înmulţim &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; cu cifele sale nenule: &amp;lt;code&amp;gt;10*1 = 10&amp;lt;/code&amp;gt;, apoi cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;10*8 = 80&amp;lt;/code&amp;gt;. Câtul împărţirii lui &amp;lt;code&amp;gt;80&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;. Acest număr având mai puţin de &amp;lt;code&amp;gt;K=2&amp;lt;/code&amp;gt; cifre, se adaugă la finalul său cifra &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; şi se obţine &amp;lt;code&amp;gt;89&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pentru al treilea sătean se pleacă de la &amp;lt;code&amp;gt;89&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;89*8*9=6408&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6408*8=51264&amp;lt;/code&amp;gt;, câtul împărţirii lui &amp;lt;code&amp;gt;51264&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;5696&amp;lt;/code&amp;gt;, ultimele două cifre sunt &amp;lt;code&amp;gt;96&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1234 4 4&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1054 Galbeni&lt;br /&gt;
&lt;br /&gt;
def conditii(prim_satean, cifre_prim_satean, nth_satean):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        len(str(prim_satean)) == cifre_prim_satean,&lt;br /&gt;
        1 &amp;lt;= cifre_prim_satean &amp;lt;= 3,&lt;br /&gt;
        2 &amp;lt;= nth_satean &amp;lt;= 1_000_000_000&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calcul_galbeni(s, cifre_s):&lt;br /&gt;
    # Extragem din s toate cifrele nenule&lt;br /&gt;
    cifre_nenule = [int(x) for x in list(str(s)) if int(x) &amp;gt; 0]&lt;br /&gt;
    # Le înmulțim cu s și apoi cu 8, după care le împărțim la 9, conform enunțului&lt;br /&gt;
    produs = s&lt;br /&gt;
    for cif in cifre_nenule:&lt;br /&gt;
        produs *= cif&lt;br /&gt;
    produs *= 8&lt;br /&gt;
    cat = produs // 9&lt;br /&gt;
    # Adăugăm suficienți &amp;quot;9&amp;quot; la finalul variabile &#039;cat&#039; până când acesta are cifre_s cifre&lt;br /&gt;
    while len(str(cat)) &amp;lt; cifre_s:&lt;br /&gt;
        cat = str(cat)+&amp;quot;9&amp;quot;&lt;br /&gt;
    # Secționăm string-ul și returnăm ultimele cifre_s cifre&lt;br /&gt;
    return int(str(cat)[-cifre_s:])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def galbeni(prim_satean, cifre_prim_satean, nth_satean):&lt;br /&gt;
    suma = prim_satean&lt;br /&gt;
    # Pentru fiecare sătean (până la al n-lea sătean), calculăm suma galbenilor&lt;br /&gt;
    for i in range(nth_satean - 1):&lt;br /&gt;
        suma = calcul_galbeni(suma, cifre_prim_satean)&lt;br /&gt;
&lt;br /&gt;
    # Ultima sumă calculată (la ieșirea din for loop) este suma de galbeni pe care am vrut să o determinăm&lt;br /&gt;
    print(suma)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    prim_satean, cifre_prim_satean, nth_satean = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(prim_satean, cifre_prim_satean, nth_satean):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        galbeni(prim_satean, cifre_prim_satean, nth_satean)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1833_-_N_Consecutive&amp;diff=5915</id>
		<title>1833 - N Consecutive</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1833_-_N_Consecutive&amp;diff=5915"/>
		<updated>2023-05-06T11:41:03Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Într-­o zi frumoasă de vara, Gigel l­a auzit pe fratele mai mare spunând că ştie să scrie numărul &amp;lt;code&amp;gt;600&amp;lt;/code&amp;gt; ca sumă de numere consecutive în &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; moduri distincte. Deoarece Gigel este ambiţios, doreşte să poată să facă şi el astfel de afirmaţii. Mai exact, el îşi doreşte să poată să spună care este cel mai mic număr natural care poate fi descompus ca sumă de două sau mai multe numere naturale consecutive în exact &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; moduri şi care sunt acele moduri.&lt;br /&gt;
&lt;br /&gt;
Să se determine cel mai mic număr natural care respectă condițiile lui Gigel.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;consecutive.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de moduri în care numărul găsit de Gigel să poată fi scris ca suma de numere consecutive&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, reprezentând numărul găsit de Gigel, iar pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; rânduri va fi afișat câte un număr, reprezentând lungimea secvenţei.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se garantează că soluţia e mai mică decât &amp;lt;code&amp;gt;1.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:9&lt;br /&gt;
:2&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;9 = 4 + 5&amp;lt;/code&amp;gt; (secventa de lungime &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; care incepe de la &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;9 = 2 + 3 + 4&amp;lt;/code&amp;gt; (secventa de lungime &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; care incepe de la &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:500&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1833 N Consecutive&lt;br /&gt;
from math import sqrt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cerinte(nr):&lt;br /&gt;
    return 1 &amp;lt;= nr &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_aritmetic(a, b):&lt;br /&gt;
    # Formula sumei aritmetice&lt;br /&gt;
    return (b * (b + 1)) // 2 - ((a - 1) * a) // 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def n_consecutive(nr):&lt;br /&gt;
    val_max = 1_000_000&lt;br /&gt;
    sume = [0] * (val_max + 1)&lt;br /&gt;
&lt;br /&gt;
    # Iterăm peste toate secvențele consecutive posibile (adică punctele de început și de sfârșit)&lt;br /&gt;
    for i in range(2, val_max):&lt;br /&gt;
        for stanga in range(1, val_max):&lt;br /&gt;
            dreapta = stanga + i - 1&lt;br /&gt;
            # Dacă suma acestei secvențe este mai mare decât val_max, nu mai iterăm peste punctele de început&lt;br /&gt;
            if suma_aritmetic(stanga, dreapta) &amp;gt; val_max:&lt;br /&gt;
                break&lt;br /&gt;
            # Incrementăm numărul de apariții ale sumei acestei secvențe în lista sume&lt;br /&gt;
            sume[suma_aritmetic(stanga, dreapta)] += 1&lt;br /&gt;
&lt;br /&gt;
    # Căutăm prima sumă a unei secvențe consecutive care apare de nr ori în lista sume&lt;br /&gt;
    for i in range(3, val_max):&lt;br /&gt;
        if sume[i] == nr:&lt;br /&gt;
            print(i)&lt;br /&gt;
&lt;br /&gt;
            # Căutăm o secvență consecutivă care se adună la i iterând peste toate punctele de început posibile&lt;br /&gt;
            # și rezolvând o ecuație de gradul 2 pentru a găsi punctul de sfârșit&lt;br /&gt;
            for stanga in range(i // 2, 0, -1):&lt;br /&gt;
                ec_patrata = 1 - 4 * (stanga - stanga * stanga - 2 * i)&lt;br /&gt;
                dreapta = (-1 + sqrt(ec_patrata)) / 2&lt;br /&gt;
                # Dacă punctul de sfârșit este un număr întreg, afișăm lungimea secvenței consecutive&lt;br /&gt;
                if dreapta == int(dreapta):&lt;br /&gt;
                    print(int(dreapta - stanga + 1))&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    nr = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not cerinte(nr):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        n_consecutive(nr)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0271_-_S_Sume&amp;diff=5901</id>
		<title>0271 - S Sume</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0271_-_S_Sume&amp;diff=5901"/>
		<updated>2023-05-05T15:28:09Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un tablou unidimensional cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale nenule cu cel mult &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; cifre fiecare. Determinaţi câte dintre elementele tabloului se pot scrie ca sumă a altor două elemente aflate pe poziţii distincte din tablou.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;ssume.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;; urmează cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente ale tabloului, dispuse pe mai multe linii şi separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;, numărul de elemente ale tabloului care se pot scrie ca sumă a altor două elemente aflate pe poziţii distincte din tablou.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:7&lt;br /&gt;
:1 10 25 6 2 15 3 &lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;25=10+15&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3=1+2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:101&lt;br /&gt;
:1 2 3 4 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0271 S Sume&lt;br /&gt;
&lt;br /&gt;
def conditii(n, tablou):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 10,&lt;br /&gt;
        len(tablou) == n&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def ssume(n, tablou):&lt;br /&gt;
    nr_sume = 0&lt;br /&gt;
    # Pentru fiecare număr din tablou, verificăm dacă există alte două numere distincte a căror sumă este egală cu el&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(n):&lt;br /&gt;
            for h in range(j + 1, n):&lt;br /&gt;
                # Ne asigurăm că verificăm indici diferiți (adică numere distincte)&lt;br /&gt;
                # Dacă există două numere diferite care se adună la numărul curent...&lt;br /&gt;
                if i != j and i != h and tablou[j] + tablou[h] == tablou[i]:&lt;br /&gt;
                    # ...incrementăm nr_sume&lt;br /&gt;
                    nr_sume += 1&lt;br /&gt;
&lt;br /&gt;
    print(nr_sume)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    tablou = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, tablou):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        ssume(n, tablou)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0801_-_Eliminare_Spatii&amp;diff=5900</id>
		<title>0801 - Eliminare Spatii</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0801_-_Eliminare_Spatii&amp;diff=5900"/>
		<updated>2023-05-05T15:23:39Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un şir de caractere ce conţine cuvinte formate din litere mici ale alfabetului englez, separate prin unul sau mai multe spații.&lt;br /&gt;
&lt;br /&gt;
Să se afişeze şirul obţinut după eliminarea din șir unor spații, astfel încât între cuvinte să fie un singur spațiu și să nu nu existe spații înainte de primul cuvânt și nici după ultimul.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul va citi de la tastatură şirul dat.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa şirul transformat corespunzător.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* șirul dat va conține cel mult &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt; caractere, litere mici ale alfabetului englez și spații&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
    in vacanta plec    la         mare&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:in vacanta plec la mare&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&amp;lt;syntaxhighlight&amp;gt;&lt;br /&gt;
    în v4c4nță pl3c    l4         m4r3&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0801 Eliminare Spatii&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(sir):&lt;br /&gt;
    # Regex care acceptă doar litere din alfabetul englez, caracterul spațiu și are lungimea maximă de 255 de caractere&lt;br /&gt;
    return re.match(r&amp;quot;^[a-z ]{0,255}$&amp;quot;, sir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def eliminare_spatii(sir):&lt;br /&gt;
    # Funcția strip() elimină spațiile de la începutul și sfârșitul unui șir de caractere.&lt;br /&gt;
    # Funcția split() împarte un șir de caractere în funcție de un parametru dat. Dacă nu este dat niciun parametru,&lt;br /&gt;
    # șirul este împărțit după caracterul spațiu.&lt;br /&gt;
    # Dacă există mai multe spații consecutive, funcția split() le va considera ca un singur spațiu.&lt;br /&gt;
    # Funcția join() îmbină elementele unei liste într-un șir de caractere, folosind un parametru dat. În acest caz,&lt;br /&gt;
    # parametru dat este spațiu.&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join(sir.strip().split()))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sir = input()&lt;br /&gt;
&lt;br /&gt;
    if not conditii(sir):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        eliminare_spatii(sir)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1159_-_Smen&amp;diff=5899</id>
		<title>1159 - Smen</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1159_-_Smen&amp;diff=5899"/>
		<updated>2023-05-05T15:17:24Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un șir &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt;. Știind &amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;0&amp;lt;/sub&amp;gt; = 3&amp;lt;/code&amp;gt; și regula de formare a șirului:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; = ([V&amp;lt;sub&amp;gt;i-1&amp;lt;/sub&amp;gt;*V&amp;lt;sub&amp;gt;i-1&amp;lt;/sub&amp;gt; / (i + 2)] +  V&amp;lt;sub&amp;gt;i-1&amp;lt;/sub&amp;gt; * i + i + 1) % 666013&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
să se determine al &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;-lea termen al șirului. (unde &amp;lt;code&amp;gt;[x]&amp;lt;/code&amp;gt; reprezintă partea întreagă a numărului &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;smen.in&amp;lt;/code&amp;gt; conține numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa al &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;-lea termen al șirului.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 20.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10000000&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:22230&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:21345670&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1159 Smen&lt;br /&gt;
&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 20_000_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def smen(n):&lt;br /&gt;
    # v_n = valoarea de la pasul n&lt;br /&gt;
    # v_i = valoarea de la pasul i&lt;br /&gt;
    # Primul termen al șirului este 3&lt;br /&gt;
    v_n, v_i = 3, 0&lt;br /&gt;
    for i in range(n + 1):&lt;br /&gt;
        # Formula de recurență, conform cerinței&lt;br /&gt;
        v_i = ((v_n * v_n // (i + 2)) + v_n * i + i + 1) % 666013&lt;br /&gt;
        # Înlocuim v_n cu v_i pentru a putea calcula următorul termen&lt;br /&gt;
        v_n = v_i&lt;br /&gt;
&lt;br /&gt;
    # Afisăm al n-lea termen&lt;br /&gt;
    print(v_i)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        smen(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2129_-_Prime_1&amp;diff=5898</id>
		<title>2129 - Prime 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2129_-_Prime_1&amp;diff=5898"/>
		<updated>2023-05-05T15:13:06Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Eu sunt fascinată de numerele prime. Consider că numerele prime sunt “scheletul” tuturor numerelor sau “atomii” acestora, pentru că orice număr natural mai mare decât &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; poate fi scris ca un produs de numere prime. Recent am aflat şi alte proprietăţi interesante legate de numerele prime, de exemplu:&lt;br /&gt;
&lt;br /&gt;
#În şirul Fibonacci există o infinitate de numere prime. Vă mai amintiţi şirul Fibonacci? &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;13&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;...&amp;lt;/code&amp;gt; Este şirul în care fiecare termen, exceptând primii doi, se obţine ca suma celor doi termeni care îl precedă.&lt;br /&gt;
#Există numere naturale denumite „economice”. Un număr natural este economic dacă numărul de cifre necesare pentru scrierea sa este mai mare decât numărul de cifre necesare pentru scrierea descompunerii sale în factori primi (adică decât numărul de cifre necesare pentru scrierea factorilor primi şi a puterilor acestora). De exemplu &amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; este economic pentru că &amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; se scrie cu &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; cifre, iar descompunerea sa în factori primi se scrie cu două cifre (&amp;lt;code&amp;gt;2^7&amp;lt;/code&amp;gt;); &amp;lt;code&amp;gt;4374&amp;lt;/code&amp;gt; este economic pentru că se scrie cu &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre, în timp ce descompunerea sa în factori primi se scrie cu &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; cifre (&amp;lt;code&amp;gt;2*3^7&amp;lt;/code&amp;gt;). Observaţi că atunci când un factor prim apare la puterea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, aceasta nu este necesar să fie scrisă.&lt;br /&gt;
#Multe numere naturale pot fi scrise ca sumă de două numere prime. Dar nu toate. De exemplu, &amp;lt;code&amp;gt;121&amp;lt;/code&amp;gt; nu poate fi scris ca sumă de două numere prime.&lt;br /&gt;
Scrieţi un program care citeşte numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi o secvenţă de n numere naturale, apoi rezolvă următoarele cerinţe:&lt;br /&gt;
&lt;br /&gt;
#determină şi afişează câte dintre numerele din secvenţa dată sunt numere prime din şirul Fibonacci;&lt;br /&gt;
#determină şi afişează câte dintre numerele din secvenţa dată sunt numere economice;&lt;br /&gt;
#determină şi afişează câte dintre numerele din secvenţa dată nu pot fi scrise ca sumă de două numere prime.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;prime1.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt; care reprezintă cerinţa (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;). Pe a doua linie se află numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Pe a treia linie se află o secvenţă de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa răspunsul la cerinţa din fişierul de intrare.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;1 &amp;lt; n ≤ 50&amp;lt;/code&amp;gt;&lt;br /&gt;
*Dacă &amp;lt;code&amp;gt;c=1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;c=3&amp;lt;/code&amp;gt; numerele naturale din şir sunt mai mari decât &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi mai mici decât &amp;lt;code&amp;gt;10^7&amp;lt;/code&amp;gt;.&lt;br /&gt;
*Dacă &amp;lt;code&amp;gt;c=2&amp;lt;/code&amp;gt; numerele naturale din şir sunt mai mari decât &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi mai mici decât &amp;lt;code&amp;gt;10^14&amp;lt;/code&amp;gt;. Pentru rezolvarea corectă a cerinţei 1 se acordă 20 de puncte; pentru rezolvarea corectă a cerinţei 2 se acordă 50 de puncte, iar pentru rezolvarea corectă a cerinţei 3 se acordă 30 de puncte.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:5&lt;br /&gt;
:2 10 13 997 233&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cerinţa este 1. Cele &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; numere prime din şirul Fibonacci existente în secvenţă sunt &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;13&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;233&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
:4&lt;br /&gt;
:128 25 4374 720&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Cerinţa este 2. Succesiunea conţine două numere economice (&amp;lt;code&amp;gt;128&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4374&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
:5&lt;br /&gt;
:57 30 121 11 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cerinţa este 3. Sunt &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; numere naturale din secvenţă care nu pot fi scrise ca sumă de două numere prime: &amp;lt;code&amp;gt;57&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;121&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 4 ==&lt;br /&gt;
&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 &lt;br /&gt;
:5  &lt;br /&gt;
:57 -30 -121 -11 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2129 Prime 1&lt;br /&gt;
def cerinte(c, n, numere):&lt;br /&gt;
    if not n == len(numere):&lt;br /&gt;
        return False&lt;br /&gt;
    if not 1 &amp;lt; n &amp;lt;= 50:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if c == 1 or c == 3:&lt;br /&gt;
        for nr in numere:&lt;br /&gt;
            if not 1 &amp;lt; nr &amp;lt; 10**7:&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prim(nr):&lt;br /&gt;
    # Dace nr &amp;lt;= 1, atunci nr nu este prim.&lt;br /&gt;
    if nr &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    # Dacă de la 2 până la rădăcina pătrată a lui nr există un divizor a lui nr, atunci nr nu este prim.&lt;br /&gt;
    for i in range(2, int(nr**0.5) + 1):&lt;br /&gt;
        if nr % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_cifre(nr):&lt;br /&gt;
    # Transformăm numărul într-o listă de cifre, după care returnăm suma cifrelor&lt;br /&gt;
    cifre = [int(x) for x in list(str(nr))]&lt;br /&gt;
    return sum(cifre)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_factori_cifre(nr):&lt;br /&gt;
    suma = 0&lt;br /&gt;
    # Primul factor prim este 2&lt;br /&gt;
    factor = 2&lt;br /&gt;
&lt;br /&gt;
    while nr &amp;gt; 1:&lt;br /&gt;
        exponent = 0&lt;br /&gt;
&lt;br /&gt;
        # Dacă numărul este divizibil cu factorul curent...&lt;br /&gt;
        if nr % factor == 0:&lt;br /&gt;
            # ...îl împărțim la factorul curent și numărăm de câte ori apare factorul curent în număr&lt;br /&gt;
            while nr % factor == 0:&lt;br /&gt;
                nr //= factor&lt;br /&gt;
                exponent += 1&lt;br /&gt;
            # Adăugăm la sumă suma cifrelor factorului și a exponentului, dacă exponentul este mai mare decât 1&lt;br /&gt;
            suma += suma_cifre(factor)&lt;br /&gt;
            if exponent &amp;gt; 1:&lt;br /&gt;
                suma += suma_cifre(exponent)&lt;br /&gt;
        # Trecem la următorul factor prim&lt;br /&gt;
        factor += 1&lt;br /&gt;
&lt;br /&gt;
        # Dacă factorul prim la pătrat este mai mare decât numărul, atunci numărul este prim&lt;br /&gt;
        if factor ** 2 &amp;gt; nr:&lt;br /&gt;
            factor = nr&lt;br /&gt;
&lt;br /&gt;
    return suma&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prime_suma(nr):&lt;br /&gt;
    # Dacă nr este par sau nr-2 este prim, atunci nr nu este sumă de două numere prime.&lt;br /&gt;
    if nr % 2 == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    elif prim(nr - 2):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def c_prim_fibonacii(numere):&lt;br /&gt;
    nr = 0&lt;br /&gt;
    fibonacii = {0}&lt;br /&gt;
    a, b = 1, 1&lt;br /&gt;
&lt;br /&gt;
    # Generăm numere Fibonacii până ajungem la 10^7&lt;br /&gt;
    while a &amp;lt; 10 ** 7:&lt;br /&gt;
        # Algoritm pentru a genera numerele din șirul lui Fibonacci&lt;br /&gt;
        fibonacii.add(a)&lt;br /&gt;
        temp = a&lt;br /&gt;
        a = b&lt;br /&gt;
        b += temp&lt;br /&gt;
&lt;br /&gt;
    # Pentru fiecare număr din numere...&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        # ...dacă numărul se află în șirul lui Fibonacci și este prim...&lt;br /&gt;
        if numar in fibonacii and prim(numar):&lt;br /&gt;
            # ...îl numărăm&lt;br /&gt;
            nr += 1&lt;br /&gt;
&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def c_economice(numere):&lt;br /&gt;
    nr = 0&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        nr_suma_cifre = suma_cifre(numar)&lt;br /&gt;
        nde = suma_factori_cifre(numar)&lt;br /&gt;
&lt;br /&gt;
        if nr_suma_cifre &amp;gt; nde:&lt;br /&gt;
            nr += 1&lt;br /&gt;
&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def c_not_suma(numere):&lt;br /&gt;
    nr = 0&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        if prime_suma(numar):&lt;br /&gt;
            nr += 1&lt;br /&gt;
&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def prime1(c, numere):&lt;br /&gt;
    # c este numărul cerinței&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        print(c_prim_fibonacii(numere))&lt;br /&gt;
&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        print(c_economice(numere))&lt;br /&gt;
&lt;br /&gt;
    elif c == 3:&lt;br /&gt;
        print(c_not_suma(numere))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    c = int(input())&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not cerinte(c, n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        prime1(c, numere)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2135_-_Roua&amp;diff=5897</id>
		<title>2135 - Roua</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2135_-_Roua&amp;diff=5897"/>
		<updated>2023-05-05T14:41:31Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Un copil dorește să vopsească ouăle de Paște, având la dispoziție vopsele de culoare roșie, galbenă, verde și albastră. Fiecare culoare va fi reprezentată printr-un singur caracter astfel: &amp;lt;code&amp;gt;&#039;r&#039;&amp;lt;/code&amp;gt; pentru culoarea roșie, &amp;lt;code&amp;gt;&#039;g&#039;&amp;lt;/code&amp;gt; pentru galben, &amp;lt;code&amp;gt;&#039;v&#039;&amp;lt;/code&amp;gt; pentru verde, &amp;lt;code&amp;gt;&#039;a&#039;&amp;lt;/code&amp;gt; pentru albastru. Pentru a vopsi ouăle, le așază în rând, unul după altul. Astfel, o colorare va fi o succesiune de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; caractere din mulţimea &amp;lt;code&amp;gt;{&#039;r&#039; , &#039;g&#039; , &#039;v&#039;,&#039;a&#039;}&amp;lt;/code&amp;gt;, reprezentând, în ordinea aşezării, culorile celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ouă.&lt;br /&gt;
&lt;br /&gt;
Numim “roua” o secvență de &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; caractere cu proprietatea că dintre acestea exact &amp;lt;code&amp;gt;R-1&amp;lt;/code&amp;gt; caractere reprezintă culoarea roșie, iar un caracter reprezintă una dintre celelalte &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; culori. De exemplu secvenţele roua de lungime &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; sunt &amp;lt;code&amp;gt;&amp;quot;grr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rgr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rrg&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;vrr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rvr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rrv&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;arr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rar&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rra&amp;quot;&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Copilul consideră că o colorare este R-frumoasă, dacă oricare &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; caractere consecutive din colorare formează o secvență roua. De exemplu, pentru &amp;lt;code&amp;gt;N=11&amp;lt;/code&amp;gt; ouă, şirul &amp;lt;code&amp;gt;&amp;quot;arrrvrrrarr&amp;quot;&amp;lt;/code&amp;gt; reprezintă o colorare 4-frumoasă.&lt;br /&gt;
Cunoscând &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, numărul de ouă vopsite, și numărul natural &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, scrieți un program care determină și afișează:&lt;br /&gt;
&lt;br /&gt;
# numărul de secvențe “roua” de lungime &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; existente în colorarea celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ouă;&lt;br /&gt;
# numărul total al colorărilor &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;-frumoase pentru cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ouă.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;roua.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; reprezentând cerința din problemă care trebuie rezolvată (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). A doua linie din fișier conține numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt;, separate prin spaţiu, reprezentând numărul de ouă și lungimea unei secvențe “roua”. Dacă &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt;, fișierul va conţine şi o a treia linie pe care se află colorarea celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ouă.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un număr natural, reprezentând răspunsul la cerinţa specificată în fişierul de intrare&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ N ≤ 10000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ R &amp;lt; N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Rezultatul la cerința 2 poate avea cel mult &amp;lt;code&amp;gt;2400&amp;lt;/code&amp;gt; de cifre.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:7 3&lt;br /&gt;
:vrrrgrr&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cerinţa este 1. Există &amp;lt;code&amp;gt;N=7&amp;lt;/code&amp;gt; ouă. Secvențele &#039;&#039;roua&#039;&#039; de lungime &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; existente în colorare sunt &amp;lt;code&amp;gt;&amp;quot;vrr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rrg&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rgr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;grr&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
:4 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:15&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Cerinţa este 2. Există &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; ouă. Colorările &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;-frumoase ale celor &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; ouă sunt &amp;lt;code&amp;gt;&amp;quot;grrg&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;grrv&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;grra&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;vrrg&amp;quot;&amp;lt;/code&amp;gt;,&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;quot;vrrv&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;vrra&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;arrg&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;arrv&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;arra&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rgrr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rvrr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rarr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rrgr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rrvr&amp;quot;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;&amp;quot;rrar&amp;quot;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
:3 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2135 Roua&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(n, r, colorare=None):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        3 &amp;lt;= n &amp;lt;= 10_000,&lt;br /&gt;
        2 &amp;lt;= r &amp;lt; n,&lt;br /&gt;
        len(colorare) == n if colorare else True&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nr_secvente_roua(colorare, r):&lt;br /&gt;
    nr = 0&lt;br /&gt;
    # Secționăm treptat șirul &#039;colorare&#039; (colorare[0:r], colorare[1:r], colorare[2:r] ...)&lt;br /&gt;
    for i in range(len(colorare)-r+1):&lt;br /&gt;
        secventa = colorare[i:i+r]&lt;br /&gt;
        # Dacă secvența conține exact r-1 litere &#039;r&#039;...&lt;br /&gt;
        if secventa.count(&amp;quot;r&amp;quot;) == r-1:&lt;br /&gt;
            # ... înseamnă că avem o secvență &amp;quot;rouă&amp;quot;&lt;br /&gt;
            nr += 1&lt;br /&gt;
&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nr_colorari_r_frumoase(nr_oua, lungime_secventa_roua):&lt;br /&gt;
    # Numărul de subsecvențe complete (succesiuni de &amp;quot;r&amp;quot;)&lt;br /&gt;
    modulo = nr_oua % lungime_secventa_roua&lt;br /&gt;
    # Elementele rămase (diferite de &amp;quot;r&amp;quot;)&lt;br /&gt;
    cat = nr_oua / lungime_secventa_roua&lt;br /&gt;
&lt;br /&gt;
    # Cu excepția culorii &amp;quot;r&amp;quot;, există alte 3 culori: &amp;quot;g&amp;quot;, &amp;quot;v&amp;quot;, &amp;quot;a&amp;quot;&lt;br /&gt;
    produs = (cat*3) * (modulo+lungime_secventa_roua)&lt;br /&gt;
&lt;br /&gt;
    return int(produs) - 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def roua(c, nr_oua, lungime_secventa_roua,  colorare=None):&lt;br /&gt;
    # c este numărul cerinței&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        print(nr_secvente_roua(colorare, lungime_secventa_roua))&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        print(nr_colorari_r_frumoase(nr_oua, lungime_secventa_roua))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    c = int(input())&lt;br /&gt;
    nr_oua, lungime_secventa_roua = [int(x) for x in input().split()]&lt;br /&gt;
    colorare = None&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        colorare = input()&lt;br /&gt;
&lt;br /&gt;
    if not conditii(nr_oua, lungime_secventa_roua, colorare):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        roua(c, nr_oua, lungime_secventa_roua, colorare)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2051_-_PP&amp;diff=5896</id>
		<title>2051 - PP</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2051_-_PP&amp;diff=5896"/>
		<updated>2023-05-05T11:14:35Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se consideră un șir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule ordonate crescător &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;[1]&amp;lt;/sub&amp;gt;≤a&amp;lt;sub&amp;gt;[2]&amp;lt;/sub&amp;gt;≤...≤a&amp;lt;sub&amp;gt;[N]&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. În legătură cu acest șir de numere ne interesează perechile de poziții &amp;lt;code&amp;gt;(i,j)&amp;lt;/code&amp;gt; cu &amp;lt;code&amp;gt;1≤i&amp;lt;j≤N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;[i]&amp;lt;/sub&amp;gt;≠a&amp;lt;sub&amp;gt;[j]&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; sau ne interesează suma elementelor anumitor secvențe.&lt;br /&gt;
&lt;br /&gt;
Se cere să se scrie un program care să citească un număr &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; reprezentând tipul cerinței, un șir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule ordonate crescător &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;[1]&amp;lt;/sub&amp;gt;≤a&amp;lt;sub&amp;gt;[2]&amp;lt;/sub&amp;gt;≤...≤a&amp;lt;sub&amp;gt;[N]&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; perechi de numere naturale &amp;lt;code&amp;gt;(p[k],q[k])&amp;lt;/code&amp;gt; cu &amp;lt;code&amp;gt;1≤p[k]&amp;lt;q[k]≤N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;1≤k≤T&amp;lt;/code&amp;gt; și apoi:&lt;br /&gt;
&lt;br /&gt;
(1) Dacă &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt;, atunci trebuie să se determine pentru fiecare pereche dată de numere naturale &amp;lt;code&amp;gt;(p,q)&amp;lt;/code&amp;gt; suma &amp;lt;code&amp;gt;a[p]+a[p+1]+...+a[q]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
(2) Dacă &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;, atunci trebuie să se determine pentru fiecare pereche dată de numere naturale &amp;lt;code&amp;gt;(p,q)&amp;lt;/code&amp;gt; numărul de perechi &amp;lt;code&amp;gt;(i,j)&amp;lt;/code&amp;gt; care respectă simultan condițiile &amp;lt;code&amp;gt;p≤i&amp;lt;j≤q&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;a[i]≠a[j]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;pp.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;. Pe al doilea rând se află numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Pe al treilea rând sunt scrise &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale ordonate crescător și separate prin câte un spațiu. Pe al patrulea rând este scris numărul natural &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, iar pe fiecare dintre următoarele &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; rânduri câte două numere naturale separate prin câte un spațiu.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt;, atunci pe fiecare din următoarele &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; rânduri va fi afișat câte un număr natural. Al &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;-lea număr va reprezenta suma elementelor cuprinse între pozițiile &amp;lt;code&amp;gt;p[k]&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;q[k]&amp;lt;/code&amp;gt; inclusiv.&lt;br /&gt;
&lt;br /&gt;
Dacă &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;, atunci pe fiecare din următoarele &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; rânduri va fi afișat câte un număr natural. Al &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;-lea număr va reprezenta numărul cerut de perechi de indici cuprinși între poziţiile &amp;lt;code&amp;gt;p[k]&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;q[k]&amp;lt;/code&amp;gt; inclusiv.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;1 ≤ p[i] &amp;lt; q[i] ≤ N ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;1 ≤ a[1] ≤ a[2] ≤ ... ≤ a[N] ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;1 ≤ T ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
:5&lt;br /&gt;
:1 2 3 3 3&lt;br /&gt;
:2&lt;br /&gt;
:1 4&lt;br /&gt;
:2 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:9&lt;br /&gt;
:11&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Suntem în cazul &amp;lt;code&amp;gt;C=1&amp;lt;/code&amp;gt;. Prima pereche &amp;lt;code&amp;gt;(p,q)&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;(1,4)&amp;lt;/code&amp;gt;. Suma valorilor din secvență este &amp;lt;code&amp;gt;1+2+3+3=9&amp;lt;/code&amp;gt;. A doua pereche &amp;lt;code&amp;gt;(p,q)&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;(2,5)&amp;lt;/code&amp;gt;. Suma valorilor din secvență este &amp;lt;code&amp;gt;2+3+3+3=11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
:5&lt;br /&gt;
:1 2 3 3 3&lt;br /&gt;
:2&lt;br /&gt;
:1 4&lt;br /&gt;
:2 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:5&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Suntem în cazul &amp;lt;code&amp;gt;C=2&amp;lt;/code&amp;gt;. Prima pereche &amp;lt;code&amp;gt;(p,q)&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;(1,4)&amp;lt;/code&amp;gt;. Perechile de poziții care conțin numere diferite între ele sunt &amp;lt;code&amp;gt;(1,2)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(1,3)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(1,4)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(2,3)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(2,4)&amp;lt;/code&amp;gt;. Deci sunt &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; perechi.&lt;br /&gt;
&lt;br /&gt;
A doua pereche &amp;lt;code&amp;gt;(p,q)&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;(2,5)&amp;lt;/code&amp;gt;. Perechile de poziții care conțin numere diferite sunt &amp;lt;code&amp;gt;(2,3)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(2,4)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(2,5)&amp;lt;/code&amp;gt;. Deci sunt &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; perechi.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1 5 &lt;br /&gt;
:1 2 3 3 3 &lt;br /&gt;
:2  &lt;br /&gt;
:1 4  &lt;br /&gt;
:5 2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2051 PP&lt;br /&gt;
def conditii_perechi(n, perechi):&lt;br /&gt;
    for pereche in perechi:&lt;br /&gt;
        if not 1 &amp;lt;= pereche[0] &amp;lt; pereche[1] &amp;lt;= n &amp;lt;= 100_000:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(n, numere, perechi):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        n == len(numere),&lt;br /&gt;
        1 &amp;lt;= len(perechi) &amp;lt;= 1000,&lt;br /&gt;
        sorted(numere) == numere,&lt;br /&gt;
        1 &amp;lt;= numere[0] &amp;lt;= numere[-1] &amp;lt;= 100_000,&lt;br /&gt;
        conditii_perechi(n, perechi)&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def pp(c, numere, perechi):&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        # A și B fiind elementele din pereche, se îmsumează elementele din intervalul [A, B]&lt;br /&gt;
        for pereche in perechi:&lt;br /&gt;
            print(sum(numere[pereche[0] - 1:pereche[1]]))&lt;br /&gt;
            # Scădem 1 din A pentru că indexarea în Python începe de la 0&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        for pereche in perechi:&lt;br /&gt;
            nr = 0&lt;br /&gt;
            # Pentru elementele din intervalul [A, B], verificăm dacă există elemente egale&lt;br /&gt;
            for i in range(pereche[0] - 1, pereche[1]):&lt;br /&gt;
                for j in range(i + 1, pereche[1]):&lt;br /&gt;
                    if numere[i] != numere[j]:&lt;br /&gt;
                        nr += 1&lt;br /&gt;
            print(nr)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    c = int(input())&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    t = int(input())&lt;br /&gt;
    perechi = []&lt;br /&gt;
    for i in range(t):&lt;br /&gt;
        perechi.append([int(x) for x in input().split(&amp;quot; &amp;quot;)])&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, numere, perechi):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        pp(c, numere, perechi)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1503_-_Puteri_5&amp;diff=5894</id>
		<title>1503 - Puteri 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1503_-_Puteri_5&amp;diff=5894"/>
		<updated>2023-05-05T09:54:03Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Deoarece Ionel nu a înţeles bine ordinea de efectuare a operaţiilor de ridicare la putere, doamna învăţătoare îi dă o tema care să îl ajute să aprofundeze această problemă. Astfel, îi dă mai multe exerciţii de următorul tip: pentru trei cifre nenule &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, el va trebui să calculeze valoarea următoarei expresii:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;a&amp;lt;sup&amp;gt;b^c&amp;lt;/sup&amp;gt;+a&amp;lt;sup&amp;gt;c^b&amp;lt;/sup&amp;gt;+b&amp;lt;sup&amp;gt;a^c&amp;lt;/sup&amp;gt;+b&amp;lt;sup&amp;gt;c^a&amp;lt;/sup&amp;gt;+c&amp;lt;sup&amp;gt;a^b&amp;lt;/sup&amp;gt;+c&amp;lt;sup&amp;gt;b^a&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cunoscând cifrele &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, determinaţi valoarea obţinută în urma efectuării calculelor de mai sus.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;puteri5.in&amp;lt;/code&amp;gt; conține pe prima linie trei cifre &amp;lt;code&amp;gt;a b c&amp;lt;/code&amp;gt;, separate prin câte un spaţiu.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa un număr natural ce reprezintă valoarea obţinută pentru expresia precizată anterior.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ a,b,c ≤ 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2 1 3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:24&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Suntem în cazul &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;1^3&amp;lt;/sup&amp;gt;+2&amp;lt;sup&amp;gt;3^1&amp;lt;/sup&amp;gt;+1&amp;lt;sup&amp;gt;2^3&amp;lt;/sup&amp;gt;+1&amp;lt;sup&amp;gt;3^2&amp;lt;/sup&amp;gt;+3&amp;lt;sup&amp;gt;2^1&amp;lt;/sup&amp;gt;+3&amp;lt;sup&amp;gt;1^2&amp;lt;/sup&amp;gt;=21+23+18+19+32+31=2+8+1+1+9+3=24&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2 3 2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1698&lt;br /&gt;
&lt;br /&gt;
==Exemplu 3==&lt;br /&gt;
;Intrare&lt;br /&gt;
:4, 0, 6&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1503 Puteri 5&lt;br /&gt;
def conditii(a, b, c):&lt;br /&gt;
    return 1 &amp;lt;= min(a, b, c) &amp;lt;= max(a, b, c) &amp;lt;= 5&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def puteri5(a, b, c):&lt;br /&gt;
    # sum() este o funcție built-in care returnează suma elementelor dintr-o listă&lt;br /&gt;
    # ** este operatorul de ridicare la putere&lt;br /&gt;
    # ex: (a**(b**c)) este echivalent cu a^(b^c)&lt;br /&gt;
    print(sum([&lt;br /&gt;
        (a ** (b ** c)),&lt;br /&gt;
        (a ** (c ** b)),&lt;br /&gt;
        (b ** (a ** c)),&lt;br /&gt;
        (b ** (c ** a)),&lt;br /&gt;
        (c ** (a ** b)),&lt;br /&gt;
        (c ** (b ** a))&lt;br /&gt;
    ]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    a, b, c = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(a, b, c):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        puteri5(a, b, c)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2348_-_Caracterul_mediu_1&amp;diff=5893</id>
		<title>2348 - Caracterul mediu 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2348_-_Caracterul_mediu_1&amp;diff=5893"/>
		<updated>2023-05-05T08:55:22Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Caracterul mediu a două sau al mai multor caractere este caracterul care are codul ASCII egal cu partea întreagă a mediei aritmetice a codurilor ASCII ale caracterelor date.&lt;br /&gt;
&lt;br /&gt;
Un caracter se numeste &#039;&#039;bun&#039;&#039; daca nu este spatiu, nu este litera mare si nu este vocala .&lt;br /&gt;
&lt;br /&gt;
Se citeste un sir de caractere (care poate contine si spatii). Să se determine caracterul mediu al caracterelor bune din sir .&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură un sir de caractere.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa caracterul mediu al caracterelor bune din sir.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ numărul de caractere citite ≤ 200&amp;lt;/code&amp;gt; &lt;br /&gt;
* Caracterul mediu poate fi spatiu, litera mare sau vocala.&lt;br /&gt;
* Cel putin un caracter va fi bun&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:fz&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:p&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:FaZ QWaaP&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2348 Caracterul Mediu 1&lt;br /&gt;
import re&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def caractere_bune(sir):&lt;br /&gt;
    bune = []&lt;br /&gt;
&lt;br /&gt;
    for caracter in sir:&lt;br /&gt;
        # Regex care acceptă doar literele din alfabetul englez și spațiu&lt;br /&gt;
        if not re.match(r&amp;quot;([aeiouA-Z ])&amp;quot;, caracter):&lt;br /&gt;
            bune.append(caracter)&lt;br /&gt;
&lt;br /&gt;
    return bune&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(sir):&lt;br /&gt;
    return all((&lt;br /&gt;
        2 &amp;lt;= len(sir) &amp;lt;= 200,&lt;br /&gt;
        len(caractere_bune(sir)) &amp;gt; 0&lt;br /&gt;
    ))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def caracterul_mediu(sir):&lt;br /&gt;
    # ord() este o funcție built-in care returnează codul ASCII al unui caracter&lt;br /&gt;
    caractere = [ord(c) for c in caractere_bune(sir)]&lt;br /&gt;
    medie = sum(caractere) // len(caractere)&lt;br /&gt;
    # chr() este o funcție built-in care returnează caracterul corespunzător unui cod ASCII&lt;br /&gt;
    print(chr(medie))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sir = input()&lt;br /&gt;
&lt;br /&gt;
    if not conditii(sir):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        caracterul_mediu(sir)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0997_-_Reuniune&amp;diff=5892</id>
		<title>0997 - Reuniune</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0997_-_Reuniune&amp;diff=5892"/>
		<updated>2023-05-05T08:50:42Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dau două mulțimi de numere naturale. Să se afișeze reuniunea lor.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;reuniune.in&amp;lt;/code&amp;gt; conţine pe prima linie numerele &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;, reprezentând numărul de elemente din fiecare mulţime.&lt;br /&gt;
&lt;br /&gt;
Linia a doua conţine &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale diferite, ordonate crescător, reprezentând elementele primei mulțimi.&lt;br /&gt;
&lt;br /&gt;
Linia a treia conţine &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; numere naturale diferite, ordonate crescător, reprezentând elementele celei de-a doua mulțimi.&lt;br /&gt;
&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa elementele reuniunii celor două mulțimi, în ordine crescătoare, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n , m ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* elementele celor două mulțimi vor fi mai mici decât &amp;lt;code&amp;gt;1 000 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6 4&lt;br /&gt;
:1 3 4 7 10 43&lt;br /&gt;
:3 5 10 37&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:1 3 4 5 7 10 37 43&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6 4&lt;br /&gt;
:7 10 43 1 3 4&lt;br /&gt;
:3 37 10 5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0997 Reuniune&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii(n, m, multimea_n, multimea_m):&lt;br /&gt;
    if not all((&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 1_000,&lt;br /&gt;
        1 &amp;lt;= m &amp;lt;= 1_000,&lt;br /&gt;
        len(multimea_m) == m,&lt;br /&gt;
        multimea_m == sorted(multimea_m),&lt;br /&gt;
        len(multimea_n) == n,&lt;br /&gt;
        multimea_n == sorted(multimea_n),&lt;br /&gt;
    )):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i in multimea_n:&lt;br /&gt;
        if not i &amp;lt; 1_000_000_000:&lt;br /&gt;
            return False&lt;br /&gt;
    for i in multimea_m:&lt;br /&gt;
        if not i &amp;lt; 1_000_000_000:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def reuniune(multimea_n, multimea_m):&lt;br /&gt;
    # sorted() este o funcție built-in care sortează (implicit crescător) o listă de elemente (în acest caz, numere)&lt;br /&gt;
    # set() este o funcție built-in care combină elemente mai multor liste, ignorând orice duplicate&lt;br /&gt;
    rezultat = sorted(set(multimea_n + multimea_m))&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    multimea_n = [int(x) for x in input().split()]&lt;br /&gt;
    multimea_m = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n, m, multimea_n, multimea_m):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        reuniune(multimea_n, multimea_m)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2857_-_LOL&amp;diff=5891</id>
		<title>2857 - LOL</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2857_-_LOL&amp;diff=5891"/>
		<updated>2023-05-05T07:54:29Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
În jocul League of Legends participă două echipe a câte &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; jucători notați &amp;lt;code&amp;gt;a,b,c,d,e&amp;lt;/code&amp;gt;, respectiv &amp;lt;code&amp;gt;A,B,C,D,E&amp;lt;/code&amp;gt;. Fiecare jucător are o valoare, inițial &amp;lt;code&amp;gt;300&amp;lt;/code&amp;gt;, și un câștig, inițial &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. În joc au loc lupte între perechi de jucători din echipe diferite, în urma fiecărei lupte fiind un învingător și un învins.&lt;br /&gt;
&lt;br /&gt;
După luptă, câștigul învingătorului crește cu valoarea învinsului, valoarea sa crește cu &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; de bani, fără să depășească &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt; de bani, iar valoarea învinsului scade cu &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; de bani, neputând deveni mai mică decât &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dându-se lista luptelor, să se determine câți bani va avea fiecare jucător la finalul meciului.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, reprezentând numărul de lupte, iar pe linii separate vor fi perechi &amp;lt;code&amp;gt;x y&amp;lt;/code&amp;gt;, însemnând &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; îl învinge pe &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarele rânduri vor fi afișate câștigul fiecărui jucător la finalul meciului. Afișarea va fi de forma: &amp;lt;code&amp;gt;L x&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; este câștigul jucătorului &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 200.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
:A b&lt;br /&gt;
:A c&lt;br /&gt;
:A a&lt;br /&gt;
:d A&lt;br /&gt;
:e C&lt;br /&gt;
:e C&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:A 900&lt;br /&gt;
:B 0&lt;br /&gt;
:C 0&lt;br /&gt;
:D 0&lt;br /&gt;
:E 0&lt;br /&gt;
:a 0&lt;br /&gt;
:b 0&lt;br /&gt;
:c 0&lt;br /&gt;
:d 450&lt;br /&gt;
:e 550&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; învinge 3 inamici, &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; îl învinge pe &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, câștigând &amp;lt;code&amp;gt;450&amp;lt;/code&amp;gt; de bani, iar &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; îl învinge pe &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ori, prima oară câștigând &amp;lt;code&amp;gt;300&amp;lt;/code&amp;gt; apoi &amp;lt;code&amp;gt;250&amp;lt;/code&amp;gt; de bani.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5000000&lt;br /&gt;
:A a&lt;br /&gt;
:A b&lt;br /&gt;
:A c&lt;br /&gt;
:B a&lt;br /&gt;
:B b&lt;br /&gt;
:B c&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2857 LOL&lt;br /&gt;
&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 200_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def lol(n):&lt;br /&gt;
    # Câștigul inițial al fiecărui jucător este 0&lt;br /&gt;
    castig = dict.fromkeys([&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;], 0)&lt;br /&gt;
    # Valoarea inițială al fiecărui jucător este 300&lt;br /&gt;
    valoare = dict.fromkeys([&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;], 300)&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        castigator, invins = [i for i in input().split()]&lt;br /&gt;
&lt;br /&gt;
        # La câștigul jucătorului câștigător se adaugă valoarea jucătorului învins&lt;br /&gt;
        castig[castigator] += valoare[invins]&lt;br /&gt;
&lt;br /&gt;
        # Valoarea maximă a unui jucător este 1000&lt;br /&gt;
        if valoare[castigator] &amp;lt;= 950:&lt;br /&gt;
            valoare[castigator] += 50&lt;br /&gt;
        # Valoarea minimă a unui jucător este 0&lt;br /&gt;
        if valoare[invins] &amp;gt;= 50:&lt;br /&gt;
            valoare[invins] -= 50&lt;br /&gt;
&lt;br /&gt;
    # Se afișează câștigul fiecărui jucător&lt;br /&gt;
    for membru in castig:&lt;br /&gt;
        print(membru, castig[membru])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        lol(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3328_-_Balaur&amp;diff=5890</id>
		<title>3328 - Balaur</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3328_-_Balaur&amp;diff=5890"/>
		<updated>2023-05-05T07:50:05Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
A fost o dată un balaur cu &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete. Într-o zi Făt-Frumos s-a supărat şi i-a tăiat un cap. Peste noapte i-au crescut alte &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete în loc. Pe acelaşi gât! A doua zi, Făt-Frumos iar i-a tăiat un cap, dar peste noapte balaurului i-au crescut în loc alte &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete … şi tot aşa timp de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile. În cea de a ( &amp;lt;code&amp;gt;n+1&amp;lt;/code&amp;gt; )-a zi, Făt-Frumos s-a plictisit şi a plecat acasă!&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care citeşte de la tastatură &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; , numărul de zile, şi care afişează pe ecran câte capete avea balaurul după &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; reprezentând numărul de capete pe care le va avea balaurul după &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:15&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Iniţial balaurul avea &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete. În prima zi Făt-Frumos i-a tăiat un cap şi i-au rămas &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Peste noapte i-au crescut alte &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; , deci a doua zi dimineaţa balaurul avea &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; capete. În cea de a doua zi Făt-Frumos îi mai taie balaurului un cap, deci balaurul rămâne cu &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; capete. Peste noapte îi mai cresc &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; , astfel că a treia zi dimineaţă balaurul avea &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; capete. Dar în cea de a treia zi Făt-Frumos îi mai taie balaurului un cap, deci după cea de a treia zi balaurul a rămas cu &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt; capete.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#3328 Balaur&lt;br /&gt;
&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1_000_000_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def balaur(n):&lt;br /&gt;
    # Înmulțim cu 5 și nu cu 6 pentru că la finalul oricărei zi, balaurului i se va tăia un cap.&lt;br /&gt;
    # După n zile, balaurul va avea 5*n capete.&lt;br /&gt;
    print(5 * n)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        balaur(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1435_-_Biti&amp;diff=5713</id>
		<title>1435 - Biti</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1435_-_Biti&amp;diff=5713"/>
		<updated>2023-04-30T16:08:06Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Zoli a primit de la doamna profesoară un șir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale. Lui Zoli i se cere să răspundă corect la întrebarea: “Câte numere din șir au în reprezentarea binară doar biți setați – adică au toți biții &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;?  ==Date de intrare== Fișierul de intrare &amp;lt;code&amp;gt;biti.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale separate prin spații, reprezentând el...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Zoli a primit de la doamna profesoară un șir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; elemente, numere naturale. Lui Zoli i se cere să răspundă corect la întrebarea: “Câte numere din șir au în reprezentarea binară doar biți setați – adică au toți biții &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;?&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;biti.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe a doua linie &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale separate prin spații, reprezentând elementele șirului.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa numărul &amp;lt;code&amp;gt;nr&amp;lt;/code&amp;gt;, reprezentând numărul de elemente ale șirului formate doar din biți setați.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 3.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &amp;lt;code&amp;gt;2.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:7&lt;br /&gt;
:24 19 15 81 7 63 100&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:3&lt;br /&gt;
===Explicație===&lt;br /&gt;
Numerele care respectă condiția sunt &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;63&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:24 19 15 81 7 63 100&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1435 Biti&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 3_000_000 and \&lt;br /&gt;
        all(nr &amp;lt; 2_000_000_000 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def biti(numere):&lt;br /&gt;
    setati = 0&lt;br /&gt;
    for nr in numere:&lt;br /&gt;
        # Dacă toate caracterele din reprezentarea binară a lui &#039;nr&#039; sunt egale cu 1 ...&lt;br /&gt;
        if all(c == &#039;1&#039; for c in bin(nr)[2:]):&lt;br /&gt;
            # ... se incrementează valoarea variabilei &#039;setati&#039;&lt;br /&gt;
            setati += 1&lt;br /&gt;
    print(setati)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        biti(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1922_-_N_Mod_25&amp;diff=5707</id>
		<title>1922 - N Mod 25</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1922_-_N_Mod_25&amp;diff=5707"/>
		<updated>2023-04-30T15:32:20Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dau numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;. Aflați dacă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; este divizibil cu &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;X&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt; și dacă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; este divizibil cu &amp;lt;code&amp;gt;5&amp;lt;sup&amp;gt;X&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;.  ==Date de intrare== Fișierul de intrare &amp;lt;code&amp;gt;nmod25.in&amp;lt;/code&amp;gt; conține numărul &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; și numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se va afi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dau numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;. Aflați dacă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; este divizibil cu &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;X&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt; și dacă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; este divizibil cu &amp;lt;code&amp;gt;5&amp;lt;sup&amp;gt;X&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;nmod25.in&amp;lt;/code&amp;gt; conține numărul &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; și numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa mesajul &amp;lt;code&amp;gt;DA&amp;lt;/code&amp;gt; dacă numărul este divizibil cu &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;X&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;NU&amp;lt;/code&amp;gt; dacă nu este divizibil, pe a treia linie mesajul &amp;lt;code&amp;gt;DA&amp;lt;/code&amp;gt; dacă numărul este divizibil cu &amp;lt;code&amp;gt;5&amp;lt;sup&amp;gt;X&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;NU&amp;lt;/code&amp;gt; dacă nu este divizibil.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;100.001&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; X &amp;lt; 5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
:50008&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:DA&lt;br /&gt;
:NU&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;50008&amp;lt;/code&amp;gt; este divizibil cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; la puterea &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; dar nu si cu &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; la puterea &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10&lt;br /&gt;
:800055&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1922 - N Mod 25&lt;br /&gt;
def conditii(x, n):&lt;br /&gt;
    return 0 &amp;lt; x &amp;lt; 5 and\&lt;br /&gt;
        0 &amp;lt; n &amp;lt;= 100_001&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nmod25(x, n):&lt;br /&gt;
    # orice numar A este divizibil cu B daca A % B == 0 (citit A modulo B)&lt;br /&gt;
    # În Python, ** este operatorul de ridicare la putere&lt;br /&gt;
    print(&amp;quot;DA&amp;quot; if n % (2 ** x) == 0 else &amp;quot;NU&amp;quot;)&lt;br /&gt;
    print(&amp;quot;DA&amp;quot; if n % (5 ** x) == 0 else &amp;quot;NU&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    x = int(input())&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    if not conditii(x, n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        nmod25(x, n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3017_-_Decimal_Converter&amp;diff=5702</id>
		<title>3017 - Decimal Converter</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3017_-_Decimal_Converter&amp;diff=5702"/>
		<updated>2023-04-30T15:09:38Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dă &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; un număr natural și un caracter &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, care poate fi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt;. Transformați numărul în baza dată de &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, astfel: {| class=&amp;quot;wikitable&amp;quot; !c !Baza |- |b |Bin |- |o |Oct |- |h |Hex |}  ==Date de intrare== Programul citește de la tastatură numărul caracterul &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, iar apoi numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare co...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; un număr natural și un caracter &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, care poate fi &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;o&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;h&amp;lt;/code&amp;gt;. Transformați numărul în baza dată de &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, astfel:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!c&lt;br /&gt;
!Baza&lt;br /&gt;
|-&lt;br /&gt;
|b&lt;br /&gt;
|Bin&lt;br /&gt;
|-&lt;br /&gt;
|o&lt;br /&gt;
|Oct&lt;br /&gt;
|-&lt;br /&gt;
|h&lt;br /&gt;
|Hex&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul caracterul &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, iar apoi numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se va afișa valoarea cerută.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;1 ≤ n &amp;lt; 2&amp;lt;sup&amp;gt;&amp;lt;big&amp;gt;64&amp;lt;/big&amp;gt;&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Cifrele cu valori mai mari decât &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; se vor scrie cu litere mari.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:b&lt;br /&gt;
:5&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:101&lt;br /&gt;
===Explicație===&lt;br /&gt;
Numărul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; în baza doi este scris &amp;lt;code&amp;gt;101&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:h&lt;br /&gt;
:0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#3017 - DecimalConverter&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt; 2 ** 64&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def decimal_converter(n, c):&lt;br /&gt;
    # bin(), oct() și hex() sunt funcții predefinite in Python&lt;br /&gt;
    if c == &amp;quot;b&amp;quot;:&lt;br /&gt;
        print(bin(n)[2:])&lt;br /&gt;
    elif c == &amp;quot;o&amp;quot;:&lt;br /&gt;
        print(oct(n)[2:])&lt;br /&gt;
    elif c == &amp;quot;h&amp;quot;:&lt;br /&gt;
        print(hex(n)[2:].upper())&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    c = input()&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        decimal_converter(n, c)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0515_-_Sort_SD&amp;diff=5682</id>
		<title>0515 - Sort SD</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0515_-_Sort_SD&amp;diff=5682"/>
		<updated>2023-04-30T14:20:27Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale. Afișați aceste numere ordonate crescător după suma divizorilor. Dacă două numere au aceeași sumă a divizorilor, se va afișa mai întâi cel mai mic.  ==Date de intrare== Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale. ==Date de ieșire== Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;  Pe următoarea linie se vor afișa cele &amp;lt;c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dau &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale. Afișați aceste numere ordonate crescător după suma divizorilor. Dacă două numere au aceeași sumă a divizorilor, se va afișa mai întâi cel mai mic.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar apoi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere în ordinea cerută.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;1 ≤ n ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere citite vor fi mai mici decât &amp;lt;code&amp;gt;100.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10&lt;br /&gt;
:24 46 11 36 48 35 27 28 49 6&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:6 11 27 35 28 49 24 46 36 48&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0515 - SortSD&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 1_000 and \&lt;br /&gt;
        all(nr &amp;lt; 100_000_000 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def sort_sd(numere):&lt;br /&gt;
    rezultat = sorted(numere, key=lambda x: (sum([i for i in range(1, x + 1) if x % i == 0]), x))&lt;br /&gt;
    # cheia de sortare returneaza un tuplu de 2 elemente:&lt;br /&gt;
    # 1) suma divizorilor unui număr, SD(x) -&amp;gt; sum([i for i in range(1, x + 1) if x % i == 0]&lt;br /&gt;
    # 2) numărul în sine, x&lt;br /&gt;
    # Numerele sunt sortate după SD(x). Dacă două numere au aceeași SD, atunci sunt sortate după valoarea lor.&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        sort_sd(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0240_-_Max_N&amp;diff=5674</id>
		<title>0240 - Max N</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0240_-_Max_N&amp;diff=5674"/>
		<updated>2023-04-30T14:04:27Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: Pagină nouă: ==Cerința== Se dă un şir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale. Să se determine un alt şir de numere, cu proprietatea că valoarea elementului de pe poziţia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;) din acest şir este egală cu cea mai mare dintre valorile primelor &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; elemente din primul şir.  ==Date de intrare== Fişierul de intrare &amp;lt;code&amp;gt;maxn.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe a următoarele linii &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale s...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Se dă un şir cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale. Să se determine un alt şir de numere, cu proprietatea că valoarea elementului de pe poziţia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;) din acest şir este egală cu cea mai mare dintre valorile primelor &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; elemente din primul şir.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;maxn.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe a următoarele linii &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale separate prin spaţii.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarea linie se vor afișa &#039;&#039;&#039;n&#039;&#039;&#039; numere, separate prin câte un spaţiu, reprezentând elementele şirului determinat.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* numerele de pe a doua linie a fişierului de intrare vor avea cel mult &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:12&lt;br /&gt;
:4 6 3 7 8 1 6 2 7 9 10 8&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:4 6 6 7 8 8 8 8 8 9 10 10&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-10&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0240 - Max N&lt;br /&gt;
def conditii(n, numere):&lt;br /&gt;
    return len(numere) == n and \&lt;br /&gt;
        1 &amp;lt;= n &amp;lt;= 100_000 and \&lt;br /&gt;
        all(nr &amp;lt;= 999_999_999 for nr in numere)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def max_n(numere):&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    # Incepand cu primul element pana la ultimul...&lt;br /&gt;
    for i in range(len(numere)):&lt;br /&gt;
        # ...adaugam in rezultat maximul dintre primele i+1 elemente&lt;br /&gt;
        rezultat.append(max(numere[:i + 1]))&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot; &amp;quot;.join([str(x) for x in rezultat]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    numere = [int(x) for x in input().split()]&lt;br /&gt;
    if not conditii(n, numere):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        max_n(numere)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3328_-_Balaur&amp;diff=5456</id>
		<title>3328 - Balaur</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3328_-_Balaur&amp;diff=5456"/>
		<updated>2023-04-29T14:11:03Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
A fost o dată un balaur cu &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete. Într-o zi Făt-Frumos s-a supărat şi i-a tăiat un cap. Peste noapte i-au crescut alte &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete în loc. Pe acelaşi gât! A doua zi, Făt-Frumos iar i-a tăiat un cap, dar peste noapte balaurului i-au crescut în loc alte &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete … şi tot aşa timp de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile. În cea de a ( &amp;lt;code&amp;gt;n+1&amp;lt;/code&amp;gt; )-a zi, Făt-Frumos s-a plictisit şi a plecat acasă!&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care citeşte de la tastatură &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; , numărul de zile, şi care afişează pe ecran câte capete avea balaurul după &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; reprezentând numărul de capete pe care le va avea balaurul după &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; zile.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:15&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
Iniţial balaurul avea &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; capete. În prima zi Făt-Frumos i-a tăiat un cap şi i-au rămas &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; .&lt;br /&gt;
&lt;br /&gt;
Peste noapte i-au crescut alte &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; , deci a doua zi dimineaţa balaurul avea &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt; capete. În cea de a doua zi Făt-Frumos îi mai taie balaurului un cap, deci balaurul rămâne cu &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; capete. Peste noapte îi mai cresc &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; , astfel că a treia zi dimineaţă balaurul avea &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; capete. Dar în cea de a treia zi Făt-Frumos îi mai taie balaurului un cap, deci după cea de a treia zi balaurul a rămas cu &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt; capete.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:0&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#3328 Balaur&lt;br /&gt;
&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1_000_000_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def balaur(n):&lt;br /&gt;
    print(5 * n)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        balaur(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2857_-_LOL&amp;diff=5455</id>
		<title>2857 - LOL</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2857_-_LOL&amp;diff=5455"/>
		<updated>2023-04-29T14:10:51Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
În jocul League of Legends participă două echipe a câte &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; jucători notați &amp;lt;code&amp;gt;a,b,c,d,e&amp;lt;/code&amp;gt;, respectiv &amp;lt;code&amp;gt;A,B,C,D,E&amp;lt;/code&amp;gt;. Fiecare jucător are o valoare, inițial &amp;lt;code&amp;gt;300&amp;lt;/code&amp;gt;, și un câștig, inițial &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. În joc au loc lupte între perechi de jucători din echipe diferite, în urma fiecărei lupte fiind un învingător și un învins.&lt;br /&gt;
&lt;br /&gt;
După luptă, câștigul învingătorului crește cu valoarea învinsului, valoarea sa crește cu &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; de bani, fără să depășească &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt; de bani, iar valoarea învinsului scade cu &amp;lt;code&amp;gt;50&amp;lt;/code&amp;gt; de bani, neputând deveni mai mică decât &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dându-se lista luptelor, să se determine câți bani va avea fiecare jucător la finalul meciului.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, reprezentând numărul de lupte, iar pe linii separate vor fi perechi &amp;lt;code&amp;gt;x y&amp;lt;/code&amp;gt;, însemnând &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; îl învinge pe &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următoarele rânduri vor fi afișate câștigul fiecărui jucător la finalul meciului. Afișarea va fi de forma: &amp;lt;code&amp;gt;L x&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; este câștigul jucătorului &amp;lt;code&amp;gt;L&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 200.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6&lt;br /&gt;
:A b&lt;br /&gt;
:A c&lt;br /&gt;
:A a&lt;br /&gt;
:d A&lt;br /&gt;
:e C&lt;br /&gt;
:e C&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:A 900&lt;br /&gt;
:B 0&lt;br /&gt;
:C 0&lt;br /&gt;
:D 0&lt;br /&gt;
:E 0&lt;br /&gt;
:a 0&lt;br /&gt;
:b 0&lt;br /&gt;
:c 0&lt;br /&gt;
:d 450&lt;br /&gt;
:e 550&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; învinge 3 inamici, &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; îl învinge pe &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, câștigând &amp;lt;code&amp;gt;450&amp;lt;/code&amp;gt; de bani, iar &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt; îl învinge pe &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ori, prima oară câștigând &amp;lt;code&amp;gt;300&amp;lt;/code&amp;gt; apoi &amp;lt;code&amp;gt;250&amp;lt;/code&amp;gt; de bani.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5000000&lt;br /&gt;
:A a&lt;br /&gt;
:A b&lt;br /&gt;
:A c&lt;br /&gt;
:B a&lt;br /&gt;
:B b&lt;br /&gt;
:B c&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#2857 LOL&lt;br /&gt;
&lt;br /&gt;
def conditii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 200_000&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def lol(n):&lt;br /&gt;
    castig = dict.fromkeys([&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;], 0)&lt;br /&gt;
    valoare = dict.fromkeys([&amp;quot;A&amp;quot;, &amp;quot;B&amp;quot;, &amp;quot;C&amp;quot;, &amp;quot;D&amp;quot;, &amp;quot;E&amp;quot;, &amp;quot;a&amp;quot;, &amp;quot;b&amp;quot;, &amp;quot;c&amp;quot;, &amp;quot;d&amp;quot;, &amp;quot;e&amp;quot;], 300)&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        castigator, invins = [i for i in input().split()]&lt;br /&gt;
&lt;br /&gt;
        castig[castigator] += valoare[invins]&lt;br /&gt;
&lt;br /&gt;
        if valoare[castigator] &amp;lt;= 950:&lt;br /&gt;
            valoare[castigator] += 50&lt;br /&gt;
        if valoare[invins] &amp;gt;= 50:&lt;br /&gt;
            valoare[invins] -= 50&lt;br /&gt;
&lt;br /&gt;
    for membru in castig:&lt;br /&gt;
        print(membru, castig[membru])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not conditii(n):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        lol(n)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0747_-_Turism&amp;diff=5454</id>
		<title>0747 - Turism</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0747_-_Turism&amp;diff=5454"/>
		<updated>2023-04-29T14:10:25Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
În oraşul Z sunt un număr de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; obiective turistice, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Pentru a ajuta turiştii să viziteze oraşul, primăria a cumpărat un autobuz special ce are &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; locuri şi care va parcurge cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; puncte de atracţie turistică începând cu obiectivul numerotat cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, apoi obiectivul numerotat cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, …, până la obiectivul numerotat cu &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi apoi revine la obiectivul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, traseul având formă circulară. În fiecare staţie aşteaptă un anumit număr de călători; pentru fiecare călător se ştie numărul de staţii pe care doreşte să le parcurgă. Călătorii au acces în autobuz numai dacă sunt locuri libere, în ordinea în care așteaptă în stație, iar cei care nu pot urca părăsesc staţia; la următoarea oprire în staţia respectivă vor aştepta alţi călători. Pentru fiecare staţie parcursă costul unui bilet este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; leu. Autobuzul va face pentru ultima urcare a călătorilor şi un ultim tur în care doar coboară călători şi nu urcă nimeni. Se cere numărul de curse complete realizate şi suma încasată pentru cursele realizate.&lt;br /&gt;
&lt;br /&gt;
Determinarea valorilor ce reprezintă suma încasată şi numărul de curse complete realizate.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;turism.in&amp;lt;/code&amp;gt; conține pe prima linie trei numere naturale: &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;(numărul de staţii), &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;(numărul de locuri) şi &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;(numărul de opriri) separate printr-un spaţiu. Pe următoarele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii secvenţe de valori ce reprezintă numărul de călători din stația respectivă şi pentru fiecare călător numărul staţiilor pe care le parcurge dacă are loc în mijlocul de transport, cu un spaţiu între ele.&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul ce reprezintă suma încasată şi numărul de curse realizate, separate prin exact un spațiu.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;0 &amp;lt; n ≤ 200,n ≤ m ≤ 10000, 2 &amp;lt; k ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;0 &amp;lt;&amp;lt;/code&amp;gt; numărul de staţii parcurse de un călător &amp;lt;code&amp;gt;≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*&amp;lt;code&amp;gt;autobuzul opreşte în fiecare staţie&amp;lt;/code&amp;gt;&lt;br /&gt;
*&amp;lt;code&amp;gt;în fiecare staţie sunt cel mult k călători&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:10 8 16&lt;br /&gt;
:9 4 2 6 8 1 1 1 3 2&lt;br /&gt;
:2 1 3&lt;br /&gt;
:2 1 1&lt;br /&gt;
:2 1 2&lt;br /&gt;
:2 10 7&lt;br /&gt;
:2 10 1&lt;br /&gt;
:2 2 2&lt;br /&gt;
:2 2 2&lt;br /&gt;
:2 2 6&lt;br /&gt;
:2 4 1&lt;br /&gt;
:2 4 1&lt;br /&gt;
:4 3 1 1 1&lt;br /&gt;
:3 1 1 1&lt;br /&gt;
:8 5 7 4 10 2 3 2 5&lt;br /&gt;
:4 1 10 1 1&lt;br /&gt;
:4 1 1 1 10&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:138 3&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
În prima staţie urcă primii &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; în autobuz, în a doua coboara &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;(cei &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; care au ales sa parcurga numai &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; staţie) şi urca &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, şi aşa mai departe până se parcurg toate cele &amp;lt;code&amp;gt;16&amp;lt;/code&amp;gt; opriri alea autobuzului. Suma încasată este : &amp;lt;code&amp;gt;138&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:16 8 9 &lt;br /&gt;
:9 4 2 6 8 1 1 20 3 2&lt;br /&gt;
:2 1 3  &lt;br /&gt;
:2 20 1  &lt;br /&gt;
:2 1 2  &lt;br /&gt;
:2 10 7  &lt;br /&gt;
:2 50 1  &lt;br /&gt;
:3 2 2  &lt;br /&gt;
:4 2 2&lt;br /&gt;
:2 2 6&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#0747 Turism&lt;br /&gt;
def conditii(nr_statii, nr_locuri, nr_opriri):&lt;br /&gt;
    restrictii = (&lt;br /&gt;
        0 &amp;lt; nr_statii &amp;lt;= 200,&lt;br /&gt;
        nr_statii &amp;lt;= nr_opriri &amp;lt;= 10_000,&lt;br /&gt;
        2 &amp;lt; nr_locuri &amp;lt;= 100&lt;br /&gt;
    )&lt;br /&gt;
&lt;br /&gt;
    return all(restrictii)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def conditii_calatori(nr_statii, nr_calatori, calatori):&lt;br /&gt;
    if not nr_calatori == len(calatori):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for c in calatori:&lt;br /&gt;
        if not 0 &amp;lt; c &amp;lt;= nr_statii:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    scaune = [0] * 110&lt;br /&gt;
    cost = 0&lt;br /&gt;
&lt;br /&gt;
    nr_statii, nr_locuri, nr_opriri = [int(x) for x in input().split()]&lt;br /&gt;
&lt;br /&gt;
    if not conditii(nr_statii, nr_locuri, nr_opriri):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        for i in range(1, nr_opriri+1):&lt;br /&gt;
            for j in range(1, nr_locuri+1):&lt;br /&gt;
                if scaune[j]:&lt;br /&gt;
                    scaune[j] -= 1&lt;br /&gt;
            poz = 1&lt;br /&gt;
&lt;br /&gt;
            rand_input = [int(x) for x in input().split()]&lt;br /&gt;
            nr_calatori = rand_input[0]&lt;br /&gt;
            calatori = rand_input[1:]&lt;br /&gt;
&lt;br /&gt;
            if not conditii_calatori(nr_statii, nr_calatori, calatori):&lt;br /&gt;
                print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
                exit(0)&lt;br /&gt;
&lt;br /&gt;
            for cal in calatori:&lt;br /&gt;
                while poz &amp;lt;= nr_locuri and scaune[poz]:&lt;br /&gt;
                    poz += 1&lt;br /&gt;
                if poz &amp;lt;= nr_locuri:&lt;br /&gt;
                    scaune[poz] = cal&lt;br /&gt;
                    cost += cal&lt;br /&gt;
&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        maxim = scaune[0]&lt;br /&gt;
        for i in range(1, nr_locuri):&lt;br /&gt;
            if scaune[i] &amp;gt; maxim:&lt;br /&gt;
                maxim = scaune[i]&lt;br /&gt;
&lt;br /&gt;
        rez = (nr_opriri - 1) // nr_statii + 1&lt;br /&gt;
        if maxim:&lt;br /&gt;
            rez += (maxim - nr_opriri % nr_statii - 1) // nr_statii + 1&lt;br /&gt;
&lt;br /&gt;
        print(cost, rez)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1833_-_N_Consecutive&amp;diff=5453</id>
		<title>1833 - N Consecutive</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1833_-_N_Consecutive&amp;diff=5453"/>
		<updated>2023-04-29T14:10:17Z</updated>

		<summary type="html">&lt;p&gt;Ardelean Alexandru: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;==Cerința==&lt;br /&gt;
Într-­o zi frumoasă de vara, Gigel l­a auzit pe fratele mai mare spunând că ştie să scrie numărul &amp;lt;code&amp;gt;600&amp;lt;/code&amp;gt; ca sumă de numere consecutive în &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; moduri distincte. Deoarece Gigel este ambiţios, doreşte să poată să facă şi el astfel de afirmaţii. Mai exact, el îşi doreşte să poată să spună care este cel mai mic număr natural care poate fi descompus ca sumă de două sau mai multe numere naturale consecutive în exact &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; moduri şi care sunt acele moduri.&lt;br /&gt;
&lt;br /&gt;
Să se determine cel mai mic număr natural care respectă condițiile lui Gigel.&lt;br /&gt;
&lt;br /&gt;
==Date de intrare==&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;consecutive.in&amp;lt;/code&amp;gt; conține pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de moduri în care numărul găsit de Gigel să poată fi scris ca suma de numere consecutive&lt;br /&gt;
==Date de ieșire==&lt;br /&gt;
Pe ecran se va afișa mesajul: &amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Pe următorul rând se va afișa numărul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, reprezentând numărul găsit de Gigel, iar pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; rânduri va fi afișat câte un număr, reprezentând lungimea secvenţei.&lt;br /&gt;
&lt;br /&gt;
În cazul în care datele introduse de la tastatură nu îndeplinesc cerințele enunțate, pe ecran se va afișa mesajul &amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Restricții și precizări==&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Se garantează că soluţia e mai mică decât &amp;lt;code&amp;gt;1.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==Exemplu 1==&lt;br /&gt;
;Intrare&lt;br /&gt;
:2&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse.&lt;br /&gt;
:9&lt;br /&gt;
:2&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
===Explicație===&lt;br /&gt;
&amp;lt;code&amp;gt;9 = 4 + 5&amp;lt;/code&amp;gt; (secventa de lungime &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; care incepe de la &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;9 = 2 + 3 + 4&amp;lt;/code&amp;gt; (secventa de lungime &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; care incepe de la &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
==Exemplu 2==&lt;br /&gt;
;Intrare&lt;br /&gt;
:500&lt;br /&gt;
;Ieșire&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
&lt;br /&gt;
==Rezolvare==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
#1833 N Consecutive&lt;br /&gt;
from math import sqrt&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cerinte(nr):&lt;br /&gt;
    return 1 &amp;lt;= nr &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_aritmetic(a, b):&lt;br /&gt;
    return (b * (b + 1)) // 2 - ((a - 1) * a) // 2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def n_consecutive(nr):&lt;br /&gt;
    val_max = 1_000_000&lt;br /&gt;
    sume = [0] * (val_max + 1)&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, val_max):&lt;br /&gt;
        for stanga in range(1, val_max):&lt;br /&gt;
            dreapta = stanga + i - 1&lt;br /&gt;
            if suma_aritmetic(stanga, dreapta) &amp;gt; val_max:&lt;br /&gt;
                break&lt;br /&gt;
            sume[suma_aritmetic(stanga, dreapta)] += 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(3, val_max):&lt;br /&gt;
        if sume[i] == nr:&lt;br /&gt;
            print(i)&lt;br /&gt;
&lt;br /&gt;
            for stanga in range(i // 2, 0, -1):&lt;br /&gt;
                ec_patrata = 1 - 4 * (stanga - stanga * stanga - 2 * i)&lt;br /&gt;
                dreapta = (-1 + sqrt(ec_patrata)) / 2&lt;br /&gt;
                if dreapta == int(dreapta):&lt;br /&gt;
                    print(int(dreapta - stanga + 1))&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    nr = int(input())&lt;br /&gt;
&lt;br /&gt;
    if not cerinte(nr):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        n_consecutive(nr)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ardelean Alexandru</name></author>
	</entry>
</feed>