<?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=Mesarosdenisa</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=Mesarosdenisa"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Mesarosdenisa"/>
	<updated>2026-05-01T04:30:02Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2182_-_3_Cifre&amp;diff=8768</id>
		<title>2182 - 3 Cifre</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2182_-_3_Cifre&amp;diff=8768"/>
		<updated>2024-01-02T15:29:38Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Așa cum știm, lui Gigel îi place să se joace cu numerele. A scris pe caiet un număr, apoi a văzut că din acesta se pot extrage mai multe numere cu trei cifre consecutive. De exemplu, a scris pe caiet &#039;&#039;&#039;20172017&#039;&#039;&#039;; numerele cu trei cifre consecutive care se pot extrage sunt &#039;&#039;&#039;201, 172, 720 și 201&#039;&#039;&#039;. Gigel începe să-și pună diferite întrebări: care este cel mai mare număr cu trei cifre consecutive obținut? Dar cel mai mic? De câte ori apar ele? Unde apar? Care este cel mai mare număr de apariții a unui număr cu trei cifre?&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Fiind numărul un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale &#039;&#039;&#039;x (100 ≤ x ≤ 4294967295)&#039;&#039;&#039; să se determine:&lt;br /&gt;
1. Cel mai mic și cel mai mare număr din trei cifre consecutive care apar în cele &#039;&#039;&#039;n&#039;&#039;&#039; numere, de câte ori apar ele, în ce număr &#039;&#039;&#039;x[1]&#039;&#039;&#039; apar prima dată și în ce număr &#039;&#039;&#039;x[2]&#039;&#039;&#039; apar ultima dată.&lt;br /&gt;
2. Numerele din trei cifre consecutive care apar de cele mai multe ori în cele n numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;3cifrein.txt&#039;&#039;&#039; conţine pe prima linie, separate printr-un spațiu, numărul natural n, reprezentând numărul de numere și cerința (1 sau 2). Pe cea de a doua linie sunt scrise cele n numere naturale &#039;&#039;&#039;x[1] x[2] ... x[n]&#039;&#039;&#039;, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;3cifreout.txt&#039;&#039;&#039; va conține, pentru cerința 1, pe prima linie patru valori naturale &#039;&#039;&#039;nrmin nrapmin x1min x1max&#039;&#039;&#039;, separate prin câte un spațiu, reprezentând numărul minim de trei cifre care apare, numărul de apariții a acestuia, numărul în care apare prima dată, respectiv numărul în care apare ultima dată, iar pe linia a doua alte patru valori naturale &#039;&#039;&#039;nrmax nrapmax x2min x2max&#039;&#039;&#039;, separate prin câte un spațiu, reprezentând numărul maxim de trei cifre care apare, numărul de apariții a acestuia, numărul în care apare prima dată, respectiv numărul în care apare ultima dată. Pentru cerința 2, fișierul de ieșire va conține pe prima linie numărul maxim de apariții a numerelor din trei cifre consecutive care apar, iar pe linia a doua, separate prin câte un spațiu, numerele respective în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 500000&lt;br /&gt;
*100 &amp;amp;les; x[i] &amp;amp;les; 4294967295&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
;3cifrein.txt&lt;br /&gt;
:7 1&lt;br /&gt;
:415 5213 2017 666 12345678 10000013 13&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
;3cifreout.txt&lt;br /&gt;
:100 1 10000013 10000013&lt;br /&gt;
:678 1 12345678 12345678&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
;3cifreint.txt&lt;br /&gt;
:7 1&lt;br /&gt;
:25 521013 206678 666 12345678 10101013 13&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(n, x):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 500000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for numar in x:&lt;br /&gt;
        if not (100 &amp;lt;= numar &amp;lt;= 4294967295):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def trei_cifre_consecutive(n, x, cerinta):&lt;br /&gt;
    aparitii = {}&lt;br /&gt;
    min_nr, max_nr = float(&#039;inf&#039;), 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        numar_str = str(x[i])&lt;br /&gt;
        for j in range(len(numar_str) - 2):&lt;br /&gt;
            cifre_consecutive = int(numar_str[j:j+3])&lt;br /&gt;
&lt;br /&gt;
            if cifre_consecutive not in aparitii:&lt;br /&gt;
                aparitii[cifre_consecutive] = [1, i + 1, i + 1]&lt;br /&gt;
            else:&lt;br /&gt;
                aparitii[cifre_consecutive][0] += 1&lt;br /&gt;
                aparitii[cifre_consecutive][2] = i + 1&lt;br /&gt;
&lt;br /&gt;
            min_nr = min(min_nr, cifre_consecutive)&lt;br /&gt;
            max_nr = max(max_nr, cifre_consecutive)&lt;br /&gt;
&lt;br /&gt;
    if cerinta == 1:&lt;br /&gt;
        nr_ap_min, nrap_min, x1min, x1max = min_nr, aparitii[min_nr][0], aparitii[min_nr][1], aparitii[min_nr][2]&lt;br /&gt;
        nr_ap_max, nrap_max, x2min, x2max = max_nr, aparitii[max_nr][0], aparitii[max_nr][1], aparitii[max_nr][2]&lt;br /&gt;
        return nr_ap_min, nrap_min, x1min, x1max, nr_ap_max, nrap_max, x2min, x2max&lt;br /&gt;
&lt;br /&gt;
    elif cerinta == 2:&lt;br /&gt;
        max_aparitii = max(aparitii.values(), key=lambda x: x[0])[0]&lt;br /&gt;
        numere_max_aparitii = [numar for numar, info in aparitii.items() if info[0] == max_aparitii]&lt;br /&gt;
        numere_max_aparitii.sort()&lt;br /&gt;
        return max_aparitii, numere_max_aparitii&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;3cifrein.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n, cerinta = map(int, file.readline().split())&lt;br /&gt;
        x = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictii(n, x):&lt;br /&gt;
        rezultat = trei_cifre_consecutive(n, x, cerinta)&lt;br /&gt;
&lt;br /&gt;
        with open(&amp;quot;3cifreout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
            if cerinta == 1:&lt;br /&gt;
                file_out.write(f&amp;quot;{rezultat[0]} {rezultat[1]} {rezultat[2]} {rezultat[3]}\n&amp;quot;)&lt;br /&gt;
                file_out.write(f&amp;quot;{rezultat[4]} {rezultat[5]} {rezultat[6]} {rezultat[7]}\n&amp;quot;)&lt;br /&gt;
            elif cerinta == 2:&lt;br /&gt;
                file_out.write(f&amp;quot;{rezultat[0]}\n&amp;quot;)&lt;br /&gt;
                file_out.write(&amp;quot; &amp;quot;.join(map(str, rezultat[1])) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respectă restricțiile specificate.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Se observă că atât 111 cât și 113 apar de câte 3 ori.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1266_-_Cauta_Nr_In_Matrice&amp;diff=8767</id>
		<title>1266 - Cauta Nr In Matrice</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1266_-_Cauta_Nr_In_Matrice&amp;diff=8767"/>
		<updated>2024-01-02T15:27:13Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dă o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii şi &#039;&#039;&#039;m&#039;&#039;&#039; coloane ce conţine numere naturale astfel încât parcurgând matricea pe prima linie de la stânga la dreapta, pe a doua linie de la dreapta la stânga, pe a treia linie de la stânga la drepta, ş.a.m.d., toate elementele matricei vor forma un şir strict crescător. Fiind date &#039;&#039;&#039;p&#039;&#039;&#039; numere naturale ordonate strict crescător, să se afişeze pentru fiecare numărul liniei şi coloanei unde acesta se găseşte în matrice, respectiv &#039;&#039;&#039;0&#039;&#039;&#039; dacă acesta nu se găseşte în matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;cautanrinmatricein.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;m&#039;&#039;&#039; reprezentând dimensiunile matricei , pe următoarele n linii câte m numere aranjate conform enunţului reprezentând elementele matricei, pe următoarea linie numărul p, iar pe ultima linie cele &#039;&#039;&#039;p&#039;&#039;&#039; numere în ordine strict crescătoare ce trebuie căutate în matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;cautanrinmatriceout.txt&#039;&#039;&#039; va conține pe primele &#039;&#039;&#039;p&#039;&#039;&#039; linii numărul liniei şi coloanei pe care se află în matrice fiecare din cele &#039;&#039;&#039;p&#039;&#039;&#039; numere date, respectiv &#039;&#039;&#039;0&#039;&#039;&#039; dacă numărul nu se găseşte în matrice.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n , m &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*elementele matricei sunt numere naturale mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; p &amp;amp;les; 1.000.000&#039;&#039;&#039;&lt;br /&gt;
*cele p numere vor fi mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
;cautanrinmatricein.txt&lt;br /&gt;
: 3 4&lt;br /&gt;
: 2 5 11 14&lt;br /&gt;
: 29 27 23 19&lt;br /&gt;
: 32 38 44 59&lt;br /&gt;
: 3&lt;br /&gt;
: 11 24 38&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
;cautanrinmatriceout.txt&lt;br /&gt;
: 1 3&lt;br /&gt;
: 0&lt;br /&gt;
: 3 2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
;cautanrinmatricein.txt&lt;br /&gt;
: 3 2&lt;br /&gt;
: 5 8&lt;br /&gt;
: 12 19&lt;br /&gt;
: 23 21&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictiile(n, m, p, matrice, numere_cautate):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= m &amp;lt;= 1000 and 1 &amp;lt;= p &amp;lt;= 1000000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for rand in matrice:&lt;br /&gt;
        if len(rand) != m:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    if len(numere_cautate) != p:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if any(not (1 &amp;lt;= num &amp;lt; 2000000000) for rand in matrice for num in rand) or any(not (1 &amp;lt;= num &amp;lt; 2000000000) for num in numere_cautate):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cautare_numere_in_matrice(n, m, matrice, p, numere_cautate):&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    for numar in numere_cautate:&lt;br /&gt;
        gasit = False&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            if i % 2 == 0:&lt;br /&gt;
                for j in range(m):&lt;br /&gt;
                    if matrice[i][j] == numar:&lt;br /&gt;
                        rezultat.append((i + 1, j + 1))&lt;br /&gt;
                        gasit = True&lt;br /&gt;
                        break&lt;br /&gt;
            else:&lt;br /&gt;
                for j in range(m - 1, -1, -1):&lt;br /&gt;
                    if matrice[i][j] == numar:&lt;br /&gt;
                        rezultat.append((i + 1, j + 1))&lt;br /&gt;
                        gasit = True&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
        if not gasit:&lt;br /&gt;
            rezultat.append(0)&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    with open(&amp;quot;cautanrinmatricein.txt&amp;quot;, &amp;quot;r&amp;quot;) as fisier:&lt;br /&gt;
        n, m = map(int, fisier.readline().split())&lt;br /&gt;
        matrice = [list(map(int, fisier.readline().split())) for _ in range(n)]&lt;br /&gt;
        p = int(fisier.readline())&lt;br /&gt;
        numere_cautate = list(map(int, fisier.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    if verifica_restrictiile(n, m, p, matrice, numere_cautate):&lt;br /&gt;
        rezultat = cautare_numere_in_matrice(n, m, matrice, p, numere_cautate)&lt;br /&gt;
&lt;br /&gt;
        with open(&amp;quot;cautanrinmatriceout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fisier_out:&lt;br /&gt;
            for item in rezultat:&lt;br /&gt;
                if isinstance(item, tuple):&lt;br /&gt;
                    fisier_out.write(f&amp;quot;{item[0]} {item[1]}\n&amp;quot;)&lt;br /&gt;
                else:&lt;br /&gt;
                    fisier_out.write(f&amp;quot;{item}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu respectă restricțiile specificate.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Numărul 11 se află în matrice pe linia 1 coloana 3, numărul 24 nu se află în matrice, iar numărul 38 se află în matrice pe linia 3, coloana 2.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3672_-_Calculeaza_pe_n&amp;diff=8681</id>
		<title>3672 - Calculeaza pe n</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3672_-_Calculeaza_pe_n&amp;diff=8681"/>
		<updated>2023-12-29T12:31:39Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se citește de la tastatură număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Pornind de la valoarea &#039;&#039;&#039;1&#039;&#039;&#039;, asupra valorii curente &#039;&#039;&#039;x&#039;&#039;&#039; se pot aplica următoarele trei operații: înmulțire cu &#039;&#039;&#039;2&#039;&#039;&#039;, înmulțire cu &#039;&#039;&#039;3&#039;&#039;&#039; sau adunare cu &#039;&#039;&#039;1&#039;&#039;&#039;. De exemplu, dacă &#039;&#039;&#039;x=1&#039;&#039;&#039; atunci se poate obține &#039;&#039;&#039;2&#039;&#039;&#039; (prin înmulțirea cu 2 sau prin adunarea cu 1) sau &#039;&#039;&#039;3&#039;&#039;&#039; (prin înmulțirea cu 3).&lt;br /&gt;
&lt;br /&gt;
Calculați numărul minim de operații necesare pentru a obține numărul &#039;&#039;&#039;n&#039;&#039;&#039; începând de la numărul &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;k&#039;&#039;&#039;, reprezentând numărul minim de operații pentru obținerea numărului &#039;&#039;&#039;n&#039;&#039;&#039; pornind de la &#039;&#039;&#039;1&#039;&#039;&#039; sau valoarea &#039;&#039;&#039;0&#039;&#039;&#039; dacă nu se poate obține &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 1.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:0&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:0&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def numar_minim_operatii(n):&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (n + 1)&lt;br /&gt;
    dp[1] = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        if i * 2 &amp;lt;= n:&lt;br /&gt;
            dp[i * 2] = min(dp[i * 2], dp[i] + 1)&lt;br /&gt;
        if i * 3 &amp;lt;= n:&lt;br /&gt;
            dp[i * 3] = min(dp[i * 3], dp[i] + 1)&lt;br /&gt;
        if i + 1 &amp;lt;= n:&lt;br /&gt;
            dp[i + 1] = min(dp[i + 1], dp[i] + 1)&lt;br /&gt;
&lt;br /&gt;
    return dp[n] if dp[n] != float(&#039;inf&#039;) else 0&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1000000&lt;br /&gt;
&lt;br /&gt;
# Citire număr de la tastatură&lt;br /&gt;
n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(n):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Calcul și afișare rezultat&lt;br /&gt;
    rezultat = numar_minim_operatii(n)&lt;br /&gt;
    print(f&amp;quot;Numărul minim de operații pentru a obține {n} este: {rezultat}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3244_-_tabla&amp;diff=8680</id>
		<title>3244 - tabla</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3244_-_tabla&amp;diff=8680"/>
		<updated>2023-12-29T12:30:37Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
O tablă de șah de dimensiune &#039;&#039;&#039;n x n&#039;&#039;&#039; conține pe toate pătrățelele câte o piesă cu una din culorile: alb, negru, roșu, verde sau albastru. Pe tablă nu există 3 piese consecutive pe aceeași linie sau coloană de aceeași culoare. O mutare presupune interschimbarea a două piese alăturate, fie pe o linie, fie pe o coloană. După mutare se acordă punctaj dacă se obțin următoarele situații și nu numai:&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;3&#039;&#039;&#039; piese de aceeași culoare consecutive pe o linie sau o coloană &#039;&#039;&#039;= 1&#039;&#039;&#039; punct;&lt;br /&gt;
*&#039;&#039;&#039;3&#039;&#039;&#039; piese de aceeași culoare consecutive pe o linie și o coloană &#039;&#039;&#039;= 5&#039;&#039;&#039; puncte;&lt;br /&gt;
La orice situație de mai sus, o piesă în plus de aceeași culoare mai contribuie cu încă 1 la punctaj. De exemplu, 4 piese de aceeași culoare consecutive pe o linie sau o coloană &#039;&#039;&#039;= 2&#039;&#039;&#039; puncte. Punctajele obținute de piesele interschimbate se adună. Punctajul este 0 dacă nu se obțin măcar 3 piese consecutive de aceeași culoare.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Găsiți cel mai mare punctaj obținut în urma unei singure mutări.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;tablain.txt&#039;&#039;&#039; conține, pe prima linie, numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;, ce reprezintă dimensiunea tablei. Pe fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se află câte &#039;&#039;&#039;n&#039;&#039;&#039; valori separate prin spatii. Valorile posibile pot fi: &#039;&#039;&#039;1, 2, 3, 4 și 5&#039;&#039;&#039;. Valoarea &#039;&#039;&#039;1&#039;&#039;&#039; reprezintă piesa de culoare albă, &#039;&#039;&#039;2&#039;&#039;&#039; piesa de culoare neagră etc.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;tablaout.txt&#039;&#039;&#039; va conține cel mai mare punctaj obținut.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 20&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;tablain.txt&lt;br /&gt;
:3&lt;br /&gt;
:1 1 2&lt;br /&gt;
:2 2 1&lt;br /&gt;
:3 4 5&lt;br /&gt;
&lt;br /&gt;
;tablaout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;tablain.txt&lt;br /&gt;
:3&lt;br /&gt;
:0 0 0&lt;br /&gt;
:-10 23 3&lt;br /&gt;
:1 72 0&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def calculeaza_punctaj(tabla, n, i1, j1, i2, j2):&lt;br /&gt;
    punctaj = 0&lt;br /&gt;
&lt;br /&gt;
    # Verificare pe linii&lt;br /&gt;
    if i1 &amp;lt; n - 2 and tabla[i1][j1] == tabla[i1 + 1][j1] == tabla[i1 + 2][j1]:&lt;br /&gt;
        punctaj += 1&lt;br /&gt;
    if i2 &amp;lt; n - 2 and tabla[i2][j2] == tabla[i2 + 1][j2] == tabla[i2 + 2][j2]:&lt;br /&gt;
        punctaj += 1&lt;br /&gt;
&lt;br /&gt;
    # Verificare pe coloane&lt;br /&gt;
    if j1 &amp;lt; n - 2 and tabla[i1][j1] == tabla[i1][j1 + 1] == tabla[i1][j1 + 2]:&lt;br /&gt;
        punctaj += 1&lt;br /&gt;
    if j2 &amp;lt; n - 2 and tabla[i2][j2] == tabla[i2][j2 + 1] == tabla[i2][j2 + 2]:&lt;br /&gt;
        punctaj += 1&lt;br /&gt;
&lt;br /&gt;
    # Verificare pe diagonale&lt;br /&gt;
    if i1 &amp;lt; n - 2 and j1 &amp;lt; n - 2 and tabla[i1][j1] == tabla[i1 + 1][j1 + 1] == tabla[i1 + 2][j1 + 2]:&lt;br /&gt;
        punctaj += 1&lt;br /&gt;
    if i2 &amp;lt; n - 2 and j2 &amp;lt; n - 2 and tabla[i2][j2] == tabla[i2 + 1][j2 + 1] == tabla[i2 + 2][j2 + 2]:&lt;br /&gt;
        punctaj += 1&lt;br /&gt;
&lt;br /&gt;
    return punctaj&lt;br /&gt;
&lt;br /&gt;
def cel_mai_mare_punctaj(tabla, n):&lt;br /&gt;
    max_punctaj = 0&lt;br /&gt;
&lt;br /&gt;
    for i1 in range(n):&lt;br /&gt;
        for j1 in range(n):&lt;br /&gt;
            for i2 in range(i1, n):&lt;br /&gt;
                for j2 in range(n):&lt;br /&gt;
                    # Pentru fiecare pereche de piese alaturate, calculam punctajul&lt;br /&gt;
                    if (i1 != i2 or abs(j1 - j2) != 1) and (j1 != j2 or abs(i1 - i2) != 1):&lt;br /&gt;
                        tabla[i1][j1], tabla[i2][j2] = tabla[i2][j2], tabla[i1][j1]&lt;br /&gt;
                        punctaj = calculeaza_punctaj(tabla, n, i1, j1, i2, j2)&lt;br /&gt;
                        max_punctaj = max(max_punctaj, punctaj)&lt;br /&gt;
                        tabla[i1][j1], tabla[i2][j2] = tabla[i2][j2], tabla[i1][j1]  # revenire la starea initiala&lt;br /&gt;
&lt;br /&gt;
    return max_punctaj&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(n, tabla):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 20):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if len(tabla[i]) != n or not all(1 &amp;lt;= tabla[i][j] &amp;lt;= 5 for j in range(n)):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;tablain.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    n = int(file.readline())&lt;br /&gt;
    tabla = [list(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(n, tabla):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Calcul si afisare rezultat&lt;br /&gt;
    rezultat = cel_mai_mare_punctaj(tabla, n)&lt;br /&gt;
    with open(&amp;quot;tablaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Prin interschimbarea elementului (1,3) cu (2,3) se obține:&lt;br /&gt;
:1 1 1&lt;br /&gt;
:2 2 2&lt;br /&gt;
:3 4 5&lt;br /&gt;
și am 1 punct din prima linie și 1 punct din a doua linie.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2629_-_H3&amp;diff=8679</id>
		<title>2629 - H3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2629_-_H3&amp;diff=8679"/>
		<updated>2023-12-29T12:29:06Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Tocmai ai primit cadou de ziua ta un șir de numere naturale &#039;&#039;&#039;a[1], a[2], …, a[n]&#039;&#039;&#039;. Ca să te simți împlinit, trebuie să determini lungimea maximă a unei secvențe cu proprietatea că oricare două valori din secvență sunt distincte.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Determină lungimea maximă cerută și anul viitor vei mai primi un șir!&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, apoi șirul de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran lungimea maximă a secvenței de valori distincte.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 1.000.000&lt;br /&gt;
*0 &amp;amp;les; a[i] &amp;amp;les; 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:9&lt;br /&gt;
:1 2 1 2 5 6 7 2 9&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:5&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5&lt;br /&gt;
:-10 0 5.2 8 3&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def lungime_maxima_secventa_distincte(n, vector):&lt;br /&gt;
    frecvente = dict()&lt;br /&gt;
    stanga = 0&lt;br /&gt;
    lungime_maxima = 0&lt;br /&gt;
&lt;br /&gt;
    for dreapta in range(n):&lt;br /&gt;
        numar = vector[dreapta]&lt;br /&gt;
&lt;br /&gt;
        while frecvente.get(numar, 0) &amp;gt; 0:&lt;br /&gt;
            frecvente[vector[stanga]] -= 1&lt;br /&gt;
            stanga += 1&lt;br /&gt;
&lt;br /&gt;
        frecvente[numar] = 1&lt;br /&gt;
        lungime_maxima = max(lungime_maxima, dreapta - stanga + 1)&lt;br /&gt;
&lt;br /&gt;
    return lungime_maxima&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(n, vector):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000000) or len(vector) != n or not all(0 &amp;lt;= numar &amp;lt;= 1000000000 for numar in vector):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citire numar de elemente&lt;br /&gt;
n = int(input(&amp;quot;Introduceți numărul de elemente: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Citire vector&lt;br /&gt;
vector = list(map(int, input(&amp;quot;Introduceți elementele vectorului, separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(n, vector):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Calcul și afișare rezultat&lt;br /&gt;
    rezultat = lungime_maxima_secventa_distincte(n, vector)&lt;br /&gt;
    print(f&amp;quot;Lungimea maximă a secvenței de valori distincte este: {rezultat}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Secvența de lungime maximă 5 este 1 2 5 6 7.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2627_-_H1&amp;diff=8678</id>
		<title>2627 - H1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2627_-_H1&amp;diff=8678"/>
		<updated>2023-12-29T12:27:49Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Se dau două șiruri de numere naturale &#039;&#039;&#039;a[1], a[2], …, a[n]&#039;&#039;&#039; și &#039;&#039;&#039;b[1], b[2], …, b[m]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Să se determine câte numere distincte au în comun cele două șiruri. De exemplu, șirurile &#039;&#039;&#039;a=(2,5,1,4,5,1)&#039;&#039;&#039; și &#039;&#039;&#039;b=(1,1,1,3,7,5)&#039;&#039;&#039; au în comun două numere distincte: 1 și 5.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numere naturale &#039;&#039;&#039;A, B, C, D, n, x, m, y&#039;&#039;&#039;. Cele două șiruri se generează astfel:&lt;br /&gt;
&lt;br /&gt;
*a[1] = x și, pentru i ≥ 2, a[i] = A + (a[i-1] * C + D) % (B - A + 1)&lt;br /&gt;
*b[1] = y și, pentru i ≥ 2, b[i] = A + (b[i-1] * C + D) % (B - A + 1)&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;C&#039;&#039;&#039;, reprezentând câte numere distincte au în comun cele două șiruri.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*2 &amp;amp;les; n, m &amp;amp;les; 2 000 000&lt;br /&gt;
*2 &amp;amp;les; A, B, C, D, x, y &amp;amp;les; 10 000 000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1 30 17 16 50 2 60 14&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:4&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6.2 8 -11 2.2  0 -2.2 8 10&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def generate_sequence(A, B, C, D, x, n):&lt;br /&gt;
    sequence = [x]&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        next_element = (A + (sequence[i - 1] * C + D)) % (B - A + 1)&lt;br /&gt;
        sequence.append(next_element)&lt;br /&gt;
    return sequence&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(A, B, C, D, x, n, m, y):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 2000000) or not (2 &amp;lt;= m &amp;lt;= 2000000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= A &amp;lt;= 10000000) or not (2 &amp;lt;= B &amp;lt;= 10000000) or not (2 &amp;lt;= C &amp;lt;= 10000000) or not (2 &amp;lt;= D &amp;lt;= 10000000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= x &amp;lt;= 10000000) or not (2 &amp;lt;= y &amp;lt;= 10000000):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
A, B, C, D, n, x, m, y = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(A, B, C, D, x, n, m, y):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Generare șiruri&lt;br /&gt;
    sequence_a = generate_sequence(A, B, C, D, x, n)&lt;br /&gt;
    sequence_b = generate_sequence(A, B, C, D, y, m)&lt;br /&gt;
&lt;br /&gt;
    # Identificare numere comune&lt;br /&gt;
    set_a = set(sequence_a)&lt;br /&gt;
    set_b = set(sequence_b)&lt;br /&gt;
    common_numbers = set_a.intersection(set_b)&lt;br /&gt;
&lt;br /&gt;
    # Afișare rezultat&lt;br /&gt;
    print(len(common_numbers))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3587_-_Duplicat&amp;diff=8677</id>
		<title>3587 - Duplicat</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3587_-_Duplicat&amp;diff=8677"/>
		<updated>2023-12-29T12:26:49Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau un număr &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;n+1&#039;&#039;&#039; numere naturale cuprinse între 1 și n inclusiv.&lt;br /&gt;
Cerința 1: Pentru un număr &#039;&#039;&#039;k&#039;&#039;&#039; citit, să se afișeze al &#039;&#039;&#039;k&#039;&#039;&#039;-lea termen al șirului citit anterior.&lt;br /&gt;
Cerința 2: Știind că dintre cele &#039;&#039;&#039;n+1&#039;&#039;&#039; numere citite, un singur număr se poate repeta, se cere să se afișeze acest număr.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039; pe prima linie, iar apoi, pe a doua linie &#039;&#039;&#039;n+1&#039;&#039;&#039; numere naturale, separate prin spații. Pe a treia linie se va afla numărul &#039;&#039;&#039;k&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran pe prima linie răspunsul pentru cerința 1, iar pe a doua linie răspunsul pentru cerința 2.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 470000&lt;br /&gt;
*Pentru cerința 2, un singur număr se poate repeta de mai multe ori&lt;br /&gt;
*Atenție la limita de timp și de memorie !!!&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5&lt;br /&gt;
:1 2 3 3 4 5&lt;br /&gt;
:2&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:2&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-5&lt;br /&gt;
:1 5 0 2 2 2.6&lt;br /&gt;
:4&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def cerinta_1_si_2(n, numere, k):&lt;br /&gt;
    aparitii = [0] * (n + 1)&lt;br /&gt;
&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        aparitii[numar] += 1&lt;br /&gt;
&lt;br /&gt;
    frecventa_maxima = max(aparitii)&lt;br /&gt;
    numar_repetat = aparitii.index(frecventa_maxima)&lt;br /&gt;
&lt;br /&gt;
    count = 0&lt;br /&gt;
    for numar in numere:&lt;br /&gt;
        if numar == numar_repetat:&lt;br /&gt;
            count += 1&lt;br /&gt;
            if count == 2:&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
    index_k = numere[k - 1]&lt;br /&gt;
    return index_k, numar_repetat&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(n, numere, k):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 470000) or len(numere) != n + 1 or not all(1 &amp;lt;= numar &amp;lt;= n for numar in numere) or not (1 &amp;lt;= k &amp;lt;= n + 1):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire numar de elemente&lt;br /&gt;
n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Citire vector de n+1 numere&lt;br /&gt;
numere = list(map(int, input(&amp;quot;Introduceți n+1 numere, separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
# Citire numar k&lt;br /&gt;
k = int(input(&amp;quot;Introduceți numărul k: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(n, numere, k):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Calcul și afișare rezultat&lt;br /&gt;
    rezultat_cerinta_1, rezultat_cerinta_2 = cerinta_1_si_2(n, numere, k)&lt;br /&gt;
    print(f&amp;quot;Răspuns pentru cerința 1: {rezultat_cerinta_1}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Răspuns pentru cerința 2: {rezultat_cerinta_2}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Al doilea numar din șir este 2, iar numărul 3 se repeta.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3523_-_John&amp;diff=8676</id>
		<title>3523 - John</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3523_-_John&amp;diff=8676"/>
		<updated>2023-12-29T12:25:36Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Un canadian deține o firmă cu &#039;&#039;&#039;n&#039;&#039;&#039; muncitori. Fiecare din aceștia lucrează la &#039;&#039;&#039;m&#039;&#039;&#039; case, codificate prin numere naturale. Canadianul dorește să afle:&lt;br /&gt;
&lt;br /&gt;
:1) numărul maxim de muncitori care lucrează la aceeași casă&lt;br /&gt;
:2) numărul maxim de case la care lucreaza simultan cel putin doi muncitori&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n, m&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n * m&#039;&#039;&#039; numere naturale. Primele &#039;&#039;&#039;m&#039;&#039;&#039; numere reprezintă indicii caselor la care lucrează muncitorul 1, următoarele &#039;&#039;&#039;m&#039;&#039;&#039; numere reprezintă indicii caselor la care lucrează muncitorul 2, …, ultimele m numere reprezintă indicii caselor la care lucrează muncitorul n.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran raspunsurile la cele două cerințe.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;n, m&#039;&#039;&#039;, numărul de case la care se lucrează sunt mai mici decât &#039;&#039;&#039;1.001&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;n * m&#039;&#039;&#039; numere citite vor fi mai mici decât &#039;&#039;&#039;1.000.000.001&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 3&lt;br /&gt;
:1 2 3&lt;br /&gt;
:2 3 4&lt;br /&gt;
:3 4 5&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:3&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 3&lt;br /&gt;
:5.2 100 7.9&lt;br /&gt;
:0 2 17&lt;br /&gt;
:-3 9 10.7&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def max_muncitori_pe_o_casa(numar_muncitori, indici_case):&lt;br /&gt;
    frecventa_case = {}&lt;br /&gt;
    for indice_casa in indici_case:&lt;br /&gt;
        if indice_casa not in frecventa_case:&lt;br /&gt;
            frecventa_case[indice_casa] = 0&lt;br /&gt;
        frecventa_case[indice_casa] += 1&lt;br /&gt;
&lt;br /&gt;
    return max(frecventa_case.values())&lt;br /&gt;
&lt;br /&gt;
def max_case_cu_muncitori(n, m, indici_case_muncitori):&lt;br /&gt;
    frecventa_case = {}&lt;br /&gt;
    for indici_case in indici_case_muncitori:&lt;br /&gt;
        for indice_casa in indici_case:&lt;br /&gt;
            if indice_casa not in frecventa_case:&lt;br /&gt;
                frecventa_case[indice_casa] = 0&lt;br /&gt;
            frecventa_case[indice_casa] += 1&lt;br /&gt;
&lt;br /&gt;
    numar_maxim_case = 0&lt;br /&gt;
    for frecventa in frecventa_case.values():&lt;br /&gt;
        if frecventa &amp;gt;= 2:&lt;br /&gt;
            numar_maxim_case += 1&lt;br /&gt;
&lt;br /&gt;
    return numar_maxim_case&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(n, m, indici_case_muncitori):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000) or not (1 &amp;lt;= m &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
    for indici_case in indici_case_muncitori:&lt;br /&gt;
        if len(indici_case) != m or not all(1 &amp;lt;= indice &amp;lt;= 1000000000 for indice in indici_case):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
n = int(input(&amp;quot;Introduceți numărul de muncitori (n): &amp;quot;))&lt;br /&gt;
m = int(input(&amp;quot;Introduceți numărul de case (m): &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
indici_case_muncitori = []&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    indici_casa_muncitor = list(map(int, input(f&amp;quot;Introduceți indicii caselor pentru muncitorul {i + 1}, separați prin spațiu: &amp;quot;).split()))&lt;br /&gt;
    indici_case_muncitori.append(indici_casa_muncitor)&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(n, m, indici_case_muncitori):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Calcul și afișare rezultate&lt;br /&gt;
    max_muncitori_pe_o_casa_result = max_muncitori_pe_o_casa(n, indici_case_muncitori[0])&lt;br /&gt;
    max_case_cu_muncitori_result = max_case_cu_muncitori(n, m, indici_case_muncitori)&lt;br /&gt;
&lt;br /&gt;
    print(f&amp;quot;Numărul maxim de muncitori care lucrează la aceeași casă este: {max_muncitori_pe_o_casa_result}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Numărul maxim de case la care lucrează simultan cel puțin doi muncitori este: {max_case_cu_muncitori_result}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Toți cei 3 muncitori lucrează la casa 3. Intersecția dintre oricare 2 muncitori este mai mică sau egală cu 2.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3795_-_Paranteze4&amp;diff=8675</id>
		<title>3795 - Paranteze4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3795_-_Paranteze4&amp;diff=8675"/>
		<updated>2023-12-29T12:23:30Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Să se scrie un program care citește un șir de paranteze rotunde care se închid corect (corect parantezat) în care parantezele deschise sunt numerotate de la stânga la dreapta, începând de la 1, și determină pentru fiecare paranteză închisă numărul de ordine al parantezei deschise corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
Un șir de paranteze rodunde &#039;&#039;&#039;S&#039;&#039;&#039; este corect parantezat dacă:&lt;br /&gt;
&lt;br /&gt;
*S este șirul vid, sau&lt;br /&gt;
*S = (T) și T este corect parantezat, sau&lt;br /&gt;
*S = AB, iar A și B sunt corect parantezate.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură șir de paranteze rotunde, corect parantezat.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran, pentru fiecare paranteză închisă, poziția în șir a parantezei deschise corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*șirul citit va conține cel mult &#039;&#039;&#039;254&#039;&#039;&#039; de caractere, numai ( și );&lt;br /&gt;
*în șirul dat caracterele sunt numerotate de la 1.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:()((()())())&lt;br /&gt;
;Iesire&lt;br /&gt;
Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 4 5 3 6 2 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:( ) b a / .&lt;br /&gt;
;Iesire&lt;br /&gt;
Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def paranteze_corecte(sir):&lt;br /&gt;
    stiva = []&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    for i, paranteza in enumerate(sir):&lt;br /&gt;
        if paranteza == &#039;(&#039;:&lt;br /&gt;
            stiva.append(i + 1)&lt;br /&gt;
        elif paranteza == &#039;)&#039;:&lt;br /&gt;
            if stiva:&lt;br /&gt;
                deschisa = stiva.pop()&lt;br /&gt;
                rezultat.append((deschisa, i + 1))&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Parantezele nu sunt corect parantezate.&amp;quot;)&lt;br /&gt;
                return None&lt;br /&gt;
&lt;br /&gt;
    if stiva:&lt;br /&gt;
        print(&amp;quot;Parantezele nu sunt corect parantezate.&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(sir):&lt;br /&gt;
    return all(caracter in &#039;()&#039; for caracter in sir) and len(sir) &amp;lt;= 254&lt;br /&gt;
&lt;br /&gt;
# Citire șir de paranteze rotunde&lt;br /&gt;
sir_paranteze = input(&amp;quot;Introduceți șirul de paranteze rotunde: &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(sir_paranteze):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Calcul și afișare rezultate&lt;br /&gt;
    rezultate = paranteze_corecte(sir_paranteze)&lt;br /&gt;
    if rezultate:&lt;br /&gt;
        for deschisa, inchisa in rezultate:&lt;br /&gt;
            print(f&amp;quot;Paranteza deschisa la pozitia {deschisa} se inchide la pozitia {inchisa}.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
1   2 3 4   5     6&lt;br /&gt;
( ) ( ( ( ) ( ) ) ( ) )&lt;br /&gt;
  1       4   5 3   6 2&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2880_-_Gradinita&amp;diff=8674</id>
		<title>2880 - Gradinita</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2880_-_Gradinita&amp;diff=8674"/>
		<updated>2023-12-29T12:20:35Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
La grădinița Prichindel sunt copii cuminți și copii obraznici. Moș Crăciun a adus cadouri doar pentru câțiva copii cuminți. Problema este că nu se știe exact care copil e obraznic și care este cuminte. Ajutați-o pe doamna educatoare să afle care copil primește cadou și care nu. Se cunoaște faptul că la grădiniță sunt exact &#039;&#039;&#039;n&#039;&#039;&#039; copii și fiecare copil are inscripționat pe uniformă un număr natural nenul, distinct.&lt;br /&gt;
&lt;br /&gt;
În prima etapă, sunt scoși din lista Moșului copiii obraznici care sunt cei ce au inscripționate pe uniformă numere prime. În a două etapă, din copiii rămași, sunt scoși și cei care au suma cifrelor de pe pozițiile impare egală cu un număr prim (cifrele se numerotează de la stânga la dreapta, începând cu poziția 1, corespunzătoare cifrei cea mai semnificative).&lt;br /&gt;
&lt;br /&gt;
În a treia etapă (ultima), se  elimină din lista copiilor cuminți rămași după primele două etape, din &#039;&#039;&#039;k în k&#039;&#039;&#039; până când se ajunge la capătul listei.&lt;br /&gt;
&lt;br /&gt;
Să se determine copiii care au rămas pe lista copiilor cuminți după toate cele trei etape eliminatorii, sau mesajul Toti copiii sunt obraznici!, dacă toți copiii au fost eliminați.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Pe prima linie a fișierului de intrare &#039;&#039;&#039;gradinitain.txt&#039;&#039;&#039; se află două numere &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039; cu semnificația din enunț.  Pe a două linie a fișierului de intrare se află n numere naturale, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;gradinitaout.txt&#039;&#039;&#039; se va afișa lista după a treia etapă eliminatorie conform valorii cerinței.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; x &amp;amp;les; 100000&#039;&#039;&#039; (unde x reprezintă numărul inscripționat pe uniforma unui copil)&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;gradinitain.txt&lt;br /&gt;
:9 4&lt;br /&gt;
:3 102 31 333 46 1022 10 4848 21 &lt;br /&gt;
&lt;br /&gt;
;gradinitaout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:333 46 10  &lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;gradinitain.txt&lt;br /&gt;
:-5 7&lt;br /&gt;
:5 309 -57 982 4&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar**0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def suma_cifre(numar):&lt;br /&gt;
    return sum(int(cifra) for cifra in str(numar))&lt;br /&gt;
&lt;br /&gt;
def verificare_date_intrare(n, k, copii):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100000) or not (1 &amp;lt;= k &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    for copil in copii:&lt;br /&gt;
        if not (1 &amp;lt;= copil &amp;lt;= 100000):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire din fișierul de intrare&lt;br /&gt;
with open(&#039;gradinitain.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    n, k = map(int, file.readline().split())&lt;br /&gt;
    copii = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Verificare date de intrare&lt;br /&gt;
if not verificare_date_intrare(n, k, copii):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Etapa 1: Eliminare copii obraznici cu numere prime&lt;br /&gt;
    copii = [copil for copil in copii if not este_prim(copil)]&lt;br /&gt;
&lt;br /&gt;
    # Etapa 2: Eliminare copii obraznici cu suma cifrelor de pe poziții impare primă&lt;br /&gt;
    copii = [copil for copil in copii if not este_prim(suma_cifre(copil))]&lt;br /&gt;
&lt;br /&gt;
    # Etapa 3: Eliminare copii cuminți din k în k&lt;br /&gt;
    if copii:&lt;br /&gt;
        copii = copii[k-1::k]&lt;br /&gt;
&lt;br /&gt;
    # Scriere în fișierul de ieșire&lt;br /&gt;
    with open(&#039;gradinitaout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
        if copii:&lt;br /&gt;
            file.write(&#039; &#039;.join(map(str, copii)))&lt;br /&gt;
        else:&lt;br /&gt;
            file.write(&#039;Toti copiii sunt obraznici!&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0184_-_Interval_1&amp;diff=8673</id>
		<title>0184 - Interval 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0184_-_Interval_1&amp;diff=8673"/>
		<updated>2023-12-29T12:19:13Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dă un şir de &#039;&#039;&#039;n&#039;&#039;&#039;&#039; numere întregi şi un număr &#039;&#039;&#039;k&#039;&#039;&#039;. Să se determine intervalul &#039;&#039;&#039;[a,b]&#039;&#039;&#039; de lungime minimă care conţine cel puţin &#039;&#039;&#039;k&#039;&#039;&#039; elemente din sir.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;interval1i.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;k&#039;&#039;&#039;, iar pe următoarele linii &#039;&#039;&#039;n&#039;&#039;&#039; numere întregi separate prin spaţii, reprezentând elementele şirului.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;interval1out.txt&#039;&#039;&#039; va conţine pe prima linie două numere &#039;&#039;&#039;a&#039;&#039;&#039; şi &#039;&#039;&#039;b&#039;&#039;&#039;, separate printr-un spaţiu, cu semnificaţia de mai sus.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; k &amp;amp;les; n &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*elementele şirului aparţin intervalului [-1000,1000] şi pot fi dispuse în fişierul de intrare pe mai multe linii&lt;br /&gt;
*dacă există mai multe intervale [a,b] de lungime minimă care conţin cel puţin k elemente din sir se va alege acela pentru care a este minim&lt;br /&gt;
*&#039;&#039;&#039;a ≤ b&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;interval1in.txt&lt;br /&gt;
:10 3&lt;br /&gt;
:11 9 3 2 8 11 9 10 15 13 &lt;br /&gt;
;interval1out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:8 9&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;interval1in.txt&lt;br /&gt;
:4 2&lt;br /&gt;
:20,5,100,75.2&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def gaseste_interval(n, k, sir):&lt;br /&gt;
    index_start = 0&lt;br /&gt;
    index_end = k - 1&lt;br /&gt;
    sir.sort()&lt;br /&gt;
&lt;br /&gt;
    lungime_minima = sir[index_end] - sir[index_start]&lt;br /&gt;
    interval_minim = (sir[index_start], sir[index_end])&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n - k + 1):&lt;br /&gt;
        lungime_curenta = sir[i + k - 1] - sir[i]&lt;br /&gt;
        if lungime_curenta &amp;lt; lungime_minima:&lt;br /&gt;
            lungime_minima = lungime_curenta&lt;br /&gt;
            index_start = i&lt;br /&gt;
            index_end = i + k - 1&lt;br /&gt;
            interval_minim = (sir[index_start], sir[index_end])&lt;br /&gt;
&lt;br /&gt;
    return interval_minim&lt;br /&gt;
&lt;br /&gt;
# Citire din fișierul de intrare&lt;br /&gt;
with open(&#039;interval1i.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    n, k = map(int, file.readline().split())&lt;br /&gt;
    sir = []&lt;br /&gt;
    for _ in range(n):&lt;br /&gt;
        sir.extend(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Apelare funcție&lt;br /&gt;
rezultat = gaseste_interval(n, k, sir)&lt;br /&gt;
&lt;br /&gt;
# Scriere în fișierul de ieșire&lt;br /&gt;
with open(&#039;interval1out.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
    file.write(f&amp;quot;{rezultat[0]} {rezultat[1]}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Verificare restrictii&lt;br /&gt;
assert 1 &amp;lt;= k &amp;lt;= n &amp;lt;= 1000&lt;br /&gt;
assert all(-1000 &amp;lt;= x &amp;lt;= 1000 for x in sir)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Intervalul [8,9] conţine 3 elemente ale şirului – 8 9 9 şi are lungimea minimă. Există încă un interval cu aceeaşi lungime care conţine 3 elemente din şir – [9,10] elemente dar 8&amp;lt;9.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0263_-_Intervale_2&amp;diff=8672</id>
		<title>0263 - Intervale 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0263_-_Intervale_2&amp;diff=8672"/>
		<updated>2023-12-29T12:18:08Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; intervale &#039;&#039;&#039;[a,b]&#039;&#039;&#039;, unde a şi b sunt numere întregi. Să se determine intervalul rezultat prin intersectarea intervalelor date.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;intervale2in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte două numere întregi, separate prin spaţii, reprezentând capetele unui interval.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;intervale2out.txt&#039;&#039;&#039; va conţine pe prima linie cele două numere care reprezintă intervalul intersecție, separate printr-un spațiu, sau valoarea 0, dacă intersecția celor n intervale este mulțimea vidă.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 100&lt;br /&gt;
*pentru fiecare interval dat [a,b], -100 &amp;amp;les; a , b &amp;amp;les; 100&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;intervale2in.txt&lt;br /&gt;
:5&lt;br /&gt;
:-7 10&lt;br /&gt;
:3 20&lt;br /&gt;
:-5 5&lt;br /&gt;
:0 12&lt;br /&gt;
:-8 30&lt;br /&gt;
;intervale2out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:3 5&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;intervale2in.txt&lt;br /&gt;
:3&lt;br /&gt;
:-2.5 1&lt;br /&gt;
:100 0&lt;br /&gt;
:6.3 17,2&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def intersectare_intervale(intervale):&lt;br /&gt;
    # Sortează intervalele după capătul stâng&lt;br /&gt;
    intervale.sort(key=lambda x: x[0])&lt;br /&gt;
    &lt;br /&gt;
    # Inițializare intersecție cu primul interval&lt;br /&gt;
    intersecție = intervale[0]&lt;br /&gt;
&lt;br /&gt;
    # Verificare intersecție cu celelalte intervale&lt;br /&gt;
    for interval in intervale[1:]:&lt;br /&gt;
        if interval[0] &amp;lt;= intersecție[1]:&lt;br /&gt;
            # Există intersecție între intervale&lt;br /&gt;
            intersecție = [max(interval[0], intersecție[0]), min(interval[1], intersecție[1])]&lt;br /&gt;
        else:&lt;br /&gt;
            # Nu există intersecție&lt;br /&gt;
            return [0, 0]&lt;br /&gt;
&lt;br /&gt;
    return intersecție&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor din fișierul de intrare&lt;br /&gt;
with open(&amp;quot;intervale2in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
    intervale = [list(map(int, f.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Calculul intervalului de intersecție&lt;br /&gt;
rezultat = intersectare_intervale(intervale)&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;intervale2out.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    g.write(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
&lt;br /&gt;
# Verificare restrictii&lt;br /&gt;
assert 1 &amp;lt;= n &amp;lt;= 100&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    a, b = intervale[i]&lt;br /&gt;
    assert -100 &amp;lt;= a &amp;lt;= 100&lt;br /&gt;
    assert -100 &amp;lt;= b &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0262_-_Intervale_1&amp;diff=8671</id>
		<title>0262 - Intervale 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0262_-_Intervale_1&amp;diff=8671"/>
		<updated>2023-12-29T12:16:56Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dă un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere reale, în ordine strict crescătoare. Să se determine un număr natural &#039;&#039;&#039;x&#039;&#039;&#039;, cu proprietatea că în orice interval deschis având drept capete oricare două valori din șir se află cel puțin &#039;&#039;&#039;x&#039;&#039;&#039; numere întregi.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;intervale1in.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;; urmează n numere reale, în ordine strict crescătoare, separate prin spaţii, reprezentând elementele şirului, ce pot fi dispuse pe mai multe linii.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;intervale1out.txt&#039;&#039;&#039; va conţine pe prima linie numărul &#039;&#039;&#039;x&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 100.000&lt;br /&gt;
*numerele reale din fișierul de intrare au valoarea absolută mai mică decât &#039;&#039;&#039;100.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;intervale1in.txt&lt;br /&gt;
:6&lt;br /&gt;
:3.5 5.1 9.2 16 20.33 100&lt;br /&gt;
;intervale1out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;intervale1in.out&lt;br /&gt;
:6&lt;br /&gt;
:100 20.33 16 9.2 5.1 3.5&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def gaseste_x(șir):&lt;br /&gt;
    # Inițializare x cu o valoare mare&lt;br /&gt;
    x = float(&amp;quot;inf&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Parcurgere șir și actualizare x&lt;br /&gt;
    for i in range(1, len(șir)):&lt;br /&gt;
        distanța = int(șir[i] - șir[i-1])&lt;br /&gt;
        x = min(x, distanța)&lt;br /&gt;
&lt;br /&gt;
    return x + 1  # x este minimul număr natural care îndeplinește condiția&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor din fișierul de intrare&lt;br /&gt;
with open(&amp;quot;intervale1in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
    șir = [float(f.readline()) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Calculul valorii x&lt;br /&gt;
rezultat = gaseste_x(șir)&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;intervale1out.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    g.write(str(rezultat))&lt;br /&gt;
&lt;br /&gt;
# Verificare restrictii&lt;br /&gt;
assert 1 &amp;lt;= n &amp;lt;= 100000&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    assert abs(șir[i]) &amp;lt; 100000000&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0949_-_Calendar_3&amp;diff=8670</id>
		<title>0949 - Calendar 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0949_-_Calendar_3&amp;diff=8670"/>
		<updated>2023-12-29T12:14:55Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Dându-se o dată calendaristică și un număr nr de zile, să se determine care este data aflată la o diferență de nr de zile.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură 3 numere naturale &#039;&#039;&#039;Z, L și A&#039;&#039;&#039;, reprezentând ziua, luna si anul curent, iar pe al doilea rând numărul nr de zile.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran 3 numere naturale &#039;&#039;&#039;ZI, LUNA, AN&#039;&#039;&#039; reprezentând data cerută.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*-100.000 &amp;amp;les; nr &amp;amp;les; 100000&lt;br /&gt;
*Datele calendaristice din fișierul de intrare sunt între 1 ianuarie 1900 și 31 decembrie 2100&lt;br /&gt;
*Nu se vor fi date calendaristice invalide precum 29 februarie 2015 sau 31 noiembrie 1980&lt;br /&gt;
*Dacă nr este negativ, data cerută se afla înaintea cele curente.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6 1 2015&lt;br /&gt;
:15&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:21 1 2015&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:29 2 2015&lt;br /&gt;
:25&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def adauga_zile(Z, L, A, nr_zile):&lt;br /&gt;
    # Functie pentru a adauga un numar de zile la o data calendaristica&lt;br /&gt;
    zile_luna = [0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]&lt;br /&gt;
&lt;br /&gt;
    while nr_zile &amp;gt; 0:&lt;br /&gt;
        zile_luna[2] = 29 if (A % 4 == 0 and A % 100 != 0) or (A % 400 == 0) else 28&lt;br /&gt;
        Z += 1&lt;br /&gt;
&lt;br /&gt;
        if Z &amp;gt; zile_luna[L]:&lt;br /&gt;
            Z = 1&lt;br /&gt;
            L += 1&lt;br /&gt;
&lt;br /&gt;
            if L &amp;gt; 12:&lt;br /&gt;
                L = 1&lt;br /&gt;
                A += 1&lt;br /&gt;
&lt;br /&gt;
        nr_zile -= 1&lt;br /&gt;
&lt;br /&gt;
    return Z, L, A&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(Z, L, A, nr_zile):&lt;br /&gt;
    if (&lt;br /&gt;
        1 &amp;lt;= Z &amp;lt;= 31&lt;br /&gt;
        and 1 &amp;lt;= L &amp;lt;= 12&lt;br /&gt;
        and 1900 &amp;lt;= A &amp;lt;= 2100&lt;br /&gt;
        and -100000 &amp;lt;= nr_zile &amp;lt;= 100000&lt;br /&gt;
    ):&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
Z, L, A = map(int, input().split())&lt;br /&gt;
nr_zile = int(input())&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verifica_restrictii(Z, L, A, nr_zile):&lt;br /&gt;
    # Rezolvare și afișare rezultat&lt;br /&gt;
    zi_noua, luna_noua, an_nou = adauga_zile(Z, L, A, nr_zile)&lt;br /&gt;
    print(&amp;quot;Datele introduse corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;{zi_noua} {luna_noua} {an_nou}&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Date de intrare nevalide!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0948_-_Calendar_2&amp;diff=8669</id>
		<title>0948 - Calendar 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0948_-_Calendar_2&amp;diff=8669"/>
		<updated>2023-12-29T12:12:46Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Fermierului Ion îi place să-și organizeze activitățile din timp. Chiar prea mult. Acesta ajunge să-și facă planuri și pentru câțiva ani. Singura dilemă pe care o are acesta este în ce zi a săptămânii va cădea data pe care își propune să efectueze respectiva activitate.&lt;br /&gt;
&lt;br /&gt;
Preocuparea sa este atât de mare încât se întreabă și de evenimente care au avut loc în trecut.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul o dată calendaristică, formată din 3 numere naturale &#039;&#039;&#039;Z, L și A&#039;&#039;&#039; reprezentând ziua, luna și anul.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran una din zilele săptămânii (Luni, Marti, Miercuri, Joi, Vineri, Sambata, Duminica) semnificând ziua săptămânii corespunzătoare datei cerute.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; Z &amp;amp;les; 31&lt;br /&gt;
*1 &amp;amp;les; L &amp;amp;les; 12&lt;br /&gt;
*1900 &amp;amp;les; A &amp;amp;les; 2100&lt;br /&gt;
*Nu se vor cere zile invalide precum 29 februarie 2015 sau 31 noiembrie 1980&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:6 1 2015&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:Marti&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:31 2 3100&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def ziua_saptamanii(Z, L, A):&lt;br /&gt;
    if L &amp;lt; 3:&lt;br /&gt;
        L += 12&lt;br /&gt;
        A -= 1&lt;br /&gt;
&lt;br /&gt;
    K = A % 100&lt;br /&gt;
    J = A // 100&lt;br /&gt;
&lt;br /&gt;
    numar_zi = (Z + 13 * (L + 1) // 5 + K + K // 4 + J // 4 - 2 * J) % 7&lt;br /&gt;
&lt;br /&gt;
    zile_saptamana = [&amp;quot;Duminica&amp;quot;, &amp;quot;Luni&amp;quot;, &amp;quot;Marti&amp;quot;, &amp;quot;Miercuri&amp;quot;, &amp;quot;Joi&amp;quot;, &amp;quot;Vineri&amp;quot;, &amp;quot;Sambata&amp;quot;]&lt;br /&gt;
    return zile_saptamana[numar_zi]&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(Z, L, A):&lt;br /&gt;
    if 1 &amp;lt;= Z &amp;lt;= 31 and 1 &amp;lt;= L &amp;lt;= 12 and 1900 &amp;lt;= A &amp;lt;= 2100:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
Z, L, A = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verifica_restrictii(Z, L, A):&lt;br /&gt;
    # Rezolvare și afișare rezultat&lt;br /&gt;
    rezultat = ziua_saptamanii(Z, L, A)&lt;br /&gt;
    print(&amp;quot;Datele introduse corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    print(rezultat)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Date de intrare nevalide!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2024_-_Divizor_112&amp;diff=8668</id>
		<title>2024 - Divizor 112</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2024_-_Divizor_112&amp;diff=8668"/>
		<updated>2023-12-29T12:11:45Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dă un şir format din &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Aflaţi cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;divizor112in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;divizor112out.txt&#039;&#039;&#039; va conține pe prima linie cel mai mic număr natural, diferit de 1, care divide un număr maxim de numere din şir.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 100.000&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât 1.000.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;divizor112in.txt&lt;br /&gt;
:5&lt;br /&gt;
:1 2 3 4 5&lt;br /&gt;
&lt;br /&gt;
;divizor112out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;divizor112in.txt&lt;br /&gt;
:-4&lt;br /&gt;
:1000001 64 -89 43580&lt;br /&gt;
;divizor112out.txt&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def get_prime_factors(num):&lt;br /&gt;
    factors = {}&lt;br /&gt;
    divisor = 2&lt;br /&gt;
    while num &amp;gt; 1:&lt;br /&gt;
        while num % divisor == 0:&lt;br /&gt;
            num //= divisor&lt;br /&gt;
            factors[divisor] = factors.get(divisor, 0) + 1&lt;br /&gt;
        divisor += 1&lt;br /&gt;
    return factors&lt;br /&gt;
&lt;br /&gt;
def find_max_divisor(nums):&lt;br /&gt;
    prime_factors_count = {}&lt;br /&gt;
    max_divisor = None&lt;br /&gt;
    max_count = 0&lt;br /&gt;
&lt;br /&gt;
    for num in nums:&lt;br /&gt;
        factors = get_prime_factors(num)&lt;br /&gt;
        for factor, count in factors.items():&lt;br /&gt;
            prime_factors_count[factor] = max(prime_factors_count.get(factor, 0), count)&lt;br /&gt;
&lt;br /&gt;
    for factor, count in prime_factors_count.items():&lt;br /&gt;
        if count &amp;gt; max_count:&lt;br /&gt;
            max_count = count&lt;br /&gt;
            max_divisor = factor&lt;br /&gt;
&lt;br /&gt;
    return max_divisor&lt;br /&gt;
&lt;br /&gt;
def verifica_restrictii(input_file, output_file):&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    with open(input_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline())&lt;br /&gt;
        numbers = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Apelare funcție de rezolvare&lt;br /&gt;
    result = find_max_divisor(numbers)&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 100000 and all(1 &amp;lt;= num &amp;lt; 1000000 for num in numbers):&lt;br /&gt;
        # Citire rezultat așteptat&lt;br /&gt;
        with open(output_file, &amp;quot;r&amp;quot;) as g:&lt;br /&gt;
            result_asteptat = int(g.readline().strip())&lt;br /&gt;
&lt;br /&gt;
        # Verificare rezultat&lt;br /&gt;
        if result == result_asteptat:&lt;br /&gt;
            print(&amp;quot;Rezultat corect!&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Rezultat incorect!&amp;quot;)&lt;br /&gt;
            print(&amp;quot;Rezultat așteptat:&amp;quot;, result_asteptat)&lt;br /&gt;
            print(&amp;quot;Rezultat obținut:&amp;quot;, result)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Date de intrare nevalide!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;divizor112in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
    numbers = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Apelare funcție de rezolvare&lt;br /&gt;
result = find_max_divisor(numbers)&lt;br /&gt;
&lt;br /&gt;
# Scriere date de ieșire&lt;br /&gt;
with open(&amp;quot;divizor112out.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    g.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Apelare funcție de verificare&lt;br /&gt;
verifica_restrictii(&amp;quot;divizor112in.txt&amp;quot;, &amp;quot;divizor112out.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
2 divide două numere din şir.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3513_-_Covoare1&amp;diff=8667</id>
		<title>3513 - Covoare1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3513_-_Covoare1&amp;diff=8667"/>
		<updated>2023-12-29T12:10:27Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se consideră o încăpere de lungime &#039;&#039;&#039;n&#039;&#039;&#039; și lățime &#039;&#039;&#039;m&#039;&#039;&#039; împărțită în &#039;&#039;&#039;n*m&#039;&#039;&#039; zone pătrate, sub forma unei matrici cu n linii și m coloane. Încăperea este acoperită în totalitate cu p covoare dreptunghice de diferite dimensiuni astfel încât acestea nu se suprapun, fiecare zonă pătrată a încăperii fiind acoperită de exact un covor.&lt;br /&gt;
&lt;br /&gt;
Miguel, administratorul clădirii, este responsabil cu spălarea covoarelor. Astfel, el a notat dimensiunile fiecărui covor, în ordine, de sus în jos și de la stânga la dreapta. Covoarele au fost scoase și spălate, iar acum Miguel vrea să le pună la loc.&lt;br /&gt;
Cunoscând dimensiunile încăperii, numărul de covoare precum și dimensiunile fiecărui covor în ordinea in care Miguel le-a notat, să se afișeze coordonatele colțului din stânga sus ale fiecărui covor, în ordinea notată de Miguel, adică in ordine lexicografică.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;covoare1in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n, m, p&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;p&#039;&#039;&#039; linii câte două numere a și b reprezentând lungimea (numărul de linii) și lățimea (numărul de coloane) fiecărui covor în ordinea notată de Miguel.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;covoare1out.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;p&#039;&#039;&#039; linii cu câte două numere ce reprezintă coordonatele colțului din stânga sus ale fiecărui covor, în ordinea notată de Miguel.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n, m  &amp;amp;les; 1.000.000&lt;br /&gt;
*p &amp;amp;les; 200.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;covoare1in.txt&lt;br /&gt;
:7 8 9&lt;br /&gt;
:4 2&lt;br /&gt;
:2 4&lt;br /&gt;
:5 2&lt;br /&gt;
:1 4&lt;br /&gt;
:3 3&lt;br /&gt;
:2 1&lt;br /&gt;
:3 2&lt;br /&gt;
:2 3&lt;br /&gt;
:1 3&lt;br /&gt;
&lt;br /&gt;
;covoare1out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 1&lt;br /&gt;
:1 3&lt;br /&gt;
:1 7&lt;br /&gt;
:3 3&lt;br /&gt;
:4 3&lt;br /&gt;
:4 6&lt;br /&gt;
:5 1&lt;br /&gt;
:6 6&lt;br /&gt;
:7 3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;covoare1in.txt&lt;br /&gt;
:-3 -2 2&lt;br /&gt;
:6 2&lt;br /&gt;
:0 -10&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import heapq&lt;br /&gt;
&lt;br /&gt;
def rezolva(n, m, p, covoare):&lt;br /&gt;
    # Initializare heap cu covoare&lt;br /&gt;
    heapq.heapify(covoare)&lt;br /&gt;
&lt;br /&gt;
    # Afișare coordonate în ordinea notată de Miguel&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    for _ in range(p):&lt;br /&gt;
        top_covoare = heapq.heappop(covoare)&lt;br /&gt;
        rezultat.append((top_covoare[0], top_covoare[1]))&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
def verifica_rezultat(input_file, output_file):&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    with open(input_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m, p = map(int, f.readline().split())&lt;br /&gt;
        covoare = [tuple(map(int, f.readline().split())) for _ in range(p)]&lt;br /&gt;
&lt;br /&gt;
    # Apelare funcție de rezolvare&lt;br /&gt;
    rezultat_obtinut = rezolva(n, m, p, covoare)&lt;br /&gt;
&lt;br /&gt;
    # Citire rezultat așteptat&lt;br /&gt;
    with open(output_file, &amp;quot;r&amp;quot;) as g:&lt;br /&gt;
        rezultat_asteptat = [tuple(map(int, linie.split())) for linie in g.readlines()]&lt;br /&gt;
&lt;br /&gt;
    # Verificare rezultat&lt;br /&gt;
    if rezultat_obtinut == rezultat_asteptat:&lt;br /&gt;
        print(&amp;quot;Rezultat corect!&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Rezultat incorect!&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Rezultat așteptat:&amp;quot;)&lt;br /&gt;
        print(rezultat_asteptat)&lt;br /&gt;
        print(&amp;quot;Rezultat obținut:&amp;quot;)&lt;br /&gt;
        print(rezultat_obtinut)&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;covoare1in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n, m, p = map(int, f.readline().split())&lt;br /&gt;
    covoare = [tuple(map(int, f.readline().split())) for _ in range(p)]&lt;br /&gt;
&lt;br /&gt;
# Apelare funcție de rezolvare&lt;br /&gt;
rezultat = rezolva(n, m, p, covoare)&lt;br /&gt;
&lt;br /&gt;
# Scriere date de ieșire&lt;br /&gt;
with open(&amp;quot;covoare1out.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    for coord in rezultat:&lt;br /&gt;
        g.write(f&amp;quot;{coord[0]} {coord[1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Apelare funcție de verificare&lt;br /&gt;
verifica_rezultat(&amp;quot;covoare1in.txt&amp;quot;, &amp;quot;covoare1out.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1820_-_Binar&amp;diff=8666</id>
		<title>1820 - Binar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1820_-_Binar&amp;diff=8666"/>
		<updated>2023-12-29T12:08:36Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Ionel a învăţat recent la Informatică reprezentarea numerelor în baza 2. Pentru a-și aprofunda cunoştinţele, profesorul său a inventat următoarea problemă: Dintr-un fişier text se citeşte un şir de &#039;&#039;&#039;N&#039;&#039;&#039; valori de &#039;&#039;&#039;1, 0&#039;&#039;&#039; şi &#039;&#039;&#039;-1&#039;&#039;&#039;. Valoarea -1 are semnificaţia de terminare a unui număr, iar valorile de 0 şi 1 reprezintă cifrele în baza 2 a câte unui număr natural. Să se determine primele &#039;&#039;&#039;NR&#039;&#039;&#039; valori codificate, cu numerele de apariţii cât mai mari.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul &#039;&#039;&#039;binarin.txt&#039;&#039;&#039; cu următoarea structura:&lt;br /&gt;
*pe prima linie numerele &#039;&#039;&#039;N&#039;&#039;&#039; şi &#039;&#039;&#039;NR&#039;&#039;&#039; cu semnificaţia din enunţ.&lt;br /&gt;
*pe a doua linie &#039;&#039;&#039;N&#039;&#039;&#039; valori de 1, 0 sau -1.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul &#039;&#039;&#039;binarout.txt&#039;&#039;&#039; va conţine perechi distincte de numere &#039;&#039;&#039;X&#039;&#039;&#039;, &#039;&#039;&#039;AP&#039;&#039;&#039; cu semnificaţia &#039;&#039;&#039;X&#039;&#039;&#039; – valoarea codificata în baza 10, &#039;&#039;&#039;AP &#039;&#039;&#039;– numărul de apariţii ale valorii &#039;&#039;&#039;X&#039;&#039;&#039;, pe fiecare linie câte o pereche despărţită printr-un spaţiu. Perechile vor fi afişate în ordinea descrescătoare a valorii &#039;&#039;&#039;AP&#039;&#039;&#039;, iar la valori egale, în ordinea descrescătoare a valorii lui &#039;&#039;&#039;X&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*10 &amp;amp;les; N &amp;amp;les; 100.000.&lt;br /&gt;
*1 &amp;amp;les; NR &amp;amp;les; 3.&lt;br /&gt;
*Înaintea fiecărei valori de -1 se găseşte cel putin o valoare de 0 sau 1.&lt;br /&gt;
*Numerele codificate astfel sunt mai mici decat 10000 în baza 10.&lt;br /&gt;
*Se poate ca la stânga unui număr codificat să fie doar valori de 0.&lt;br /&gt;
*În şir sunt codificate cel puţin 3 valori distincte.&lt;br /&gt;
*Şirul de valori se incheie cu o valoare de -1.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;binarin.txt&lt;br /&gt;
:19 3&lt;br /&gt;
:1 0 -1 1 -1 1 0 -1 1 1 -1 1 0 1 -1 1 0 1 -1&lt;br /&gt;
;binarout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:5 2&lt;br /&gt;
:2 2&lt;br /&gt;
:3 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;binarin.txt&lt;br /&gt;
:10 5&lt;br /&gt;
:-1 1 1 0 0 8 3 -10 0 8&lt;br /&gt;
;binarout.txt&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def binar_to_decimal(binar):&lt;br /&gt;
    # Convertirea unui număr binar în decimal&lt;br /&gt;
    decimal = 0&lt;br /&gt;
    for bit in binar:&lt;br /&gt;
        decimal = decimal * 2 + int(bit)&lt;br /&gt;
    return decimal&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verifica_rezultat(input_file, output_file):&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    with open(input_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        N, NR = map(int, f.readline().split())&lt;br /&gt;
        sir_binar = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Initializare dicționar pentru frecvențe&lt;br /&gt;
    frecvente = {}&lt;br /&gt;
&lt;br /&gt;
    # Parcurgere șir binar&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; N:&lt;br /&gt;
        numar_binar = []&lt;br /&gt;
        while i &amp;lt; N and sir_binar[i] != -1:&lt;br /&gt;
            numar_binar.append(str(sir_binar[i]))&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
        numar_decimal = binar_to_decimal(numar_binar)&lt;br /&gt;
        if numar_decimal in frecvente:&lt;br /&gt;
            frecvente[numar_decimal] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            frecvente[numar_decimal] = 1&lt;br /&gt;
&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    # Sortare și scriere rezultat în fișierul de ieșire&lt;br /&gt;
    rezultate_sortate = sorted(frecvente.items(), key=lambda x: (-x[1], -x[0]))&lt;br /&gt;
&lt;br /&gt;
    # Citire rezultat așteptat&lt;br /&gt;
    with open(output_file, &amp;quot;r&amp;quot;) as g:&lt;br /&gt;
        rezultat_asteptat = [tuple(map(int, linie.split())) for linie in g.readlines()]&lt;br /&gt;
&lt;br /&gt;
    # Verificare rezultat&lt;br /&gt;
    if rezultate_sortate[:NR] == rezultat_asteptat:&lt;br /&gt;
        print(&amp;quot;Rezultat corect!&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Rezultat incorect!&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Rezultat așteptat:&amp;quot;)&lt;br /&gt;
        print(rezultat_asteptat)&lt;br /&gt;
        print(&amp;quot;Rezultat obținut:&amp;quot;)&lt;br /&gt;
        print(rezultate_sortate[:NR])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;binarin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    N, NR = map(int, f.readline().split())&lt;br /&gt;
    sir_binar = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Initializare dicționar pentru frecvențe&lt;br /&gt;
frecvente = {}&lt;br /&gt;
&lt;br /&gt;
# Parcurgere șir binar&lt;br /&gt;
i = 0&lt;br /&gt;
while i &amp;lt; N:&lt;br /&gt;
    numar_binar = []&lt;br /&gt;
    while i &amp;lt; N and sir_binar[i] != -1:&lt;br /&gt;
        numar_binar.append(str(sir_binar[i]))&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    numar_decimal = binar_to_decimal(numar_binar)&lt;br /&gt;
    if numar_decimal in frecvente:&lt;br /&gt;
        frecvente[numar_decimal] += 1&lt;br /&gt;
    else:&lt;br /&gt;
        frecvente[numar_decimal] = 1&lt;br /&gt;
&lt;br /&gt;
    i += 1&lt;br /&gt;
&lt;br /&gt;
# Sortare și scriere rezultat în fișierul de ieșire&lt;br /&gt;
rezultate_sortate = sorted(frecvente.items(), key=lambda x: (-x[1], -x[0]))&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;binarout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    for valoare, aparitii in rezultate_sortate[:NR]:&lt;br /&gt;
        g.write(f&amp;quot;{valoare} {aparitii}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Apelare funcție de verificare&lt;br /&gt;
verifica_rezultat(&amp;quot;binarin.txt&amp;quot;, &amp;quot;binarout.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Numerele codificate sunt: 1 apare odată, 2 apare de 2 ori, 3 apare odată&lt;br /&gt;
şi 5 apare de 2 ori. Sunt afişate primele 3 în ordinea descrescătoare a numărului de apariţii. Numerele 2 şi 5 care au acelaşi număr de apariţii se afișează în ordinea descrescătoare a valorii lor.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3374_-_Caroiaj&amp;diff=8665</id>
		<title>3374 - Caroiaj</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3374_-_Caroiaj&amp;diff=8665"/>
		<updated>2023-12-29T12:06:31Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Se consideră un caroiaj format din &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;n&#039;&#039;&#039; coloane, fiecare element din caroiaj fiind o literă mică din alfabetul englez. Să se constuiască șirul de caractere obținut prin parcurgerea caroiajului pe chenare dinspre exteriorul spre interiorul caroiajului, fiecare chenar fiind parcurs în sensul arcelor de ceas, pornind din colțul stânga sus al fiecărui chenar. Determinați cea mai lungă secvență de caractere situate pe poziții alăturate în șirul construit, care este simetrică. Dacă există mai multe astfel de secvențe de lungime maximă, se va determina ultima dintre ele.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Cunoscând numărul natural &#039;&#039;&#039;n&#039;&#039;&#039; și un caroiaj format din &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;n&#039;&#039;&#039; coloane de litere mici ale alfabetului englez, să se determine cea mai lungă secvență de caractere situate pe poziții alăturate în șirul construit, care este simetrică. Dacă există mai multe secvențe simetrice de lungime maximă, se va determina ultima dintre ele.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;caroiajin.txt&#039;&#039;&#039; conţine pe prima linie, numărul natural &#039;&#039;&#039;&#039;&#039;&#039;n,iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii se află câte &#039;&#039;&#039;n&#039;&#039;&#039; caractere, litere mici ale alfabetului englez.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Pe prima linie a fişierului &#039;&#039;&#039;caroiajout.txt&#039;&#039;&#039; va fi scrisă ultima secvență simetrică de caractere, de lungime maximă din șirul format prin parcurgerea caroiajului de caractere pe chenare, dinspre exteriorul spre interiorul caroiajului, fiecare chenar fiind parcurs în sensul arcelor de ceas, pornind de la colțul din stânga sus al fiecărui chenar.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 500&lt;br /&gt;
*literele mici din caroiaj aparțin alfabetului englez&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;caroiajin.txt&lt;br /&gt;
:5&lt;br /&gt;
:abcde&lt;br /&gt;
:bceaf&lt;br /&gt;
:abade&lt;br /&gt;
:abbad&lt;br /&gt;
:ffabc &lt;br /&gt;
;caroiajout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:abcdefedcba&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;caroiajin.txt&lt;br /&gt;
:4&lt;br /&gt;
:ABCDEF&lt;br /&gt;
:BceaF&lt;br /&gt;
:ABBad&lt;br /&gt;
:FFabC&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def parcurgere_caroiaj(n, caroiaj):&lt;br /&gt;
    rezultat = &amp;quot;&amp;quot;&lt;br /&gt;
    &lt;br /&gt;
    for i in range((n + 1) // 2):&lt;br /&gt;
        # Parcurgere pe chenarul exterior al caroiajului&lt;br /&gt;
        for j in range(i, n - i):&lt;br /&gt;
            rezultat += caroiaj[i][j]&lt;br /&gt;
        &lt;br /&gt;
        # Parcurgere pe chenarul din dreapta&lt;br /&gt;
        for j in range(i + 1, n - i):&lt;br /&gt;
            rezultat += caroiaj[j][n - i - 1]&lt;br /&gt;
        &lt;br /&gt;
        # Parcurgere pe chenarul din jos&lt;br /&gt;
        for j in range(n - i - 2, i - 1, -1):&lt;br /&gt;
            rezultat += caroiaj[n - i - 1][j]&lt;br /&gt;
        &lt;br /&gt;
        # Parcurgere pe chenarul din stanga&lt;br /&gt;
        for j in range(n - i - 2, i, -1):&lt;br /&gt;
            rezultat += caroiaj[j][i]&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cea_mai_lunga_secventa_simetrica(șir):&lt;br /&gt;
    max_len = 0&lt;br /&gt;
    start = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, len(șir)):&lt;br /&gt;
        # Căutăm palindrom la fiecare caracter&lt;br /&gt;
        j = 0&lt;br /&gt;
        while i - j &amp;gt;= 0 and i + j &amp;lt; len(șir) and șir[i - j] == șir[i + j]:&lt;br /&gt;
            j += 1&lt;br /&gt;
&lt;br /&gt;
        current_len = 2 * j - 1&lt;br /&gt;
        if current_len &amp;gt; max_len:&lt;br /&gt;
            max_len = current_len&lt;br /&gt;
            start = i - j + 1&lt;br /&gt;
&lt;br /&gt;
    return șir[start:start + max_len]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def verifica_rezultat(input_file, output_file):&lt;br /&gt;
    with open(input_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline())&lt;br /&gt;
        caroiaj = [list(f.readline().strip()) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    with open(output_file, &amp;quot;r&amp;quot;) as g:&lt;br /&gt;
        rezultat_asteptat = g.readline().strip()&lt;br /&gt;
&lt;br /&gt;
    sir_construit = parcurgere_caroiaj(n, caroiaj)&lt;br /&gt;
    rezultat_program = cea_mai_lunga_secventa_simetrica(sir_construit)&lt;br /&gt;
&lt;br /&gt;
    if rezultat_program == rezultat_asteptat:&lt;br /&gt;
        print(&amp;quot;Rezultat corect!&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Rezultat incorect!&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Rezultat așteptat:&amp;quot;)&lt;br /&gt;
        print(rezultat_asteptat)&lt;br /&gt;
        print(&amp;quot;Rezultat obținut:&amp;quot;)&lt;br /&gt;
        print(rezultat_program)&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;caroiajin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
    caroiaj = [list(f.readline().strip()) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Construire șir parcurgând caroiajul&lt;br /&gt;
sir_construit = parcurgere_caroiaj(n, caroiaj)&lt;br /&gt;
&lt;br /&gt;
# Determinare cea mai lungă secvență simetrică&lt;br /&gt;
rezultat = cea_mai_lunga_secventa_simetrica(sir_construit)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;caroiajout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    g.write(rezultat)&lt;br /&gt;
&lt;br /&gt;
# Verificare rezultat pentru exemplul dat&lt;br /&gt;
verifica_rezultat(&amp;quot;caroiajin.txt&amp;quot;, &amp;quot;caroiajout.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Șirul de caractere format la parcurgerea caroiajului pe chenare în maniera indicată în text, este: abcdefedcbaffaabceadabbba. Ultima secvență simetrică de lungime maximă este abcdefedcba.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2739_-_Sir_Platou&amp;diff=8664</id>
		<title>2739 - Sir Platou</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2739_-_Sir_Platou&amp;diff=8664"/>
		<updated>2023-12-29T12:05:04Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dă un șir de caractere care conține cuvinte. Cuvintele sunt formate din litere mici ale alfabetului englez și sunt separate prin unul sau mai multe spații.&lt;br /&gt;
&lt;br /&gt;
Determinați secvențele de cuvinte de lungime maximă cu proprietatea că fiecare cuvânt din secvență, cu excepția ultimului, se termină cu litera de început a cuvântului următor. Secvențele au minim &#039;&#039;&#039;2&#039;&#039;&#039; cuvinte și se afișează în ordinea în care apar în șir.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Fiecare secvență determinată va fi afișată pe câte o linie a ecranului, cuvintele dintr-o secvență fiind separate prin atâtea spații cât sunt între ele în șir. Dacă nu există nicio astfel de secvență se va afișa &#039;&#039;&#039;-&#039;&#039;&#039;1.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură un șir de caractere.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran secvențele de lungime maximă care îndeplinesc cerința, fiecare pe câte o linie, sau &#039;&#039;&#039;-1&#039;&#039;&#039; dacă nu există nicio astfel de cerință.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*șirul dat conține maximum &#039;&#039;&#039;255&#039;&#039;&#039; de caractere&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:ab   bc  cd ef fg  gh&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:ab   bc  cd&lt;br /&gt;
:ef fg  gh&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:12 AB cD 0 75&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def detecteaza_secvente(sir):&lt;br /&gt;
    cuvinte = sir.split()&lt;br /&gt;
    secvente_maxime = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(cuvinte) - 1):&lt;br /&gt;
        secventa_curenta = [cuvinte[i]]&lt;br /&gt;
        for j in range(i + 1, len(cuvinte)):&lt;br /&gt;
            if cuvinte[j][0] == cuvinte[i][-1]:&lt;br /&gt;
                secventa_curenta.append(cuvinte[j])&lt;br /&gt;
            else:&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
        if len(secventa_curenta) &amp;gt; 1:&lt;br /&gt;
            secvente_maxime.append(secventa_curenta)&lt;br /&gt;
    &lt;br /&gt;
    return secvente_maxime if secvente_maxime else -1&lt;br /&gt;
&lt;br /&gt;
def verifica_rezultat(input_file, output_file):&lt;br /&gt;
    with open(input_file, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        sir_intrare = f.readline().strip()&lt;br /&gt;
&lt;br /&gt;
    with open(output_file, &amp;quot;r&amp;quot;) as g:&lt;br /&gt;
        rezultat_asteptat = g.readline().strip()&lt;br /&gt;
&lt;br /&gt;
    rezultat_program = detecteaza_secvente(sir_intrare)&lt;br /&gt;
&lt;br /&gt;
    if rezultat_program == -1:&lt;br /&gt;
        rezultat_program_str = &amp;quot;-1&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        rezultat_program_str = &amp;quot;\n&amp;quot;.join([&amp;quot; &amp;quot;.join(secventa) for secventa in rezultat_program])&lt;br /&gt;
&lt;br /&gt;
    if rezultat_program_str == rezultat_asteptat:&lt;br /&gt;
        print(&amp;quot;Rezultat corect!&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Rezultat incorect!&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Rezultat așteptat:&amp;quot;)&lt;br /&gt;
        print(rezultat_asteptat)&lt;br /&gt;
        print(&amp;quot;Rezultat obținut:&amp;quot;)&lt;br /&gt;
        print(rezultat_program_str)&lt;br /&gt;
&lt;br /&gt;
# Verificare rezultat pentru exemplele date&lt;br /&gt;
verifica_rezultat(&amp;quot;exemplu1in.txt&amp;quot;, &amp;quot;exemplu1out.txt&amp;quot;)&lt;br /&gt;
verifica_rezultat(&amp;quot;exemplu2in.txt&amp;quot;, &amp;quot;exemplu2out.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1156_-_InaltimiQ&amp;diff=8663</id>
		<title>1156 - InaltimiQ</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1156_-_InaltimiQ&amp;diff=8663"/>
		<updated>2023-12-29T12:03:56Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau înălțimile a &#039;&#039;&#039;n&#039;&#039;&#039; copii, numerotați de la 1 la n, exprimate prin numere naturale. Afișați numerele de ordine ale copiilor în ordinea crescătoare a înălțimii lor.&lt;br /&gt;
&lt;br /&gt;
Pentru sortare se va folosit metoda QuickSort sau MergeSort.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații, reprezentând, în ordine, înălțimile copiilor.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran n numere naturale distincte cuprinse între 1 și n, separate prin exact un spațiu, reprezentând numerele de ordine ale copiilor în ordinea crescătoare a înălțimii.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 1000&lt;br /&gt;
*înălțimile copiilor vor fi numere naturale distincte din intervalul &#039;&#039;&#039;[1 , 10000]&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:7&lt;br /&gt;
:8 20 16 14 10 4 12 &lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:6 1 5 7 4 3 2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:4&lt;br /&gt;
:-6 0 -10 25 &lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_date_intrare(n, inaltimi):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(inaltimi) != n or any(h &amp;lt; 1 or h &amp;gt; 10000 for h in inaltimi):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def merge_sort(arr):&lt;br /&gt;
    if len(arr) &amp;lt;= 1:&lt;br /&gt;
        return arr&lt;br /&gt;
&lt;br /&gt;
    mid = len(arr) // 2&lt;br /&gt;
    left = arr[:mid]&lt;br /&gt;
    right = arr[mid:]&lt;br /&gt;
&lt;br /&gt;
    left = merge_sort(left)&lt;br /&gt;
    right = merge_sort(right)&lt;br /&gt;
&lt;br /&gt;
    return merge(left, right)&lt;br /&gt;
&lt;br /&gt;
def merge(left, right):&lt;br /&gt;
    result = []&lt;br /&gt;
    i = j = 0&lt;br /&gt;
&lt;br /&gt;
    while i &amp;lt; len(left) and j &amp;lt; len(right):&lt;br /&gt;
        if left[i][1] &amp;lt; right[j][1]:&lt;br /&gt;
            result.append(left[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        elif left[i][1] == right[j][1]:&lt;br /&gt;
            if left[i][0] &amp;lt; right[j][0]:&lt;br /&gt;
                result.append(left[i])&lt;br /&gt;
                i += 1&lt;br /&gt;
            else:&lt;br /&gt;
                result.append(right[j])&lt;br /&gt;
                j += 1&lt;br /&gt;
        else:&lt;br /&gt;
            result.append(right[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
&lt;br /&gt;
    result.extend(left[i:])&lt;br /&gt;
    result.extend(right[j:])&lt;br /&gt;
    &lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    inaltimi = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare date de intrare&lt;br /&gt;
    if not verifica_date_intrare(n, inaltimi):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Adaugare numere de ordine și înălțimi într-o listă de tupluri&lt;br /&gt;
    copii = list(enumerate(inaltimi, start=1))&lt;br /&gt;
&lt;br /&gt;
    # Sortare folosind MergeSort&lt;br /&gt;
    copii_sortati = merge_sort(copii)&lt;br /&gt;
&lt;br /&gt;
    # Afișare rezultat&lt;br /&gt;
    for copil in copii_sortati:&lt;br /&gt;
        print(copil[0], end=&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except ValueError as ve:&lt;br /&gt;
    print(ve)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0092_-_Proiecte&amp;diff=8662</id>
		<title>0092 - Proiecte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0092_-_Proiecte&amp;diff=8662"/>
		<updated>2023-12-29T12:02:55Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
La un birou care se ocupă cu analiza proiectelor de investiţii, &#039;&#039;&#039;n&#039;&#039;&#039; investitori au depus până la termenul legal, câte un proiect.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Cunoscând timpul necesar pentru analizarea fiecărui proiect, scrieţi un program care determină ordinea în care vor fi analizate proiectele, astfel încât timpul mediu de aşteptare pentru investitori să fie minim.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Pe prima linie a fişierului &#039;&#039;&#039;proiectein.txt&#039;&#039;&#039; se găseşte un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; reprezentând numărul de proiecte depuse.&lt;br /&gt;
&lt;br /&gt;
Pe linia a doua, separate prin câte un spaţiu, se găsesc &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale &#039;&#039;&#039;t1, t2, …, tn&#039;&#039;&#039;, reprezentând timpii necesari pentru analizarea fiecărui proiect.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Pe prima linie a fişierului &#039;&#039;&#039;proiecteout.txt&#039;&#039;&#039; se vor găsi n numere naturale cuprinse între 1 şi n, reprezentând ordinea în care vor fi analizate proiectele.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n  &amp;amp;les; 1000&lt;br /&gt;
*numerele de pe a doua linie a fişierului de intrare vor fi mai mici sau egale cu &#039;&#039;&#039;100&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;proiectein.txt&lt;br /&gt;
:5&lt;br /&gt;
:60 50 30 10 40 &lt;br /&gt;
;proiecteout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:4 3 5 2 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;proiectein.txt&lt;br /&gt;
:4&lt;br /&gt;
:238 -100 8&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_date_intrare(n, timp_analiza):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(timp_analiza) != n or any(ti &amp;lt; 1 or ti &amp;gt; 100 for ti in timp_analiza):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def ordine_analiza_proiecte(n, timp_analiza):&lt;br /&gt;
    proiecte = list(enumerate(timp_analiza, 1))&lt;br /&gt;
    proiecte.sort(key=lambda x: x[1])&lt;br /&gt;
    ordine_proiecte = [proiect[0] for proiect in proiecte]&lt;br /&gt;
    return ordine_proiecte&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;proiectein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n = int(f.readline())&lt;br /&gt;
        timp_analiza = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare date de intrare&lt;br /&gt;
    if not verifica_date_intrare(n, timp_analiza):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Calculare și afișare rezultat&lt;br /&gt;
    rezultat = ordine_analiza_proiecte(n, timp_analiza)&lt;br /&gt;
    with open(&amp;quot;proiecteout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
        for proiect in rezultat:&lt;br /&gt;
            g.write(f&amp;quot;{proiect} &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except ValueError as ve:&lt;br /&gt;
    print(ve)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
4 3 5 2 1 este ordinea de analizare a proiectelor. Numerele de ordine ale proiectelor sunt date de ordinea numerelor de pe linia a doua din fişierul de intrare.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2087_-_K_Min_Sum&amp;diff=8661</id>
		<title>2087 - K Min Sum</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2087_-_K_Min_Sum&amp;diff=8661"/>
		<updated>2023-12-29T12:01:28Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se consideră un număr natural &#039;&#039;&#039;k&#039;&#039;&#039; și două tablouri unidimensionale &#039;&#039;&#039;A și B&#039;&#039;&#039;, cu &#039;&#039;&#039;n&#039;&#039;&#039; respectiv &#039;&#039;&#039;m&#039;&#039;&#039; elemente, numere întregi, sortate crescător. Să se afișeze primele &#039;&#039;&#039;k&#039;&#039;&#039; perechi de numere de sumă minimă. Fiecare pereche conține un număr din &#039;&#039;&#039;A&#039;&#039;&#039;, un număr din &#039;&#039;&#039;B&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;kminsumin.txt&#039;&#039;&#039; conține pe prima linie trei numere naturale &#039;&#039;&#039;n, m și k&#039;&#039;&#039; având semnificația din enunț.&lt;br /&gt;
Pe a doua linie se găsesc &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații ce reprezintă elementele tabloului &#039;&#039;&#039;A&#039;&#039;&#039;.&lt;br /&gt;
Pe a treia linie se găsesc &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale separate prin spații ce reprezintă elementele tabloului &#039;&#039;&#039;B&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;kminsumout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;k&#039;&#039; linii. Fiecare linie conține două numere întregi separate prin spațiu ce reprezintă descrierea unei perechi (un număr din A, un număr din B).&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n, m &amp;amp;les; 1000&lt;br /&gt;
*1 &amp;amp;les; k &amp;amp;les; 20000&lt;br /&gt;
*valorile elementelor celor două tablouri vor aparține intervalului &#039;&#039;&#039;[-1.000.000,1.000.000]&#039;&#039;&#039;&lt;br /&gt;
*ordinea de afișare a celor k perechi nu contează&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;kminsumin.txt&lt;br /&gt;
:5 3 4&lt;br /&gt;
:1 2 3 4 5&lt;br /&gt;
:2 3 6&lt;br /&gt;
;kminsumout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 2&lt;br /&gt;
:1 3&lt;br /&gt;
:2 2&lt;br /&gt;
:2 3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;kminsumin.txt&lt;br /&gt;
:5 3 4&lt;br /&gt;
:1 4 2 9 5&lt;br /&gt;
:2 3 6&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_date_intrare(n, m, k, A, B):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= m &amp;lt;= 1000 and 1 &amp;lt;= k &amp;lt;= 20000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not (-1000000 &amp;lt;= min(A + B) &amp;lt;= max(A + B) &amp;lt;= 1000000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def k_min_sum_pairs(n, m, k, A, B):&lt;br /&gt;
    pairs = []&lt;br /&gt;
&lt;br /&gt;
    i, j = 0, 0&lt;br /&gt;
    while i &amp;lt; n and j &amp;lt; m and len(pairs) &amp;lt; k:&lt;br /&gt;
        pairs.append((A[i], B[j]))&lt;br /&gt;
        if i + 1 &amp;lt; n and (j + 1 &amp;gt;= m or A[i + 1] + B[j] &amp;lt; A[i] + B[j + 1]):&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            j += 1&lt;br /&gt;
&lt;br /&gt;
    return pairs&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;kminsumin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m, k = map(int, f.readline().split())&lt;br /&gt;
        A = list(map(int, f.readline().split()))&lt;br /&gt;
        B = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare date de intrare&lt;br /&gt;
    if not verifica_date_intrare(n, m, k, A, B):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Calculare și afișare rezultat&lt;br /&gt;
    rezultat = k_min_sum_pairs(n, m, k, A, B)&lt;br /&gt;
    with open(&amp;quot;kminsumout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
        for pair in rezultat:&lt;br /&gt;
            g.write(f&amp;quot;{pair[0]} {pair[1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except ValueError as ve:&lt;br /&gt;
    print(ve)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Tablou A conține 5 numere sortate crescător, tablou B conține 3 numere sortate crescător. Se pot forma 5•3 perechi. Primele 4 perechi corect formate de sumă minimă sunt: 1 2, 1 3, 2 2, 2 3.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4266_-_MITM&amp;diff=8660</id>
		<title>4266 - MITM</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4266_-_MITM&amp;diff=8660"/>
		<updated>2023-12-29T12:00:24Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Fie un număr natural &#039;&#039;&#039;s&#039;&#039;&#039; și un șir de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Să se determine suma maximă posibilă, mai mică sau egală cu s ce se poate obține dintr-un subșir al șirului.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;s&#039;&#039;&#039;, apoi n numere naturale, separate prin spații, reprezentând elementele șirului.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;M&#039;&#039;&#039;, reprezentând suma maximă posibilă, mai mică sau egală cu &#039;&#039;&#039;s&#039;&#039;&#039; ce se poate obține dintr-un subșir al șirului.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;3 &amp;amp;les; n &amp;amp;les; 40&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; s &amp;amp;les; 2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*Șirul va conține numere naturale nenule mai mici decât 50.000.001.&lt;br /&gt;
*Toate elementele șirului vor fi mici sau egale decât s.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5 20&lt;br /&gt;
:5 10 6 8 3&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:19&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1 1&lt;br /&gt;
:4 29 2 0&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verificare_date_intrare(n, s, sir):&lt;br /&gt;
    if not (3 &amp;lt;= n &amp;lt;= 40 and 1 &amp;lt;= s &amp;lt;= 2000000000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not all(1 &amp;lt;= x &amp;lt; 50000001 for x in sir):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def suma_maxima_subsir(arr, s):&lt;br /&gt;
    n = len(arr)&lt;br /&gt;
    suma_maxima = 0&lt;br /&gt;
    suma_curenta = 0&lt;br /&gt;
    stanga = 0&lt;br /&gt;
&lt;br /&gt;
    for dreapta in range(n):&lt;br /&gt;
        suma_curenta += arr[dreapta]&lt;br /&gt;
&lt;br /&gt;
        while suma_curenta &amp;gt; s:&lt;br /&gt;
            suma_curenta -= arr[stanga]&lt;br /&gt;
            stanga += 1&lt;br /&gt;
&lt;br /&gt;
        suma_maxima = max(suma_maxima, suma_curenta)&lt;br /&gt;
&lt;br /&gt;
    return suma_maxima&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul de elemente: &amp;quot;))&lt;br /&gt;
    s = int(input(&amp;quot;Introduceți suma dorită: &amp;quot;))&lt;br /&gt;
    sir = list(map(int, input(&amp;quot;Introduceți șirul de numere separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare date de intrare&lt;br /&gt;
    if not verificare_date_intrare(n, s, sir):&lt;br /&gt;
        raise ValueError(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Calculare și afișare rezultat&lt;br /&gt;
    rezultat = suma_maxima_subsir(sir, s)&lt;br /&gt;
    print(f&amp;quot;Suma maximă posibilă mai mică sau egală cu {s} este: {rezultat}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except ValueError as ve:&lt;br /&gt;
    print(ve)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Suma maximă mai mică sau egală decât 20 este 17 și se formează doar din numărul 17.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3310_-_Afin&amp;diff=8659</id>
		<title>3310 - Afin</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3310_-_Afin&amp;diff=8659"/>
		<updated>2023-12-29T11:59:24Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Cifrul Afin este un cifru unde fiecare literă este înlocuită cu o altă literă printr-o operație matematica. Fiecărei litere &#039;&#039;&#039;i&#039;&#039;&#039; se asociază un cod: &#039;&#039;&#039;a-0, b-1, c-2, … z-25&#039;&#039;&#039;. De asemenea, mai avem două numere &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039;, numite chei. Fiecare literă se înlocuiește cu litera care are codul egal cu &#039;&#039;&#039;(a*x+b)mod. 26&#039;&#039;&#039; , unde x este codul literei.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Dându-se valoarea celor două chei și un mesaj să se afișeze mesajul criptat.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;afinin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;a b&#039;&#039;&#039; iar pe a doua linie un mesaj.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;afinout.txt&#039;&#039;&#039; va conține pe prima linie mesajul criptat.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; a , b &amp;amp;les; 26&lt;br /&gt;
*1 &amp;amp;les; lungimea șirului &amp;amp;les;10000&lt;br /&gt;
*mesajul va conține doar litere mici ale alfabetului englez&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;afinin.txt&lt;br /&gt;
:17 20&lt;br /&gt;
:twentyfifteen&lt;br /&gt;
;afinout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:fekhfmbabfkkh&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;afinin.txt&lt;br /&gt;
:17 20&lt;br /&gt;
:TWEntyfiftEEN&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verificare_rezultat_corect(a, b, mesaj, mesaj_criptat):&lt;br /&gt;
    if not (1 &amp;lt;= a &amp;lt;= 26 and 1 &amp;lt;= b &amp;lt;= 26):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= len(mesaj) &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not mesaj.isalpha() or not mesaj.islower():&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not mesaj_criptat.isalpha() or not mesaj_criptat.islower():&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;afinin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    a, b = map(int, f.readline().split())&lt;br /&gt;
    mesaj = f.readline().strip()&lt;br /&gt;
&lt;br /&gt;
# Calculare mesaj criptat&lt;br /&gt;
mesaj_criptat = cripteaza_afin(a, b, mesaj)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișier de ieșire&lt;br /&gt;
with open(&amp;quot;afinout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    if verificare_rezultat_corect(a, b, mesaj, mesaj_criptat):&lt;br /&gt;
        f_out.write(f&amp;quot;{mesaj_criptat}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        f_out.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2665_-_Dreptunghi1&amp;diff=8658</id>
		<title>2665 - Dreptunghi1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2665_-_Dreptunghi1&amp;diff=8658"/>
		<updated>2023-12-29T11:57:45Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Dată fiind o matrice dreptunghiulară cu elemente &#039;&#039;&#039;0 şi 1&#039;&#039;&#039;, care este aria maximă a unui dreptunghi format numai din elemente egale cu 1?&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Pe prima linie a fişierului &#039;&#039;&#039;dreptunghi1in.txt&#039;&#039;&#039; se vor găsi trei numere: numărul de linii, &#039;&#039;&#039;m&#039;&#039;&#039;, al matricei, numărul de coloane, &#039;&#039;&#039;n&#039;&#039;&#039;, precum şi numărul &#039;&#039;&#039;z&#039;&#039;&#039; al elementelor &#039;&#039;&#039;0&#039;&#039;&#039; din matrice. Pe următoarele z linii vom avea cate o pereche de numere lin şi col, separate printr-un spaţiu, cu semnificaţia că elementul de la linia lin şi coloana col este 0. Restul elementelor matricei sunt considerate 1. Este posibil ca anumite perechi lin şi col să se repete.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul &#039;&#039;&#039;dreptunghi1out.txt&#039;&#039;&#039; va conţine un singur număr, aria celui mai mare dreptunghi plin numai cu 1.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; m, n, z &amp;amp;les; 10.000&#039;&#039;&#039;;&lt;br /&gt;
*Perechile lin şi col sunt coordonate corecte în matrice, nu neapărat unice.&lt;br /&gt;
&lt;br /&gt;
== Punctaje partiale ==&lt;br /&gt;
&lt;br /&gt;
*Pentru 20% din teste: 1 ≤ m, n ≤ 30;&lt;br /&gt;
*Pentru 40% din teste: 1 ≤ m, n ≤ 100.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;dreptunghi1in.txt&lt;br /&gt;
:6 6 3&lt;br /&gt;
:4 1&lt;br /&gt;
:4 5&lt;br /&gt;
:3 3&lt;br /&gt;
;dreptunghi1out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:12&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;dreptunghi1in.txt&lt;br /&gt;
:1 2&lt;br /&gt;
:0 0&lt;br /&gt;
:-1 -2 -3&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verificare_rezultat_corect(m, n, z, pozitii_0, aria_maxima):&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 10000 and 1 &amp;lt;= n &amp;lt;= 10000 and 1 &amp;lt;= z &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for lin, col in pozitii_0:&lt;br /&gt;
        if not (0 &amp;lt;= lin &amp;lt; m and 0 &amp;lt;= col &amp;lt; n):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    if not (0 &amp;lt;= aria_maxima &amp;lt;= m * n):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;dreptunghi1in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    m, n, z = map(int, f.readline().split())&lt;br /&gt;
    pozitii_0 = [tuple(map(int, f.readline().split())) for _ in range(z)]&lt;br /&gt;
&lt;br /&gt;
# Calculare aria maxima&lt;br /&gt;
aria_maxima = calculeaza_aria_maxima(m, n, z, pozitii_0)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișier de ieșire&lt;br /&gt;
with open(&amp;quot;dreptunghi1out.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    if verificare_rezultat_corect(m, n, z, pozitii_0, aria_maxima):&lt;br /&gt;
        f_out.write(f&amp;quot;{aria_maxima}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        f_out.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Matricea este:&lt;br /&gt;
;111111&lt;br /&gt;
;111111&lt;br /&gt;
:110111&lt;br /&gt;
:011101&lt;br /&gt;
:111111&lt;br /&gt;
:111111&lt;br /&gt;
Cel mai mare dreptunghi are arie 12.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3670_-_Afin1&amp;diff=8657</id>
		<title>3670 - Afin1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3670_-_Afin1&amp;diff=8657"/>
		<updated>2023-12-29T11:56:01Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Cifrul Afin este un cifru unde fiecare literă este înlocuită cu o altă literă printr-o operație matematica. Fiecărei litere i se asociază un cod:&#039;&#039;&#039; a-0 , b-1 , c-2 , … z-25&#039;&#039;&#039; . De asemenea, mai avem două numere &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039;, numite chei. Fiecare literă se înlocuiește cu litera care are codul egal cu &#039;&#039;&#039;(a*x+b) mod 26&#039;&#039;&#039; , unde x este codul literei. Pentru anumite perechi de numere a și b rezultatul expresiei &#039;&#039;&#039;(a*x+b) mod 26&#039;&#039;&#039; poate fi același pentru valori diferite ale lui x; p pereche a b cu această proprietate se consideră ineficientă.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Dându-se valoarea celor două chei și un mesaj criptat să se afișeze mesajul decriptat. Dacă &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039; formează o pereche ineficientă atunci se afișează mesajul -1.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;afin1in.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;a b&#039;&#039;&#039; iar pe a doua linie mesajul criptat.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;afin1out.txt&#039;&#039;&#039; va conține pe prima linie mesajul decriptat sau numarul -1 daca a si b formeaza o pereche ineficienta.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; lungimea mesajului &amp;amp;les; 10000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;afin1in.txt&lt;br /&gt;
:17 20&lt;br /&gt;
:fekhfmbabfkkh&lt;br /&gt;
;afin1out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:twentyfifteen&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;afin1in.txt&lt;br /&gt;
:17 20&lt;br /&gt;
:FEKhfmbabfkkh&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_ineficienta(a, b):&lt;br /&gt;
    for x in range(26):&lt;br /&gt;
        if (a * x + b) % 26 == x:&lt;br /&gt;
            return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def decripteaza_mesaj(a, b, mesaj_criptat):&lt;br /&gt;
    mesaj_decriptat = &amp;quot;&amp;quot;&lt;br /&gt;
    a_invers = -1&lt;br /&gt;
    for i in range(26):&lt;br /&gt;
        if (a * i) % 26 == 1:&lt;br /&gt;
            a_invers = i&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    if a_invers == -1:&lt;br /&gt;
        return -1  # Perechea de chei este ineficientă&lt;br /&gt;
&lt;br /&gt;
    for litera in mesaj_criptat:&lt;br /&gt;
        if litera.isalpha():&lt;br /&gt;
            cod_litera = ord(litera) - ord(&#039;a&#039;)&lt;br /&gt;
            x_decriptat = (a_invers * (cod_litera - b)) % 26&lt;br /&gt;
            litera_decriptata = chr(x_decriptat + ord(&#039;a&#039;))&lt;br /&gt;
            mesaj_decriptat += litera_decriptata&lt;br /&gt;
        else:&lt;br /&gt;
            mesaj_decriptat += litera&lt;br /&gt;
&lt;br /&gt;
    return mesaj_decriptat&lt;br /&gt;
&lt;br /&gt;
def verificare_rezultat_corect(a, b, mesaj_criptat, rezultat_decriptare):&lt;br /&gt;
    if rezultat_decriptare == -1:&lt;br /&gt;
        return True  # Perechea de chei este considerată ineficientă&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= len(mesaj_criptat) &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;afin1in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    a, b = map(int, f.readline().split())&lt;br /&gt;
    mesaj_criptat = f.readline().strip()&lt;br /&gt;
&lt;br /&gt;
# Decriptare mesaj&lt;br /&gt;
rezultat_decriptare = decripteaza_mesaj(a, b, mesaj_criptat)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișier de ieșire&lt;br /&gt;
with open(&amp;quot;afin1out.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    if verificare_rezultat_corect(a, b, mesaj_criptat, rezultat_decriptare):&lt;br /&gt;
        if rezultat_decriptare == -1:&lt;br /&gt;
            f_out.write(&amp;quot;-1\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            f_out.write(f&amp;quot;{rezultat_decriptare}\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        f_out.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3508_-_Bal&amp;diff=8656</id>
		<title>3508 - Bal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3508_-_Bal&amp;diff=8656"/>
		<updated>2023-12-29T11:54:01Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
La balul din acest an participă &#039;&#039;&#039;n&#039;&#039;&#039; băieți și &#039;&#039;&#039;n&#039;&#039;&#039; fete, numerotați de la 1 la n. Compatibilitățile dintre aceștia pot fi reprezentate sub forma unui graf bipartit. Fie mat matricea de adiacentă. Atunci, băiatul &#039;&#039;&#039;i&#039;&#039;&#039; se poate cupla cu fata &#039;&#039;&#039;j&#039;&#039;&#039; doar dacă sunt compatibili, adică &#039;&#039;&#039;mat[i][j] = 1&#039;&#039;&#039;. Aflați numărul de moduri de a forma cele &#039;&#039;&#039;n&#039;&#039;&#039; cupluri.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi matricea de adiacență.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numărul de moduri de a forma cuplurile, modulo &#039;&#039;&#039;1.000.000.007&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;lt; n &amp;lt; 25&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
:0 1 1&lt;br /&gt;
:1 0 1&lt;br /&gt;
:1 1 1&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3&lt;br /&gt;
:-5 34 0&lt;br /&gt;
:3 87 0&lt;br /&gt;
:0 0 -1&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
MOD = 1000000007&lt;br /&gt;
&lt;br /&gt;
def numar_moduri_cuplare(n, matrice):&lt;br /&gt;
    dp = [[0] * (1 &amp;lt;&amp;lt; n) for _ in range(n + 1)]&lt;br /&gt;
    dp[0][0] = 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        for mask in range(1 &amp;lt;&amp;lt; n):&lt;br /&gt;
            num_bits = bin(mask).count(&#039;1&#039;)&lt;br /&gt;
&lt;br /&gt;
            for j in range(n):&lt;br /&gt;
                if matrice[i-1][j] == 1 and (mask &amp;amp; (1 &amp;lt;&amp;lt; j)) == 0:&lt;br /&gt;
                    dp[i][mask | (1 &amp;lt;&amp;lt; j)] = (dp[i][mask | (1 &amp;lt;&amp;lt; j)] + dp[i-1][mask]) % MOD&lt;br /&gt;
&lt;br /&gt;
    rezultat = sum(dp[n])&lt;br /&gt;
    return rezultat % MOD&lt;br /&gt;
&lt;br /&gt;
def verificare(n, matrice, rezultat):&lt;br /&gt;
    if not (1 &amp;lt; n &amp;lt; 25):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if rezultat &amp;lt; 0 or rezultat &amp;gt;= MOD:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(n):&lt;br /&gt;
            if matrice[i][j] not in {0, 1}:&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
matrice_adiacenta = [list(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Calcul și afișare rezultat&lt;br /&gt;
rezultat = numar_moduri_cuplare(n, matrice_adiacenta)&lt;br /&gt;
&lt;br /&gt;
# Verificare și afișare rezultat&lt;br /&gt;
if verificare(n, matrice_adiacenta, rezultat):&lt;br /&gt;
    print(rezultat)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Cele 3 modalități sunt:&lt;br /&gt;
:(1, 2), (2, 1), (3, 3)&lt;br /&gt;
:(1, 2), (2, 3), (3, 1)&lt;br /&gt;
:(1, 3), (2, 1), (3, 2)&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4050_-_amongus&amp;diff=8655</id>
		<title>4050 - amongus</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4050_-_amongus&amp;diff=8655"/>
		<updated>2023-12-29T11:48:36Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
În jocul Among Us un echipaj încearcă să piloteze o navetă spațială. O parte din ei încearcă să saboteze misiunea. Acești „impostori” sunt de obicei periculoși și astfel astronauții (sau „crewmates”) trebuie să se ferească pe cât posibil de aceștia. Astronauții au studiat planul interiorului navetei și au constatat că este compartimentat în nxm cabine, dispuse pe n rânduri, câte m pe fiecare rând, iar din fiecare cabină se poate trece în oricare altă cabină alăturată situată într-una din cele &#039;&#039;&#039;8 direcții&#039;&#039;&#039; &#039;&#039;&#039;(N, E, S, V, N-V, N-E, S-V, S-E)&#039;&#039;&#039;. Astronautii au creat o matrice a codurilor asociind fiecărei cabine un număr din mulțimea &#039;&#039;&#039;{0,1,2}&#039;&#039;&#039; cu semnificația:&lt;br /&gt;
*cod 0 dacă este o cabină sigură (adică în cabină nu se află niciun impostor)&lt;br /&gt;
*cod 1 dacă în ea se află un impostor&lt;br /&gt;
*cod 2 dacă este un portal („vent”).&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Cunoscând matricea codurilor, pentru a ajuta astronauții, vi se cere:&lt;br /&gt;
*1) să determinați numărul total de cabine sigure, nu sunt neapărat accesibile, ce nu conțin portale&lt;br /&gt;
*2) să marcați în matricea codurilor cu codul 3 fiecare cabină sigură (și accesibilă)&lt;br /&gt;
*3) să determinați numărul portalelor situate în cabine accesibile.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;amongusin.txt&#039;&#039;&#039; conține:&lt;br /&gt;
*pe prima linie numărul &#039;&#039;&#039;p&#039;&#039;&#039; reprezentând cerința care se rezolvă (1, 2 sau 3)&lt;br /&gt;
*pe a doua linie, două numere naturale &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039; cu semnificația din enunț&lt;br /&gt;
*pe fiecare din următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii, câte &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale din mulțimea {0,1,2}, separate prin câte un spațiu, reprezentând matricea de codificare a interiorului navetei spațiale.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;amongusout.txt&#039;&#039;&#039; va conține:&lt;br /&gt;
*dacă p=1, pe prima linie, un număr natural reprezentând răspunsul la cerința 1&lt;br /&gt;
*dacă p=2, n linii cu câte m numere naturale, separate prin câte un spațiu,reprezentând matricea codurilor modificată conform cerinței 2&lt;br /&gt;
*dacă p=3, pe prima linie, un număr natural reprezentând răspunsul la cerința 3.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n, m &amp;amp;les; 100&lt;br /&gt;
*astronauții pot intra în naveta doar prin cabina de coordonate &#039;&#039;&#039;(1,1)&#039;&#039;&#039; ceea ce înseamnă că accesul în unele cabine nu se poate realiza deși sunt sigure&lt;br /&gt;
*în cazul în care în prima cabină se află un impostor, pentru oricare dintre cerințe, se va scrie în fișier mesajul misiune esuata&lt;br /&gt;
*pentru cerința 1, se va modifica în 3 codul fiecărei cabine sigure&lt;br /&gt;
*un portal poate fi situat doar într-o cabină sigură&lt;br /&gt;
*există și cabine sigure care nu conțin portale&lt;br /&gt;
*impostorii nu se deplasează în afara cabinei în care se află inițial&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;amongusin.txt&lt;br /&gt;
:1&lt;br /&gt;
:3 4&lt;br /&gt;
:0 2 1 0&lt;br /&gt;
:2 0 1 0&lt;br /&gt;
:0 0 1 2&lt;br /&gt;
;amongusout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;amongusin.txt&lt;br /&gt;
:8&lt;br /&gt;
:-1 7&lt;br /&gt;
:0 0 2 5&lt;br /&gt;
:-8 6 1 0&lt;br /&gt;
:0 0 0 -3&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def numar_cabine_sigure(matrice, n, m):&lt;br /&gt;
    numar_sigure = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if matrice[i][j] == 0:&lt;br /&gt;
                numar_sigure += 1&lt;br /&gt;
    return numar_sigure&lt;br /&gt;
&lt;br /&gt;
def marcaza_cabine_sigure(matrice, n, m):&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if matrice[i][j] == 0:&lt;br /&gt;
                matrice[i][j] = 3&lt;br /&gt;
&lt;br /&gt;
def numar_portale_accesibile(matrice, n, m):&lt;br /&gt;
    numar_portale = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if matrice[i][j] == 2 and not are_impstor_in_jur(matrice, n, m, i, j):&lt;br /&gt;
                numar_portale += 1&lt;br /&gt;
    return numar_portale&lt;br /&gt;
&lt;br /&gt;
def are_impstor_in_jur(matrice, n, m, i, j):&lt;br /&gt;
    for x in range(max(0, i-1), min(n, i+2)):&lt;br /&gt;
        for y in range(max(0, j-1), min(m, j+2)):&lt;br /&gt;
            if matrice[x][y] == 1:&lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def verificare(rezultat, p, n, m, matrice_initiala):&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        return isinstance(rezultat, int) and 0 &amp;lt;= rezultat &amp;lt;= n * m&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        if not all(isinstance(row, list) and len(row) == m for row in rezultat):&lt;br /&gt;
            return False&lt;br /&gt;
        if not all(isinstance(elem, int) and 0 &amp;lt;= elem &amp;lt;= 3 for row in rezultat for elem in row):&lt;br /&gt;
            return False&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            for j in range(m):&lt;br /&gt;
                if matrice_initiala[i][j] == 0 and rezultat[i][j] != 3:&lt;br /&gt;
                    return False&lt;br /&gt;
        return True&lt;br /&gt;
    elif p == 3:&lt;br /&gt;
        return isinstance(rezultat, int) and 0 &amp;lt;= rezultat &amp;lt;= n * m&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;amongusin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    p = int(file.readline().strip())&lt;br /&gt;
    n, m = map(int, file.readline().split())&lt;br /&gt;
    matrice_initiala = [list(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Rezolvare cerinte&lt;br /&gt;
if p == 1:&lt;br /&gt;
    rezultat = numar_cabine_sigure(matrice_initiala, n, m)&lt;br /&gt;
elif p == 2:&lt;br /&gt;
    rezultat = matrice_initiala.copy()&lt;br /&gt;
    marcaza_cabine_sigure(rezultat, n, m)&lt;br /&gt;
elif p == 3:&lt;br /&gt;
    rezultat = numar_portale_accesibile(matrice_initiala, n, m)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;amongusout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    if p == 1 or p == 3:&lt;br /&gt;
        file.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        for linie in rezultat:&lt;br /&gt;
            file.write(&amp;quot; &amp;quot;.join(map(str, linie)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Verificare rezultat&lt;br /&gt;
rezultat_corect = verificare(rezultat, p, n, m, matrice_initiala)&lt;br /&gt;
print(&amp;quot;Rezultat corect:&amp;quot;, rezultat_corect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Se rezolva cerința 1. Matricea codurilor conține 6 camere sigure, codificate cu 0.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4327_-_Chimie&amp;diff=8654</id>
		<title>4327 - Chimie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4327_-_Chimie&amp;diff=8654"/>
		<updated>2023-12-29T11:46:31Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Eroul nostru Mateo, studiind Tabelul periodic al elementelor constată că toate elementele chimice sunt aranjate în funcție de numărul lor atomic, sunt grupate în tabel pe &#039;&#039;&#039;7 rânduri(perioade)&#039;&#039;&#039;, iar aceste rânduri au pe ultima coloană(grupa 18) elementele numite și gaze nobile iar cele 7 numere atomice ale acestora sunt: &#039;&#039;&#039;2(He), 10(Ne), 18(Ar), 36(Kr), 54(Xe), 86(Rn) și 118(Og)&#039;&#039;&#039;. Mateo primește un set de elemente chimice și dorește să afle care este diferența maximă dintre numărul atomic al gazului nobil aflat pe același rând și numărul atomic al fiecărui element din setul primit și de câte ori apare acel element. Dacă există mai multe elemente distincte cu diferența maximă se va afișa cel cu numărul atomic mai mare, urmat de numărul de apariții al acestuia.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;chimiein.txt&#039;&#039;&#039; conține numere naturale între 1 si 118, reprezentând numerele atomice ale elementelor chimice din setul primit.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;chimieout.txt&#039;&#039;&#039; va conține numărul &#039;&#039;&#039;E&#039;&#039;&#039;, reprezentând numărul atomic al elementului selectat conform enunțului și separat printr-un spațiu, numărul de apariții ap ale acestui număr.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*în fișierul de intrare pot fi până la &#039;&#039;&#039;1.000.000&#039;&#039;&#039; de numere.&lt;br /&gt;
*se garantează că în fiecare test va exista cel puțin un element cu număr atomic diferit de cel al gazelor nobile.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;chimiein.txt&lt;br /&gt;
:79 42 82 24 82 24 42 9 18&lt;br /&gt;
;chimieout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:42 2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;chimiein.txt&lt;br /&gt;
:6 25 78 120 281 300&lt;br /&gt;
;chimieout.txt&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def gaz_nobil_perioada(numar_atomic):&lt;br /&gt;
    gaze_nobile = {2: &amp;quot;He&amp;quot;, 10: &amp;quot;Ne&amp;quot;, 18: &amp;quot;Ar&amp;quot;, 36: &amp;quot;Kr&amp;quot;, 54: &amp;quot;Xe&amp;quot;, 86: &amp;quot;Rn&amp;quot;, 118: &amp;quot;Og&amp;quot;}&lt;br /&gt;
    &lt;br /&gt;
    for perioada in range(1, 8):&lt;br /&gt;
        nobil_perioada = 18 * (perioada - 1)&lt;br /&gt;
        if numar_atomic &amp;lt;= nobil_perioada + 2:&lt;br /&gt;
            return nobil_perioada + 2, gaze_nobile[nobil_perioada + 2]&lt;br /&gt;
    &lt;br /&gt;
    return 118, &amp;quot;Og&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def verificare(numere_atomice, rezultat):&lt;br /&gt;
    max_numar_atomic, numar_aparitii_max = rezultat&lt;br /&gt;
&lt;br /&gt;
    for numar_atomic in numere_atomice:&lt;br /&gt;
        nobil, _ = gaz_nobil_perioada(numar_atomic)&lt;br /&gt;
        diferenta = numar_atomic - nobil&lt;br /&gt;
        if diferenta == max_numar_atomic:&lt;br /&gt;
            numar_aparitii_max -= 1&lt;br /&gt;
&lt;br /&gt;
    return numar_aparitii_max == 0&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;chimiein.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    numere_atomice = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Calcul și afișare rezultat&lt;br /&gt;
max_numar_atomic = 0&lt;br /&gt;
numar_aparitii_max = 0&lt;br /&gt;
&lt;br /&gt;
for numar_atomic in numere_atomice:&lt;br /&gt;
    nobil, _ = gaz_nobil_perioada(numar_atomic)&lt;br /&gt;
    diferenta = numar_atomic - nobil&lt;br /&gt;
    if diferenta &amp;gt; max_numar_atomic:&lt;br /&gt;
        max_numar_atomic = diferenta&lt;br /&gt;
        numar_aparitii_max = 1&lt;br /&gt;
    elif diferenta == max_numar_atomic:&lt;br /&gt;
        numar_aparitii_max += 1&lt;br /&gt;
&lt;br /&gt;
rezultat = (max_numar_atomic, numar_aparitii_max)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;chimieout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(f&amp;quot;{max_numar_atomic} {numar_aparitii_max}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Verificare rezultat&lt;br /&gt;
rezultat_corect = verificare(numere_atomice, rezultat)&lt;br /&gt;
print(&amp;quot;Rezultat corect:&amp;quot;, rezultat_corect)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Din fișierul de intrare se citesc 9 numere dintre care 24 și 42 sunt la diferența maximă de 12 față de numărul atomic al gazului nobil de pe același rând, 36 pentru 24 și 54 pentru 42. Numărul 42 este mai mare și apare în fișierul de intrare de două ori.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2637_-_ZOO&amp;diff=8653</id>
		<title>2637 - ZOO</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2637_-_ZOO&amp;diff=8653"/>
		<updated>2023-12-29T11:42:47Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Într-o grădină zoologică reprezentată printr-o matrice &#039;&#039;&#039;A&#039;&#039;&#039; cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane, fiecare cușcă se află într-o poziție din matrice și conține &#039;&#039;&#039;x&#039;&#039;&#039; animale. De exemplu, dacă &#039;&#039;&#039;A[2][6] = 5&#039;&#039;&#039; înseamnă că în cușcă de pe linia 2 și coloana 6 se află &#039;&#039;&#039;5 animale&#039;&#039;&#039;. Să se răspundă la &#039;&#039;&#039;Q&#039;&#039;&#039; întrebări de forma &#039;&#039;&#039;i1, j1, i2, j2&#039;&#039;&#039; unde răspunsul va fi numărul de animale din dreptunghiul din matrice cu cordonatele colțului din stânga sus i1 și j1 și cordonatele colțului din dreapta jos i2 și j2, unde i reprezintă linia și j coloana.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;zooin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; si &#039;&#039;&#039;m&#039;&#039;&#039;, separate printr-un spațiu, iar pe urmatoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii, câte &#039;&#039;&#039;m&#039;&#039;&#039; numere, reprezentând matricea. Pe linia &#039;&#039;&#039;n + 2&#039;&#039;&#039; se află numărul &#039;&#039;&#039;Q&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;Q&#039;&#039;&#039; linii, câte 4 numere &#039;&#039;&#039;(i1 j1 i2 j2)&#039;&#039;&#039; cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;zooout.txt&#039;&#039;&#039; pe fiecare linie i răspunsul la întrebarea i.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n, m &amp;amp;les; 100&lt;br /&gt;
*1 &amp;amp;les; Q &amp;amp;les; 100.000&lt;br /&gt;
*numărul maxim de animale dintr-o cușcă este de &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*numerotarea liniilor și a coloanelor din matrice începe de la 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;zooin.txt&lt;br /&gt;
:4 4&lt;br /&gt;
:1 2 4 1&lt;br /&gt;
:8 1 3 2&lt;br /&gt;
:3 1 2 2&lt;br /&gt;
:8 1 3 1&lt;br /&gt;
:2&lt;br /&gt;
:2 2 4 4&lt;br /&gt;
:3 1 4 3&lt;br /&gt;
;zooout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:16&lt;br /&gt;
:18&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;zooin.txt&lt;br /&gt;
:4 3&lt;br /&gt;
:-2 5 6&lt;br /&gt;
:0 -1 7&lt;br /&gt;
:0 0 1&lt;br /&gt;
:-8 2 10&lt;br /&gt;
:1&lt;br /&gt;
:1 1 0 0&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def precalculeaza_sume(matrice, n, m):&lt;br /&gt;
    sume = [[0] * (m + 1) for _ in range(n + 1)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        for j in range(1, m + 1):&lt;br /&gt;
            sume[i][j] = matrice[i - 1][j - 1] + sume[i - 1][j] + sume[i][j - 1] - sume[i - 1][j - 1]&lt;br /&gt;
&lt;br /&gt;
    return sume&lt;br /&gt;
&lt;br /&gt;
def calculeaza_numar_animale(sume, i1, j1, i2, j2):&lt;br /&gt;
    return sume[i2][j2] - sume[i1 - 1][j2] - sume[i2][j1 - 1] + sume[i1 - 1][j1 - 1]&lt;br /&gt;
&lt;br /&gt;
def verifica_rezultate(rezultate_asteptate, rezultate_calculate):&lt;br /&gt;
    return all(r1 == r2 for r1, r2 in zip(rezultate_asteptate, rezultate_calculate))&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;zooin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    n, m = map(int, file.readline().split())&lt;br /&gt;
    matrice = [list(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
    Q = int(file.readline())&lt;br /&gt;
    intrebari = [list(map(int, file.readline().split())) for _ in range(Q)]&lt;br /&gt;
    rezultate_asteptate = [int(file.readline()) for _ in range(Q)]&lt;br /&gt;
&lt;br /&gt;
# Precalculează sumele parțiale&lt;br /&gt;
sume = precalculeaza_sume(matrice, n, m)&lt;br /&gt;
&lt;br /&gt;
# Calcul și afișare rezultate&lt;br /&gt;
rezultate_calculate = []&lt;br /&gt;
for intrebare in intrebari:&lt;br /&gt;
    i1, j1, i2, j2 = intrebare&lt;br /&gt;
    rezultate_calculate.append(calculeaza_numar_animale(sume, i1, j1, i2, j2))&lt;br /&gt;
&lt;br /&gt;
# Verificare rezultate&lt;br /&gt;
if verifica_rezultate(rezultate_asteptate, rezultate_calculate):&lt;br /&gt;
    print(&amp;quot;Rezultatele sunt corecte. Scriere în fișierul de ieșire.&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    # Scrie rezultatele în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;zooout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        for rezultat in rezultate_calculate:&lt;br /&gt;
            file.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Rezultatele nu corespund așteptărilor.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
16=1+3+2+1+2+2+1+3+1 si 18=3+1+2+8+1+3&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3311_-_Nr_Reg&amp;diff=8652</id>
		<title>3311 - Nr Reg</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3311_-_Nr_Reg&amp;diff=8652"/>
		<updated>2023-12-29T11:40:28Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Numerele regulate&#039;&#039;&#039; sunt numerele ce au ca factori primi doar numerele &#039;&#039;&#039;2, 3 și 5&#039;&#039;&#039;. Primele 20 de numere regulate sunt: &#039;&#039;&#039;1, 2, 3, 4, 5, 6, 8, 9, 10, 12, 15, 16, 18, 20, 24, 25, 27, 30, 32, 36&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;nrregin.txt&#039;&#039;&#039; conține pe prima linie numărul natural &#039;&#039;&#039;n (n&amp;lt;=10000)&#039;&#039;&#039;. Scrieți un program care determină:&lt;br /&gt;
&lt;br /&gt;
*cel de-al &#039;&#039;&#039;n&#039;&#039;&#039;-lea număr regulat, &#039;&#039;&#039;x&#039;&#039;&#039;;&lt;br /&gt;
*cel mai mic divizor &#039;&#039;&#039;d&#039;&#039;&#039; al lui &#039;&#039;&#039;x&#039;&#039;&#039; cu proprietatea că &#039;&#039;&#039;p = x / d&#039;&#039;&#039; este pătrat perfect;&lt;br /&gt;
*valoarea p.&lt;br /&gt;
Programul va scrie în fișierul &#039;&#039;&#039;nrregout.txt&#039;&#039;&#039; valorile &#039;&#039;&#039;x d p&#039;&#039;&#039;, separate prin câte spațiu.&lt;br /&gt;
&lt;br /&gt;
Exemplu: dacă n=10, al zecelea număr regulat este x=12; d=3, iar p=4.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;nrregin.txt conține pe prima linie numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;nrregout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;x d p&#039;&#039;&#039;, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 10000&lt;br /&gt;
*prin convenție s-a stabilit că numărul 1 face parte din șirul numerelor regulate.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;nrregin.txt&lt;br /&gt;
:10&lt;br /&gt;
;nrregout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:12 3 4&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;nrrgin.txt&lt;br /&gt;
:17&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def cel_mai_mic_divizor_patratic(n):&lt;br /&gt;
    numere_regulate = [1]&lt;br /&gt;
    while len(numere_regulate) &amp;lt; n:&lt;br /&gt;
        for x in numere_regulate:&lt;br /&gt;
            for d in [2, 3, 5]:&lt;br /&gt;
                if x * d not in numere_regulate:&lt;br /&gt;
                    numere_regulate.append(x * d)&lt;br /&gt;
        numere_regulate.sort()&lt;br /&gt;
&lt;br /&gt;
    x = numere_regulate[n - 1]&lt;br /&gt;
&lt;br /&gt;
    # Determinăm cel mai mic divizor pătratic&lt;br /&gt;
    d = 2&lt;br /&gt;
    while x % (d ** 2) != 0:&lt;br /&gt;
        d += 1&lt;br /&gt;
&lt;br /&gt;
    p = x // (d ** 2)&lt;br /&gt;
    return x, d, p&lt;br /&gt;
&lt;br /&gt;
def verificare_rezultat(x, d, p):&lt;br /&gt;
    # Adăugăm condițiile de verificare&lt;br /&gt;
    return x % (d ** 2) == 0 and all(x % (f ** 2) == 0 for f in [2, 3, 5])&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;nrregin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    n = int(file.readline())&lt;br /&gt;
&lt;br /&gt;
# Calcul și afișare rezultat&lt;br /&gt;
rezultat = cel_mai_mic_divizor_patratic(n)&lt;br /&gt;
&lt;br /&gt;
# Verificare rezultat&lt;br /&gt;
if verificare_rezultat(*rezultat):&lt;br /&gt;
    with open(&amp;quot;nrregout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(&amp;quot; &amp;quot;.join(map(str, rezultat)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Rezultat invalid. Verificați condițiile.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Al zecelea număr regulat este 12; numărul minim care îl divide pe 12 pentru a obține un pătrat perfect este 3 iar pătratul perfect este 4.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4021_-_Tablou_1&amp;diff=8651</id>
		<title>4021 - Tablou 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4021_-_Tablou_1&amp;diff=8651"/>
		<updated>2023-12-29T11:36:05Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Generaţi un tablou bidimensional cu proprietăţile:&lt;br /&gt;
&lt;br /&gt;
*conţine &#039;&#039;&#039;N&#039;&#039;&#039; linii şi &#039;&#039;&#039;N&#039;&#039;&#039; coloane;&lt;br /&gt;
*elementele sale sunt numere naturale nenule;&lt;br /&gt;
*suma elementelor este egală cu numărul natural nenul S;&lt;br /&gt;
*pe nici o linie şi pe nici o coloană nu există două elemente identice;&lt;br /&gt;
*diferenţa dintre cel mai mare şi cel mai mic element ale tabloului este minimă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;tablouin.txt&#039;&#039;&#039; conţine pe prima linie două numere naturale nenule &#039;&#039;&#039;N S&#039;&#039;&#039;, separate printr-un spaţiu, reprezentând numărul de linii şi de coloane ale tabloului, respectiv valoarea sumei tuturor elementelor din tablou.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;tablouout.txt&#039;&#039;&#039; va conţine N linii pe care se vor scrie elementele tabloului, câte o linie din tablou pe o linie din fişier; elementele de pe aceeaşi linie se vor separa prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;lt; N &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;&#039;0 &amp;lt; S &amp;lt; 2^31&#039;&#039;&#039;&lt;br /&gt;
*Dacă problema nu are soluţie, în fişierul de ieşire se va scrie cifra 0.&lt;br /&gt;
*Dacă problema are mai multe soluţii, în fişier se va scrie una singură.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;tablouin.txt&lt;br /&gt;
:3 51&lt;br /&gt;
&lt;br /&gt;
;tablouout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:4 6 7 &lt;br /&gt;
:7 4 6 &lt;br /&gt;
:6 7 4 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;tablouin.txt&lt;br /&gt;
:0 -10&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def is_valid(tablou):&lt;br /&gt;
    # Verificare pe linii&lt;br /&gt;
    for linie in tablou:&lt;br /&gt;
        if len(set(linie)) != len(linie):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    # Verificare pe coloane&lt;br /&gt;
    for coloana in zip(*tablou):&lt;br /&gt;
        if len(set(coloana)) != len(coloana):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def generate_tablou(N, S):&lt;br /&gt;
    if N == 1:&lt;br /&gt;
        if S == 1:&lt;br /&gt;
            return [[1]]&lt;br /&gt;
        else:&lt;br /&gt;
            return [[0]]&lt;br /&gt;
&lt;br /&gt;
    # Initializare tablou&lt;br /&gt;
    tablou = [[0] * N for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
    # Alegem coltul din stanga sus si coltul din dreapta jos&lt;br /&gt;
    tablou[0][0] = 1&lt;br /&gt;
    tablou[N - 1][N - 1] = S - (N - 1)&lt;br /&gt;
&lt;br /&gt;
    # Alegem coltul din stanga jos si coltul din dreapta sus&lt;br /&gt;
    tablou[N - 1][0] = 1&lt;br /&gt;
    tablou[0][N - 1] = S - (N - 1)&lt;br /&gt;
&lt;br /&gt;
    return tablou if is_valid(tablou) else None&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;tablouin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    N, S = map(int, file.readline().split())&lt;br /&gt;
&lt;br /&gt;
# Generare tablou&lt;br /&gt;
tablou = generate_tablou(N, S)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;tablouout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    if tablou:&lt;br /&gt;
        for linie in tablou:&lt;br /&gt;
            file.write(&#039; &#039;.join(map(str, linie)) + &#039;\n&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
        file.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1313_-_Produs_Matrice&amp;diff=8650</id>
		<title>1313 - Produs Matrice</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1313_-_Produs_Matrice&amp;diff=8650"/>
		<updated>2023-12-29T11:33:04Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau dimensiunile a două matrice, &#039;&#039;&#039;A&#039;&#039;&#039; și &#039;&#039;&#039;B&#039;&#039;&#039; și valorile acestora. Calculați produsul lor .&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;produs_matricein.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;m n&#039;&#039;&#039;, apoi începând cu următoarea linie matricea &#039;&#039;&#039;A&#039;&#039;&#039; de dimensiuni &#039;&#039;&#039;(m,n)&#039;&#039;&#039; . Pe linia &#039;&#039;&#039;m+2&#039;&#039;&#039; numărul &#039;&#039;&#039;p&#039;&#039;&#039;, apoi matricea &#039;&#039;&#039;B&#039;&#039;&#039; de dimensiuni &#039;&#039;&#039;(n,p)&#039;&#039;&#039; .&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;produs_matriceout.txt&#039;&#039;&#039; va conține matricea &#039;&#039;&#039;C&#039;&#039;&#039; , construită pe baza cerinței .&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n , m , p &amp;amp;les; 100&lt;br /&gt;
*-10.000 &amp;amp;les; A[i][j] , B[i][j] &amp;amp;les; 10.000 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;produs_matricein.txt&lt;br /&gt;
:2 3&lt;br /&gt;
:1 -2 3&lt;br /&gt;
:0 1 -1&lt;br /&gt;
:2&lt;br /&gt;
:3 1&lt;br /&gt;
:-1 -1&lt;br /&gt;
:0 1&lt;br /&gt;
;produs_matriceout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:5 6 &lt;br /&gt;
:-1 -2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;produs_matricein.txt&lt;br /&gt;
:2 3&lt;br /&gt;
:-100 2000 0&lt;br /&gt;
:5982 0 0&lt;br /&gt;
:1&lt;br /&gt;
:4683&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_matrice(file):&lt;br /&gt;
    dimensiuni = list(map(int, file.readline().split()))&lt;br /&gt;
    matrice = [list(map(int, file.readline().split())) for _ in range(dimensiuni[0])]&lt;br /&gt;
    return dimensiuni, matrice&lt;br /&gt;
&lt;br /&gt;
def scrie_matrice(file, matrice):&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        file.write(&#039; &#039;.join(map(str, linie)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
def produs_matrice(matrice_a, matrice_b):&lt;br /&gt;
    m, n = len(matrice_a), len(matrice_a[0])&lt;br /&gt;
    n1, p = len(matrice_b), len(matrice_b[0])&lt;br /&gt;
&lt;br /&gt;
    if n != n1:&lt;br /&gt;
        return None  # Nu se poate realiza produsul matriceal&lt;br /&gt;
&lt;br /&gt;
    matrice_c = [[0 for _ in range(p)] for _ in range(m)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(m):&lt;br /&gt;
        for j in range(p):&lt;br /&gt;
            for k in range(n):&lt;br /&gt;
                matrice_c[i][j] += matrice_a[i][k] * matrice_b[k][j]&lt;br /&gt;
&lt;br /&gt;
    return matrice_c&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;produs_matricein.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    dimensiuni_a, matrice_a = citeste_matrice(file)&lt;br /&gt;
    _ = file.readline()  # Ignorăm linia cu numărul p&lt;br /&gt;
    dimensiuni_b, matrice_b = citeste_matrice(file)&lt;br /&gt;
&lt;br /&gt;
# Calcul produs matriceal&lt;br /&gt;
rezultat = produs_matrice(matrice_a, matrice_b)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
if rezultat:&lt;br /&gt;
    with open(&amp;quot;produs_matriceout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        scrie_matrice(file, rezultat)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Produsul matriceal nu este posibil din cauza dimensiunilor incorecte.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Dacă se înmulțeste A cu B și rezultatul se află în C , atunci elementul C[i][j] reprezintă suma de produse dintre elementele de pe linia i a matricei A cu elementele de pe coloana j a matricei B. Având exemplul nostru , luăm C[1][2] = A[1][1] * B[1][2] + A[1][2] * B[2][2] + A[1][3] * B[3][2].&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3237_-_GCDnot1&amp;diff=8649</id>
		<title>3237 - GCDnot1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3237_-_GCDnot1&amp;diff=8649"/>
		<updated>2023-12-29T11:31:39Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau &#039;&#039;&#039;m&#039;&#039;&#039; şi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale nenule. Să se determine două numere naturale &#039;&#039;&#039;a&#039;&#039;&#039; şi &#039;&#039;&#039;b&#039;&#039;&#039; astfel încât &#039;&#039;&#039;c.m.m.d.c.(a + i , b + j) &amp;gt; 1&#039;&#039;&#039; pentru orice i = 0 , m-1 şi orice j = 0 , n-1.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;m&#039;&#039;&#039; şi &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numerele &#039;&#039;&#039;a&#039;&#039;&#039; şi &#039;&#039;&#039;b&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; m , n &amp;amp;les; 5&lt;br /&gt;
*numerele a şi b vor avea cel mult 18 cifre fiecare&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:1 2&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:6 14&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:0 100&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar ** 0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_numere_prime(m, n):&lt;br /&gt;
    for a in range(2, 1000):&lt;br /&gt;
        for b in range(a + 1, a + 1000):&lt;br /&gt;
            if all(este_prim(a) and este_prim(b) and este_prim(a + n) and este_prim(b + m) and este_prim(a + i) and este_prim(b + j) for i in range(m) for j in range(n)):&lt;br /&gt;
                return a, b&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
m = int(input(&amp;quot;Introduceți m: &amp;quot;))&lt;br /&gt;
n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Găsire numere a și b&lt;br /&gt;
a, b = gaseste_numere_prime(m, n)&lt;br /&gt;
&lt;br /&gt;
# Afișare rezultat&lt;br /&gt;
print(f&amp;quot;Numerele a și b sunt: {a}, {b}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Avem (6 , 14) = 2 &amp;gt; 1 şi (6 , 15) = 3 &amp;gt; 1.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2278_-_MMultiplication&amp;diff=8648</id>
		<title>2278 - MMultiplication</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2278_-_MMultiplication&amp;diff=8648"/>
		<updated>2023-12-29T11:30:20Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau două matrice cu elemente numere întregi. Determinați produsul lor, dacă este posibil.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;mmultiplicationin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039; reprezentând numărul de linii, respectiv de coloane, al matricii &#039;&#039;&#039;A&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii sunt câte &#039;&#039;&#039;m&#039;&#039;&#039; numere întregi separate printr-un spațiu, reprezentând elementele matricii A. Pe linia &#039;&#039;&#039;n+2&#039;&#039;&#039; a fișierului se află două numere &#039;&#039;&#039;p&#039;&#039;&#039; și &#039;&#039;&#039;q&#039;&#039;&#039; reprezentând numărul de linii, respectiv de coloane, al matricii &#039;&#039;&#039;B&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;p&#039;&#039;&#039; linii sunt câte &#039;&#039;&#039;q&#039;&#039;&#039; numere întregi separate printr-un spațiu, reprezentând elementele matricii B.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;mmultiplicationout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;-1&#039;&#039;&#039;, în cazul în care matricele nu pot fi înmulțite. Dacă matricele pot fi înmulțite, se va afișa matricea rezultată după înmulțirea celor două, câte o linie a matricei pe o linie din fișier, elementele fiecărei linii fiind separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;;les; n, m, p, q &amp;amp;les; 1000&lt;br /&gt;
*elementele matricelor vor fi numere întregi cu valoarea absolută mai mică decât &#039;&#039;&#039;2000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
;mmultiplicationin.txt&lt;br /&gt;
:4 3&lt;br /&gt;
:1 2 3&lt;br /&gt;
:4 5 6&lt;br /&gt;
:7 8 9&lt;br /&gt;
:10 11 12&lt;br /&gt;
:3 5&lt;br /&gt;
:1 2 3 4 5&lt;br /&gt;
:6 7 8 9 10&lt;br /&gt;
:11 12 13 14 0&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
;mmultiplicationout.txt&lt;br /&gt;
:46 52 58 64 25 &lt;br /&gt;
:100 115 130 145 70 &lt;br /&gt;
:154 178 202 226 115 &lt;br /&gt;
:208 241 274 307 160&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
;mmultiplicationin.txt&lt;br /&gt;
:2 3&lt;br /&gt;
:3600 0 -10&lt;br /&gt;
:54 2479 1&lt;br /&gt;
:3 2&lt;br /&gt;
:0 0&lt;br /&gt;
:1 1&lt;br /&gt;
:0 1&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_matrice(fisier):&lt;br /&gt;
    # Citeste dimensiunile matricei&lt;br /&gt;
    n, m = map(int, fisier.readline().split())&lt;br /&gt;
    matrice = []&lt;br /&gt;
&lt;br /&gt;
    # Citeste elementele matricei&lt;br /&gt;
    for _ in range(n):&lt;br /&gt;
        linie = list(map(int, fisier.readline().split()))&lt;br /&gt;
        matrice.append(linie)&lt;br /&gt;
&lt;br /&gt;
    return matrice, n, m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_input_valid(n_A, m_A, n_B, m_B):&lt;br /&gt;
    return 1 &amp;lt;= n_A &amp;lt;= 1000 and 1 &amp;lt;= m_A &amp;lt;= 1000 and 1 &amp;lt;= n_B &amp;lt;= 1000 and 1 &amp;lt;= m_B &amp;lt;= 1000 and m_A == n_B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def inmulteste_matrici(matrice_A, n_A, m_A, matrice_B, n_B, m_B):&lt;br /&gt;
    if m_A != n_B:&lt;br /&gt;
        raise ValueError(&amp;quot;Numărul de coloane al primei matrici nu coincide cu numărul de linii al celei de-a doua matrici&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    matrice_produs = [[0] * m_B for _ in range(n_A)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n_A):&lt;br /&gt;
        for j in range(m_B):&lt;br /&gt;
            for k in range(m_A):&lt;br /&gt;
                matrice_produs[i][j] += matrice_A[i][k] * matrice_B[k][j]&lt;br /&gt;
&lt;br /&gt;
    return matrice_produs, n_A, m_B&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def scrie_matrice(fisier, matrice, n, m):&lt;br /&gt;
    fisier.write(f&amp;quot;{n} {m}\n&amp;quot;)&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        fisier.write(&amp;quot; &amp;quot;.join(map(str, linie)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare din fisier&lt;br /&gt;
    with open(&amp;quot;mmultiplicationin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n_A, m_A = map(int, f.readline().split())&lt;br /&gt;
        matrice_A, _, _ = citeste_matrice(f)&lt;br /&gt;
        n_B, m_B = map(int, f.readline().split())&lt;br /&gt;
        matrice_B, _, _ = citeste_matrice(f)&lt;br /&gt;
&lt;br /&gt;
    # Verificare validitate date de intrare&lt;br /&gt;
    if not este_input_valid(n_A, m_A, n_B, m_B):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Calcularea produsului matricelor&lt;br /&gt;
    try:&lt;br /&gt;
        matrice_produs, n_produs, m_produs = inmulteste_matrici(matrice_A, n_A, m_A, matrice_B, n_B, m_B)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fisierul de ieșire&lt;br /&gt;
        with open(&amp;quot;mmultiplicationout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            scrie_matrice(g, matrice_produs, n_produs, m_produs)&lt;br /&gt;
&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        # Nu se poate efectua înmulțirea&lt;br /&gt;
        with open(&amp;quot;mmultiplicationout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            g.write(&amp;quot;-1&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1396_-_MDiferenta&amp;diff=8647</id>
		<title>1396 - MDiferenta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1396_-_MDiferenta&amp;diff=8647"/>
		<updated>2023-12-29T11:29:01Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau două matrice cu elemente numere întregi. Calculați diferența dintre prima și a doua matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;mdiferentain.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;, reprezentând dimensiunile primei matrice. Urmează &#039;&#039;&#039;n&#039;&#039;&#039; linii cu câte &#039;&#039;&#039;m&#039;&#039;&#039; valori, elementele primei matrice.&lt;br /&gt;
&lt;br /&gt;
Linia &#039;&#039;&#039;n+2&#039;&#039;&#039; conține numerele &#039;&#039;&#039;p q&#039;&#039;&#039;, reprezentând dimensiunile celei de-a doua matrice. Urmează &#039;&#039;&#039;p&#039;&#039;&#039; linii cu câte &#039;&#039;&#039;q&#039;&#039;&#039;&#039; valori, elementele celei de-a doua matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;mdiferentaout.txt&#039;&#039;&#039; va conține pe prima linie numerele &#039;&#039;&#039;S T&#039;&#039;&#039;, reprezentând dimensiunile matricei diferență. Următoarele &#039;&#039;&#039;S&#039;&#039;&#039; linii vor conține câte &#039;&#039;&#039;T&#039;&#039;&#039; valori separate prin exact un spațiu, reprezentând valorile din matricea diferență.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n , m , p , q &amp;amp;les; 100;&lt;br /&gt;
*valoarea absolută a elementelor fiecărei matrice vor fi mai mici decât 1.000.000.000;&lt;br /&gt;
*scăderea matricelor se poate efectua pentru fiecare test.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
;mdiferentain.txt&lt;br /&gt;
:3 4&lt;br /&gt;
:2 1 4 6 &lt;br /&gt;
:5 -8 5 5 &lt;br /&gt;
:2 5 -2 4 &lt;br /&gt;
:3 4&lt;br /&gt;
:3 7 -5 0 &lt;br /&gt;
:1 -4 1 5 &lt;br /&gt;
:-4 2 8 7 &lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
;mdiferentaout.txt&lt;br /&gt;
:3 4&lt;br /&gt;
:-1 -6 9 6 &lt;br /&gt;
:4 -4 4 0 &lt;br /&gt;
:6 3 -10 -3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
;mdiferentain.txt&lt;br /&gt;
:2 3&lt;br /&gt;
:5 0 -10&lt;br /&gt;
:4 300 2&lt;br /&gt;
:3 4&lt;br /&gt;
:5 10 8 -3&lt;br /&gt;
:6 100 34 -8&lt;br /&gt;
:0 15 -10 0&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_matrice(fisier):&lt;br /&gt;
    # Citeste dimensiunile matricei&lt;br /&gt;
    n, m = map(int, fisier.readline().split())&lt;br /&gt;
    matrice = []&lt;br /&gt;
&lt;br /&gt;
    # Citeste elementele matricei&lt;br /&gt;
    for _ in range(n):&lt;br /&gt;
        linie = list(map(int, fisier.readline().split()))&lt;br /&gt;
        matrice.append(linie)&lt;br /&gt;
&lt;br /&gt;
    return matrice, n, m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_input_valid(n1, m1, n2, m2):&lt;br /&gt;
    return 1 &amp;lt;= n1 &amp;lt;= 100 and 1 &amp;lt;= m1 &amp;lt;= 100 and 1 &amp;lt;= n2 &amp;lt;= 100 and 1 &amp;lt;= m2 &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def diferenta_matricelor(matrice1, n1, m1, matrice2, n2, m2):&lt;br /&gt;
    if n1 != n2 or m1 != m2:&lt;br /&gt;
        raise ValueError(&amp;quot;Dimensiunile matricelor nu corespund&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    matrice_diferenta = [[0] * m1 for _ in range(n1)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n1):&lt;br /&gt;
        for j in range(m1):&lt;br /&gt;
            matrice_diferenta[i][j] = matrice1[i][j] - matrice2[i][j]&lt;br /&gt;
&lt;br /&gt;
    return matrice_diferenta, n1, m1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def scrie_matrice(fisier, matrice, n, m):&lt;br /&gt;
    fisier.write(f&amp;quot;{n} {m}\n&amp;quot;)&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        fisier.write(&amp;quot; &amp;quot;.join(map(str, linie)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare din fisier&lt;br /&gt;
    with open(&amp;quot;mdiferentain.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n1, m1 = map(int, f.readline().split())&lt;br /&gt;
        matrice1, _, _ = citeste_matrice(f)&lt;br /&gt;
        n2, m2 = map(int, f.readline().split())&lt;br /&gt;
        matrice2, _, _ = citeste_matrice(f)&lt;br /&gt;
&lt;br /&gt;
    # Verificare validitate date de intrare&lt;br /&gt;
    if not este_input_valid(n1, m1, n2, m2):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Calcularea diferenței matricelor&lt;br /&gt;
    try:&lt;br /&gt;
        matrice_diferenta, n_diferenta, m_diferenta = diferenta_matricelor(matrice1, n1, m1, matrice2, n2, m2)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fisierul de iesire&lt;br /&gt;
        with open(&amp;quot;mdiferentaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            scrie_matrice(g, matrice_diferenta, n_diferenta, m_diferenta)&lt;br /&gt;
&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(f&amp;quot;EROARE: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1395_-_MSuma&amp;diff=8646</id>
		<title>1395 - MSuma</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1395_-_MSuma&amp;diff=8646"/>
		<updated>2023-12-29T11:27:36Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dau două matrice cu elemente numere întregi. Calculați suma lor.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;msumain.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m&#039;&#039;&#039;, reprezentând dimensiunile primei matrice. Urmează &#039;&#039;&#039;n&#039;&#039;&#039; linii cu câte &#039;&#039;&#039;m&#039;&#039;&#039; valori, elementele primei matrice.&lt;br /&gt;
&lt;br /&gt;
Linia &#039;&#039;&#039;n+2&#039;&#039;&#039; conține numerele &#039;&#039;&#039;p q&#039;&#039;&#039;, reprezentând dimensiunile celei de-a doua matrice. Urmează &#039;&#039;&#039;p&#039;&#039;&#039; linii cu câte &#039;&#039;&#039;q valori&#039;&#039;&#039;, elementele celei de-a doua matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;msumaout.txt&#039;&#039;&#039; va conține pe prima linie numerele &#039;&#039;&#039;S T&#039;&#039;&#039;, reprezentând dimensiunile matricei sumă. Următoarele &#039;&#039;&#039;S&#039;&#039;&#039; linii vor conține câte &#039;&#039;&#039;T&#039;&#039;&#039; valori separate prin exact un spațiu, reprezentând valorile din matricea sumă.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n , m , p , q &amp;amp;les; 100;&lt;br /&gt;
*valoarea absolută a elementelor fiecărei matrice vor fi mai mici decât 1.000.000.000;&lt;br /&gt;
*adunarea matricelor se poate efectua pentru fiecare test.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
;msumain.txt&lt;br /&gt;
:3 4&lt;br /&gt;
:2 1 4 6 &lt;br /&gt;
:5 -8 5 5 &lt;br /&gt;
:2 5 -2 4 &lt;br /&gt;
:3 4&lt;br /&gt;
:3 7 -5 0 &lt;br /&gt;
:1 -4 1 5 &lt;br /&gt;
:-4 2 8 7 &lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
;msumaout.txt&lt;br /&gt;
:3 4&lt;br /&gt;
:5 8 -1 6 &lt;br /&gt;
:6 -12 6 10 &lt;br /&gt;
:-2 7 6 11&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
;msumain.txt&lt;br /&gt;
:2 3&lt;br /&gt;
:-3 7 0&lt;br /&gt;
:8000 1 -2&lt;br /&gt;
:3 2&lt;br /&gt;
:7 0&lt;br /&gt;
:5438 870 &lt;br /&gt;
:0 0&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_matrice(fisier):&lt;br /&gt;
    # Citeste dimensiunile matricei&lt;br /&gt;
    n, m = map(int, fisier.readline().split())&lt;br /&gt;
    matrice = []&lt;br /&gt;
&lt;br /&gt;
    # Citeste elementele matricei&lt;br /&gt;
    for _ in range(n):&lt;br /&gt;
        linie = list(map(int, fisier.readline().split()))&lt;br /&gt;
        matrice.append(linie)&lt;br /&gt;
&lt;br /&gt;
    return matrice, n, m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def este_input_valid(n1, m1, n2, m2):&lt;br /&gt;
    return 1 &amp;lt;= n1 &amp;lt;= 100 and 1 &amp;lt;= m1 &amp;lt;= 100 and 1 &amp;lt;= n2 &amp;lt;= 100 and 1 &amp;lt;= m2 &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_matricelor(matrice1, n1, m1, matrice2, n2, m2):&lt;br /&gt;
    if n1 != n2 or m1 != m2:&lt;br /&gt;
        raise ValueError(&amp;quot;Dimensiunile matricelor nu corespund&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    matrice_suma = [[0] * m1 for _ in range(n1)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n1):&lt;br /&gt;
        for j in range(m1):&lt;br /&gt;
            matrice_suma[i][j] = matrice1[i][j] + matrice2[i][j]&lt;br /&gt;
&lt;br /&gt;
    return matrice_suma, n1, m1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def scrie_matrice(fisier, matrice, n, m):&lt;br /&gt;
    fisier.write(f&amp;quot;{n} {m}\n&amp;quot;)&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        fisier.write(&amp;quot; &amp;quot;.join(map(str, linie)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare din fisier&lt;br /&gt;
    with open(&amp;quot;msumain.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n1, m1 = map(int, f.readline().split())&lt;br /&gt;
        matrice1, _, _ = citeste_matrice(f)&lt;br /&gt;
        n2, m2 = map(int, f.readline().split())&lt;br /&gt;
        matrice2, _, _ = citeste_matrice(f)&lt;br /&gt;
&lt;br /&gt;
    # Verificare validitate date de intrare&lt;br /&gt;
    if not este_input_valid(n1, m1, n2, m2):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Calcularea sumei matricelor&lt;br /&gt;
    try:&lt;br /&gt;
        matrice_suma, n_suma, m_suma = suma_matricelor(matrice1, n1, m1, matrice2, n2, m2)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fisierul de iesire&lt;br /&gt;
        with open(&amp;quot;msumaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            scrie_matrice(g, matrice_suma, n_suma, m_suma)&lt;br /&gt;
&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(f&amp;quot;EROARE: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1888_-_Cartonase&amp;diff=8645</id>
		<title>1888 - Cartonase</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1888_-_Cartonase&amp;diff=8645"/>
		<updated>2023-12-29T11:26:32Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Vlad este pasionat de jocuri și vrea să vă propună unul. Pe o tablă cu &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane, inițial goală, se așază la fiecare mutare un cartonaș în căsuța de coordonate &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039; cu un număr pe el reprezentând numărul de vecini (Nord, Sud, Est, Vest) deja completați. Primul cartonaș pus este &#039;&#039;&#039;0&#039;&#039;&#039; deoarece nu este nimic completat încă. Întrebarea este care este suma tuturor numerelor de pe cartonașele așezate pe tabla după ce aceasta este completată?&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;cartonasein.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;m&#039;&#039;&#039;, și pe următoarele &#039;&#039;&#039;n*m&#039;&#039;&#039; linii câte o pereche de numere x și y cu semnificația că se pune un cartonaș în căsuța cu aceste coordonate.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;cartonaseout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând suma numerelor de pe cartonașe.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n, m &amp;amp;les; 10.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
;cartonasein.txt&lt;br /&gt;
:2 5&lt;br /&gt;
:2 4&lt;br /&gt;
:2 5&lt;br /&gt;
:1 1&lt;br /&gt;
:1 3&lt;br /&gt;
:1 5&lt;br /&gt;
:2 2&lt;br /&gt;
:1 4&lt;br /&gt;
:1 2&lt;br /&gt;
:2 3&lt;br /&gt;
:2 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
;cartonaseout.txt&lt;br /&gt;
:13&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
;cartonasein.txt&lt;br /&gt;
:3 4&lt;br /&gt;
:-5 6&lt;br /&gt;
:1 1&lt;br /&gt;
:0 5&lt;br /&gt;
:9 -3&lt;br /&gt;
:-10 -6&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_input_valid(n, m, cartonase):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10000 and 1 &amp;lt;= m &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for x, y in cartonase:&lt;br /&gt;
        if not (1 &amp;lt;= x &amp;lt;= n and 1 &amp;lt;= y &amp;lt;= m):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;cartonasein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n, m = map(int, f.readline().split())&lt;br /&gt;
    cartonase = [tuple(map(int, f.readline().split())) for _ in range(n * m)]&lt;br /&gt;
&lt;br /&gt;
# Verificare validitate date de intrare&lt;br /&gt;
if not este_input_valid(n, m, cartonase):&lt;br /&gt;
    print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    # Inițializare matrice&lt;br /&gt;
    tabla = [[0] * m for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    # Parcurgere și actualizare valori pentru fiecare cartonaș&lt;br /&gt;
    for x, y in cartonase:&lt;br /&gt;
        tabla[x - 1][y - 1] = 1  # Se pune cartonașul pe tabla&lt;br /&gt;
&lt;br /&gt;
        # Se actualizează vecinii&lt;br /&gt;
        if x &amp;gt; 1:&lt;br /&gt;
            tabla[x - 2][y - 1] += 1  # Vecinul din Nord&lt;br /&gt;
        if x &amp;lt; n:&lt;br /&gt;
            tabla[x][y - 1] += 1  # Vecinul din Sud&lt;br /&gt;
        if y &amp;gt; 1:&lt;br /&gt;
            tabla[x - 1][y - 2] += 1  # Vecinul din Vest&lt;br /&gt;
        if y &amp;lt; m:&lt;br /&gt;
            tabla[x - 1][y] += 1  # Vecinul din Est&lt;br /&gt;
&lt;br /&gt;
    # Calcul suma numerelor de pe cartonașe&lt;br /&gt;
    suma = sum(tabla[i][j] for i in range(n) for j in range(m))&lt;br /&gt;
&lt;br /&gt;
    # Scriere rezultat în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;cartonaseout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(str(suma) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Suma cartonașelor este 13.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3203_-_SimonaH&amp;diff=8644</id>
		<title>3203 - SimonaH</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3203_-_SimonaH&amp;diff=8644"/>
		<updated>2023-12-29T11:25:33Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Din perfecţiunea Simonei H. a apărut şi noţiunea de &#039;&#039;&#039;p&#039;&#039;&#039;-număr, un număr natural cu cifre nenule, ale cărui cifre le putem permuta. Să se afle suma resturilor împărţirii tuturor numerelor obţinute prin permutarea cifrelor lui &#039;&#039;&#039;n&#039;&#039;&#039; la un număr dat &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;simonahin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;simonahout.txt&#039;&#039;&#039; va conține pe prima linie suma resturilor împărţirii tuturor numerelor obţinute prin permutarea cifrelor lui &#039;&#039;&#039;n&#039;&#039;&#039; la numărul dat &#039;&#039;&#039;p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 10^18&lt;br /&gt;
*2 &amp;amp;les; p &amp;amp;les; 5&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;simonahin.txt&lt;br /&gt;
:325 5&lt;br /&gt;
;simonahout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:10&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;simonahin.txt&lt;br /&gt;
:652 1&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_input_valid(n, p):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 10**18 and 2 &amp;lt;= p &amp;lt;= 5&lt;br /&gt;
&lt;br /&gt;
def putere_modulo(x, y, p):&lt;br /&gt;
    result = 1&lt;br /&gt;
    x = x % p&lt;br /&gt;
    &lt;br /&gt;
    while y &amp;gt; 0:&lt;br /&gt;
        if y % 2 == 1:&lt;br /&gt;
            result = (result * x) % p&lt;br /&gt;
        y = y // 2&lt;br /&gt;
        x = (x * x) % p&lt;br /&gt;
        &lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def suma_resturi_permutari(n):&lt;br /&gt;
    suma_totala = 0&lt;br /&gt;
    &lt;br /&gt;
    for p in [2, 3, 4, 5]:&lt;br /&gt;
        cifre = [int(digit) for digit in str(n)]&lt;br /&gt;
        factorial_inv = 1&lt;br /&gt;
        cifre_freq = [0] * 10&lt;br /&gt;
        &lt;br /&gt;
        for cifra in cifre:&lt;br /&gt;
            cifre_freq[cifra] += 1&lt;br /&gt;
            &lt;br /&gt;
        for i in range(1, 10):&lt;br /&gt;
            factorial_inv = (factorial_inv * putere_modulo(i, cifre_freq[i], p)) % p&lt;br /&gt;
        &lt;br /&gt;
        invers_mod_p = putere_modulo(factorial_inv, p-2, p)&lt;br /&gt;
        suma_totala = (suma_totala + invers_mod_p) % p&lt;br /&gt;
    &lt;br /&gt;
    return suma_totala&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    n, p = map(int, input(&amp;quot;Introduceți numerele n și p, separate prin spațiu: &amp;quot;).split())&lt;br /&gt;
&lt;br /&gt;
    # Verificare validitate date de intrare&lt;br /&gt;
    if not este_input_valid(n, p):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Calcul și afișare rezultat în fișierul de ieșire&lt;br /&gt;
        rezultat = suma_resturi_permutari(n)&lt;br /&gt;
        with open(&amp;quot;simonahout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
            f.write(str(rezultat) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Numerele 325, 235, 532, 352, 253, 523 împărţite la 5 dau resturile 0,0,2,2,3,3, suma acestora fiind 10.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4194_-_EchipaFB&amp;diff=8643</id>
		<title>4194 - EchipaFB</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4194_-_EchipaFB&amp;diff=8643"/>
		<updated>2023-12-29T11:24:26Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Într-o şcoală sunt &#039;&#039;&#039;F&#039;&#039;&#039; fete şi &#039;&#039;&#039;B&#039;&#039;&#039; băieţi. Pentru fiecare valoare a lui &#039;&#039;&#039;K&#039;&#039;&#039; de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;F+B&#039;&#039;&#039;, aflaţi în câte moduri se poate alcătui o echipă formată din &#039;&#039;&#039;K&#039;&#039;&#039; elevi, care să conţină un număr impar de fete.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;F&#039;&#039;&#039; şi &#039;&#039;&#039;B&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran, pentru fiecare &#039;&#039;&#039;K&#039;&#039;&#039; de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;F+B&#039;&#039;&#039;, numărul de moduri în care putem forma echipa, modulo &#039;&#039;&#039;998244353&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; F,B &amp;amp;les; 100.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:3 2&lt;br /&gt;
;Iesire&lt;br /&gt;
;Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:3 6 4 2 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:-10 7&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
MODULO = 998244353&lt;br /&gt;
&lt;br /&gt;
def este_input_valid(F, B):&lt;br /&gt;
    return 1 &amp;lt;= F &amp;lt;= 100000 and 1 &amp;lt;= B &amp;lt;= 100000&lt;br /&gt;
&lt;br /&gt;
def calculeaza_moduri(F, B):&lt;br /&gt;
    rezultate = []&lt;br /&gt;
    total_elevi = F + B&lt;br /&gt;
&lt;br /&gt;
    for K in range(1, total_elevi + 1):&lt;br /&gt;
        moduri = 0&lt;br /&gt;
        for numar_fete in range(1, min(K, F) + 1, 2):&lt;br /&gt;
            numar_baieti = K - numar_fete&lt;br /&gt;
            if numar_baieti &amp;lt;= B:&lt;br /&gt;
                moduri += 1&lt;br /&gt;
&lt;br /&gt;
        rezultate.append(moduri % MODULO)&lt;br /&gt;
&lt;br /&gt;
    return rezultate&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citire date de intrare&lt;br /&gt;
    F = int(input(&amp;quot;Introduceți numărul de fete (F): &amp;quot;))&lt;br /&gt;
    B = int(input(&amp;quot;Introduceți numărul de băieți (B): &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    # Verificare validitate date de intrare&lt;br /&gt;
    if not este_input_valid(F, B):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Calcul și afișare rezultate&lt;br /&gt;
        rezultate = calculeaza_moduri(F, B)&lt;br /&gt;
        for K, moduri in enumerate(rezultate, start=1):&lt;br /&gt;
            print(f&amp;quot;Pentru K = {K}, numărul de moduri este: {moduri}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Să notăm cu A,B,C fetele şi cu X,Y băieţii. Pentru K=1 echipele pot fi A, B, respectiv C. Pentru K=2: AX, AY, BX, BY, CX, CY. Pentru K=3: AXY, BXY, CXY, ABC. Pentru K=4: ABCX, ABCY. Pentru K=5: ABCXY.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3206_-_Nr_Inversiuni&amp;diff=8642</id>
		<title>3206 - Nr Inversiuni</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3206_-_Nr_Inversiuni&amp;diff=8642"/>
		<updated>2023-12-29T11:23:17Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Se dă șirul &#039;&#039;&#039;a1, a2, …, an&#039;&#039;&#039; care este o permutare a mulțimii &#039;&#039;&#039;{1, 2, ..., n}&#039;&#039;&#039;. O &#039;&#039;&#039;inversiune&#039;&#039;&#039; în permutare este o pereche &#039;&#039;&#039;(i, j)&#039;&#039;&#039; cu proprietatea că &#039;&#039;&#039;i &amp;lt; j&#039;&#039;&#039; și &#039;&#039;&#039;a[i] &amp;gt; a[j]&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Să se determine numărul inversiunilor permutării.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spații, reprezentând permutarea.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Programul va afișa pe ecran numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând numărul inversiunilor permutării.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 100.000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5&lt;br /&gt;
:4 2 5 1 3&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:6&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
:5&lt;br /&gt;
:-2 8 0 3&lt;br /&gt;
;Iesire&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_permutare_valida(n, permutare):&lt;br /&gt;
    if n != len(permutare):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    elemente_unice = set(permutare)&lt;br /&gt;
    return len(elemente_unice) == n and all(1 &amp;lt;= elem &amp;lt;= n for elem in elemente_unice)&lt;br /&gt;
&lt;br /&gt;
def numara_inversiuni(arr):&lt;br /&gt;
    if len(arr) &amp;lt;= 1:&lt;br /&gt;
        return arr, 0&lt;br /&gt;
&lt;br /&gt;
    mijloc = len(arr) // 2&lt;br /&gt;
    stanga, inversiuni_stanga = numara_inversiuni(arr[:mijloc])&lt;br /&gt;
    dreapta, inversiuni_dreapta = numara_inversiuni(arr[mijloc:])&lt;br /&gt;
&lt;br /&gt;
    concatenat, inversiuni_split = combina_si_numara(stanga, dreapta)&lt;br /&gt;
&lt;br /&gt;
    inversiuni_totale = inversiuni_stanga + inversiuni_dreapta + inversiuni_split&lt;br /&gt;
&lt;br /&gt;
    return concatenat, inversiuni_totale&lt;br /&gt;
&lt;br /&gt;
def combina_si_numara(stanga, dreapta):&lt;br /&gt;
    concatenat = []&lt;br /&gt;
    inversiuni_split = 0&lt;br /&gt;
    i = j = 0&lt;br /&gt;
&lt;br /&gt;
    while i &amp;lt; len(stanga) and j &amp;lt; len(dreapta):&lt;br /&gt;
        if stanga[i] &amp;lt;= dreapta[j]:&lt;br /&gt;
            concatenat.append(stanga[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            concatenat.append(dreapta[j])&lt;br /&gt;
            inversiuni_split += len(stanga) - i&lt;br /&gt;
            j += 1&lt;br /&gt;
&lt;br /&gt;
    concatenat.extend(stanga[i:])&lt;br /&gt;
    concatenat.extend(dreapta[j:])&lt;br /&gt;
&lt;br /&gt;
    return concatenat, inversiuni_split&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
    permutare = list(map(int, input(&amp;quot;Introduceți permutarea: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
    if este_permutare_valida(n, permutare):&lt;br /&gt;
        _, inversiuni = numara_inversiuni(permutare)&lt;br /&gt;
        print(&amp;quot;Numărul inversiunilor permutării:&amp;quot;, inversiuni)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Permutarea introdusă nu este validă.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Cele 6 inversiuni sunt date de perechile de indici (1,2), (1,4), (1,5), (2,4), (3,4), (3,5).&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2182_-_3_Cifre&amp;diff=8641</id>
		<title>2182 - 3 Cifre</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2182_-_3_Cifre&amp;diff=8641"/>
		<updated>2023-12-29T11:21:21Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Așa cum știm, lui Gigel îi place să se joace cu numerele. A scris pe caiet un număr, apoi a văzut că din acesta se pot extrage mai multe numere cu trei cifre consecutive. De exemplu, a scris pe caiet &#039;&#039;&#039;20172017&#039;&#039;&#039;; numerele cu trei cifre consecutive care se pot extrage sunt &#039;&#039;&#039;201, 172, 720 și 201&#039;&#039;&#039;. Gigel începe să-și pună diferite întrebări: care este cel mai mare număr cu trei cifre consecutive obținut? Dar cel mai mic? De câte ori apar ele? Unde apar? Care este cel mai mare număr de apariții a unui număr cu trei cifre?&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Fiind numărul un număr natural &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale &#039;&#039;&#039;x (100 ≤ x ≤ 4294967295)&#039;&#039;&#039; să se determine:&lt;br /&gt;
1. Cel mai mic și cel mai mare număr din trei cifre consecutive care apar în cele &#039;&#039;&#039;n&#039;&#039;&#039; numere, de câte ori apar ele, în ce număr &#039;&#039;&#039;x[1]&#039;&#039;&#039; apar prima dată și în ce număr &#039;&#039;&#039;x[2]&#039;&#039;&#039; apar ultima dată.&lt;br /&gt;
2. Numerele din trei cifre consecutive care apar de cele mai multe ori în cele n numere.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;3cifrein.txt&#039;&#039;&#039; conţine pe prima linie, separate printr-un spațiu, numărul natural n, reprezentând numărul de numere și cerința (1 sau 2). Pe cea de a doua linie sunt scrise cele n numere naturale &#039;&#039;&#039;x[1] x[2] ... x[n]&#039;&#039;&#039;, separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;3cifreout.txt&#039;&#039;&#039; va conține, pentru cerința 1, pe prima linie patru valori naturale &#039;&#039;&#039;nrmin nrapmin x1min x1max&#039;&#039;&#039;, separate prin câte un spațiu, reprezentând numărul minim de trei cifre care apare, numărul de apariții a acestuia, numărul în care apare prima dată, respectiv numărul în care apare ultima dată, iar pe linia a doua alte patru valori naturale &#039;&#039;&#039;nrmax nrapmax x2min x2max&#039;&#039;&#039;, separate prin câte un spațiu, reprezentând numărul maxim de trei cifre care apare, numărul de apariții a acestuia, numărul în care apare prima dată, respectiv numărul în care apare ultima dată. Pentru cerința 2, fișierul de ieșire va conține pe prima linie numărul maxim de apariții a numerelor din trei cifre consecutive care apar, iar pe linia a doua, separate prin câte un spațiu, numerele respective în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 500000&lt;br /&gt;
*100 &amp;amp;les; x[i] &amp;amp;les; 4294967295&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
;3cifrein.txt&lt;br /&gt;
:7 1&lt;br /&gt;
:415 5213 2017 666 12345678 10000013 13&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
;3cifreout.txt&lt;br /&gt;
:100 1 10000013 10000013&lt;br /&gt;
:678 1 12345678 12345678&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
;3cifreint.txt&lt;br /&gt;
:7 1&lt;br /&gt;
:25 521013 206678 666 12345678 10101013 13&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_valid(x):&lt;br /&gt;
    for num in x:&lt;br /&gt;
        if not (100 &amp;lt;= num &amp;lt;= 4294967295):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citim datele de intrare din fișier&lt;br /&gt;
    with open(&amp;quot;3cifre.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, cerinta = map(int, f.readline().split())&lt;br /&gt;
        numere = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă datele de intrare sunt valide&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 500000) or not este_valid(numere):&lt;br /&gt;
        print(&amp;quot;Date de intrare nevalide.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if cerinta == 1:&lt;br /&gt;
        aparitii, max_aparitii, max_aparitii_numere = cautare_3_cifre(numere)&lt;br /&gt;
&lt;br /&gt;
        # Găsim cel mai mic triplet&lt;br /&gt;
        min_triplet = min(aparitii, key=lambda x: x if aparitii[x][&#039;count&#039;] &amp;gt; 0 else float(&#039;inf&#039;))&lt;br /&gt;
        nrmin = min_triplet&lt;br /&gt;
        nrapmin = aparitii[min_triplet][&#039;count&#039;]&lt;br /&gt;
        x1min = aparitii[min_triplet][&#039;first_index&#039;]&lt;br /&gt;
        x1max = aparitii[min_triplet][&#039;last_index&#039;]&lt;br /&gt;
&lt;br /&gt;
        # Găsim cel mai mare triplet&lt;br /&gt;
        max_triplet = max(aparitii, key=lambda x: aparitii[x][&#039;count&#039;])&lt;br /&gt;
        nrmax = max_triplet&lt;br /&gt;
        nrapmax = aparitii[max_triplet][&#039;count&#039;]&lt;br /&gt;
        x2min = aparitii[max_triplet][&#039;first_index&#039;]&lt;br /&gt;
        x2max = aparitii[max_triplet][&#039;last_index&#039;]&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatele în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;3cifreout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(f&amp;quot;{nrmin} {nrapmin} {x1min} {x1max}\n&amp;quot;)&lt;br /&gt;
            fout.write(f&amp;quot;{nrmax} {nrapmax} {x2min} {x2max}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    elif cerinta == 2:&lt;br /&gt;
        aparitii, max_aparitii, max_aparitii_numere = cautare_3_cifre(numere)&lt;br /&gt;
&lt;br /&gt;
        # Găsim numerele cu cele mai multe apariții&lt;br /&gt;
        max_aparitii_numere.sort()&lt;br /&gt;
        with open(&amp;quot;3cifreout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(f&amp;quot;{max_aparitii}\n&amp;quot;)&lt;br /&gt;
            fout.write(&amp;quot; &amp;quot;.join(map(str, max_aparitii_numere)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Se observă că atât 111 cât și 113 apar de câte 3 ori.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1266_-_Cauta_Nr_In_Matrice&amp;diff=8640</id>
		<title>1266 - Cauta Nr In Matrice</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1266_-_Cauta_Nr_In_Matrice&amp;diff=8640"/>
		<updated>2023-12-29T11:20:18Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se dă o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii şi &#039;&#039;&#039;m&#039;&#039;&#039; coloane ce conţine numere naturale astfel încât parcurgând matricea pe prima linie de la stânga la dreapta, pe a doua linie de la dreapta la stânga, pe a treia linie de la stânga la drepta, ş.a.m.d., toate elementele matricei vor forma un şir strict crescător. Fiind date &#039;&#039;&#039;p&#039;&#039;&#039; numere naturale ordonate strict crescător, să se afişeze pentru fiecare numărul liniei şi coloanei unde acesta se găseşte în matrice, respectiv &#039;&#039;&#039;0&#039;&#039;&#039; dacă acesta nu se găseşte în matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;cautanrinmatricein.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;m&#039;&#039;&#039; reprezentând dimensiunile matricei , pe următoarele n linii câte m numere aranjate conform enunţului reprezentând elementele matricei, pe următoarea linie numărul p, iar pe ultima linie cele &#039;&#039;&#039;p&#039;&#039;&#039; numere în ordine strict crescătoare ce trebuie căutate în matrice.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;cautanrinmatriceout.txt&#039;&#039;&#039; va conține pe primele &#039;&#039;&#039;p&#039;&#039;&#039; linii numărul liniei şi coloanei pe care se află în matrice fiecare din cele &#039;&#039;&#039;p&#039;&#039;&#039; numere date, respectiv &#039;&#039;&#039;0&#039;&#039;&#039; dacă numărul nu se găseşte în matrice.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n , m &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*elementele matricei sunt numere naturale mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; p &amp;amp;les; 1.000.000&#039;&#039;&#039;&lt;br /&gt;
*cele p numere vor fi mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&lt;br /&gt;
;cautanrinmatricein.txt&lt;br /&gt;
: 3 4&lt;br /&gt;
: 2 5 11 14&lt;br /&gt;
: 29 27 23 19&lt;br /&gt;
: 32 38 44 59&lt;br /&gt;
: 3&lt;br /&gt;
: 11 24 38&lt;br /&gt;
&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
;cautanrinmatriceout.txt&lt;br /&gt;
: 1 3&lt;br /&gt;
: 0&lt;br /&gt;
: 3 2&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&lt;br /&gt;
;cautanrinmatricein.txt&lt;br /&gt;
: 3 2&lt;br /&gt;
: 5 8&lt;br /&gt;
: 12 19&lt;br /&gt;
: 23 21&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def este_matrice_valida(matrice):&lt;br /&gt;
    # Verificăm dacă matricea este ordonată strict crescător pe fiecare linie&lt;br /&gt;
    for linie in matrice:&lt;br /&gt;
        if linie != sorted(linie):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def cautare_in_matrice(matrice, p, numere_cautate):&lt;br /&gt;
    rezultate = []&lt;br /&gt;
&lt;br /&gt;
    for numar in numere_cautate:&lt;br /&gt;
        gasit = False&lt;br /&gt;
        i, j = 0, 0&lt;br /&gt;
&lt;br /&gt;
        while i &amp;lt; len(matrice) and j &amp;lt; len(matrice[0]):&lt;br /&gt;
            if matrice[i][j] == numar:&lt;br /&gt;
                gasit = True&lt;br /&gt;
                rezultate.append((i + 1, j + 1))  # Linia și coloana în matrice (indexare de la 1)&lt;br /&gt;
                break&lt;br /&gt;
            elif matrice[i][j] &amp;lt; numar:&lt;br /&gt;
                i += 1&lt;br /&gt;
            else:&lt;br /&gt;
                j += 1&lt;br /&gt;
&lt;br /&gt;
        if not gasit:&lt;br /&gt;
            rezultate.append((0, 0))&lt;br /&gt;
&lt;br /&gt;
    return rezultate&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citim datele de intrare din fișier&lt;br /&gt;
    with open(&amp;quot;cautanrinmatricein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m = map(int, f.readline().split())&lt;br /&gt;
        matrice = [list(map(int, f.readline().split())) for _ in range(n)]&lt;br /&gt;
        p = int(f.readline())&lt;br /&gt;
        numere_cautate = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă matricea este validă&lt;br /&gt;
    if not este_matrice_valida(matrice):&lt;br /&gt;
        print(&amp;quot;Matricea nu este ordonată strict crescător pe fiecare linie.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Căutăm fiecare număr în matrice&lt;br /&gt;
    rezultate = cautare_in_matrice(matrice, p, numere_cautate)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatele în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;cautanrinmatriceout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            f.write(f&amp;quot;{rezultat[0]} {rezultat[1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&lt;br /&gt;
Numărul 11 se află în matrice pe linia 1 coloana 3, numărul 24 nu se află în matrice, iar numărul 38 se află în matrice pe linia 3, coloana 2.&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3935_-_determinanta&amp;diff=8637</id>
		<title>3935 - determinanta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3935_-_determinanta&amp;diff=8637"/>
		<updated>2023-12-29T11:18:38Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se consideră o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii şi  &#039;&#039;&#039;n&#039;&#039;&#039; coloane şi elemente egale cu &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;. Să se calculeze determinantul matricei.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;determinantain.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte o pereche de numere naturale &#039;&#039;&#039;l, c&#039;&#039;&#039;, reprezentând faptul că elementul matricei de pe linia &#039;&#039;&#039;l&#039;&#039;&#039; şi coloana &#039;&#039;&#039;c&#039;&#039;&#039; are valoarea &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;determinantaout.txt&#039;&#039;&#039; va conține pe prima linie valoarea determinantului matricei.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*2 &amp;amp;les; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 100.000&lt;br /&gt;
*1 &amp;amp;les; &#039;&#039;&#039;l,c&#039;&#039;&#039; &amp;amp;les; n&lt;br /&gt;
*Exceptând elementele din poziţiile &#039;&#039;&#039;(l,c)&#039;&#039;&#039;, care sunt egale cu &#039;&#039;&#039;1&#039;&#039;&#039;, celelalte elemente ale matricei au valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;determinantain.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 1&lt;br /&gt;
: 2 2&lt;br /&gt;
: 3 3&lt;br /&gt;
: Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
; determinantaout.txt&lt;br /&gt;
: 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;determinantain.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 2 2&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 2&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def este_intrare_valida(n, pozitii):&lt;br /&gt;
    # Verificăm dacă toate pozițiile sunt în limitele matricei&lt;br /&gt;
    for linie, coloana in pozitii:&lt;br /&gt;
        if not (1 &amp;lt;= linie &amp;lt;= n and 1 &amp;lt;= coloana &amp;lt;= n):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def citeste_intrare(numefisier):&lt;br /&gt;
    with open(numefisier, &#039;r&#039;) as fisier:&lt;br /&gt;
        n = int(fisier.readline())&lt;br /&gt;
        pozitii = [tuple(map(int, fisier.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    if este_intrare_valida(n, pozitii):&lt;br /&gt;
        matrice = [[0] * n for _ in range(n)]&lt;br /&gt;
        for linie, coloana in pozitii:&lt;br /&gt;
            matrice[linie - 1][coloana - 1] = 1&lt;br /&gt;
        return matrice, n&lt;br /&gt;
    else:&lt;br /&gt;
        raise ValueError(&amp;quot;Date de intrare nevalide&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def scrie_iesire(numefisier, rezultat):&lt;br /&gt;
    with open(numefisier, &#039;w&#039;) as fisier:&lt;br /&gt;
        fisier.write(str(rezultat) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
def calculeaza_determinant(matrice, dimensiune):&lt;br /&gt;
    # Cazul de bază: matrice de dimensiune 2x2&lt;br /&gt;
    if dimensiune == 2:&lt;br /&gt;
        return matrice[0][0] * matrice[1][1] - matrice[0][1] * matrice[1][0]&lt;br /&gt;
&lt;br /&gt;
    determinant = 0&lt;br /&gt;
    for i in range(dimensiune):&lt;br /&gt;
        # Eliminăm linia și coloana corespunzătoare elementului selectat&lt;br /&gt;
        submatrice = [linie[:i] + linie[i+1:] for linie in matrice[1:]]&lt;br /&gt;
        semn = (-1) ** i&lt;br /&gt;
        determinant += semn * matrice[0][i] * calculeaza_determinant(submatrice, dimensiune - 1)&lt;br /&gt;
&lt;br /&gt;
    return determinant&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fisier_intrare = &amp;quot;determinantain.txt&amp;quot;&lt;br /&gt;
    fisier_iesire = &amp;quot;determinantaout.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim matricea și dimensiunea din fișierul de intrare&lt;br /&gt;
        matrice, dimensiune = citeste_intrare(fisier_intrare)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm determinantul&lt;br /&gt;
        rezultat_determinant = calculeaza_determinant(matrice, dimensiune)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
        scrie_iesire(fisier_iesire, rezultat_determinant)&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(f&amp;quot;Eroare: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3935_-_determinanta&amp;diff=8636</id>
		<title>3935 - determinanta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3935_-_determinanta&amp;diff=8636"/>
		<updated>2023-12-29T11:17:53Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se consideră o matrice cu &#039;&#039;&#039;n&#039;&#039;&#039; linii şi  &#039;&#039;&#039;n&#039;&#039;&#039; coloane şi elemente egale cu &#039;&#039;&#039;0&#039;&#039;&#039; sau &#039;&#039;&#039;1&#039;&#039;&#039;. Să se calculeze determinantul matricei.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;determinantain.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii câte o pereche de numere naturale &#039;&#039;&#039;l, c&#039;&#039;&#039;, reprezentând faptul că elementul matricei de pe linia &#039;&#039;&#039;l&#039;&#039;&#039; şi coloana &#039;&#039;&#039;c&#039;&#039;&#039; are valoarea &#039;&#039;&#039;1&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;determinantaout.txt&#039;&#039;&#039; va conține pe prima linie valoarea determinantului matricei.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*2 &amp;amp;les; &#039;&#039;&#039;n&#039;&#039;&#039; &amp;amp;les; 100.000&lt;br /&gt;
*1 &amp;amp;les; &#039;&#039;&#039;l,c&#039;&#039;&#039; &amp;amp;les; n&lt;br /&gt;
*Exceptând elementele din poziţiile &#039;&#039;&#039;(l,c)&#039;&#039;&#039;, care sunt egale cu &#039;&#039;&#039;1&#039;&#039;&#039;, celelalte elemente ale matricei au valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;determinantain.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 1 1&lt;br /&gt;
: 2 2&lt;br /&gt;
: 3 3&lt;br /&gt;
: Datele introduse corespund restrictiilor impuse.&lt;br /&gt;
; determinantaout.txt&lt;br /&gt;
: 1&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;determinantain.txt&lt;br /&gt;
: 3&lt;br /&gt;
: 2 2&lt;br /&gt;
: 3 3&lt;br /&gt;
: 2 2&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
def is_valid_input(n, positions):&lt;br /&gt;
    # Verificăm dacă toate pozițiile sunt în limitele matricei&lt;br /&gt;
    for l, c in positions:&lt;br /&gt;
        if not (1 &amp;lt;= l &amp;lt;= n and 1 &amp;lt;= c &amp;lt;= n):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        positions = [tuple(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    if is_valid_input(n, positions):&lt;br /&gt;
        matrix = [[0] * n for _ in range(n)]&lt;br /&gt;
        for l, c in positions:&lt;br /&gt;
            matrix[l-1][c-1] = 1&lt;br /&gt;
        return matrix, n&lt;br /&gt;
    else:&lt;br /&gt;
        raise ValueError(&amp;quot;Invalid input data&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def write_output(file_name, result):&lt;br /&gt;
    with open(file_name, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(str(result) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    input_file = &amp;quot;determinantain.txt&amp;quot;&lt;br /&gt;
    output_file = &amp;quot;determinantaout.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        # Citim matricea și dimensiunea din fișierul de intrare&lt;br /&gt;
        matrix, size = read_input(input_file)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm determinantul&lt;br /&gt;
        determinant_result = calc_determinant(matrix, size)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
        write_output(output_file, determinant_result)&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(f&amp;quot;Error: {e}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0139_-_n311_-_Obtinere_numar_prin_aplicare_repetata_de_operatii&amp;diff=8553</id>
		<title>0139 - n311 - Obtinere numar prin aplicare repetata de operatii</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0139_-_n311_-_Obtinere_numar_prin_aplicare_repetata_de_operatii&amp;diff=8553"/>
		<updated>2023-12-27T13:30:47Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Pornind de la numărul &#039;&#039;&#039;1&#039;&#039;&#039;,orice număr natural se poate obţine aplicând repetat în mod convenabil operaţii din cele de mai jos:&lt;br /&gt;
&lt;br /&gt;
*înmulţire cu &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
*adunare cu &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
*scădere cu &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
De exemplu numărul &#039;&#039;&#039;24&#039;&#039;&#039; se poate obţine astfel:&lt;br /&gt;
&lt;br /&gt;
Adunăm &#039;&#039;&#039;1: 1 + 1 = 2&#039;&#039;&#039;&lt;br /&gt;
Adunăm &#039;&#039;&#039;1: 2 + 1 = 3&#039;&#039;&#039;&lt;br /&gt;
Înmultim cu &#039;&#039;&#039;3: 3 * 3 = 9&#039;&#039;&#039;&lt;br /&gt;
Scădem &#039;&#039;&#039;1: 9 - 1 = 8&#039;&#039;&#039;&lt;br /&gt;
Înmulțim cu &#039;&#039;&#039;3: 8 * 3 = 24&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Urmărind operaţiile de la stânga la dreapta pentru exemplul de mai sus, şirul de operaţii se codifică cu 1, 1, 3, -1, 3.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Cunoscând numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;,să se tipărească şirul de operaţii prin care se poate ajunge de la numărul iniţial 1 la numărul final n.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;n311in.txt&#039;&#039;&#039; conţine pe prima linie valoarea numărului natural &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;n311out.txt&#039;&#039;&#039; va conţine pe prima linie şirul de operaţii format din numere întregi separate prin câte un spaţiu, cu semnificaţia de mai sus.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n %les; 2 000 000000;&lt;br /&gt;
*Pot exista mai multe soluţii, se acceptă oricare, dacă se încadrează în timpul de execuţie;&lt;br /&gt;
*Nu este obligatorie folosirea tuturor tipurilor de operaţii.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;n311in.txt&lt;br /&gt;
:24&lt;br /&gt;
;n311out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 1 3 -1 3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;n311in.txt&lt;br /&gt;
:-121&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 2000000000&lt;br /&gt;
&lt;br /&gt;
def generare_sir_operatii(n):&lt;br /&gt;
    operatii = []&lt;br /&gt;
&lt;br /&gt;
    def backtracking(current, target):&lt;br /&gt;
        if current == target:&lt;br /&gt;
            return True&lt;br /&gt;
        if current &amp;gt; target:&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
        # Încercăm să adunăm 1&lt;br /&gt;
        if backtracking(current + 1, target):&lt;br /&gt;
            operatii.append(1)&lt;br /&gt;
            return True&lt;br /&gt;
&lt;br /&gt;
        # Încercăm să scădem 1&lt;br /&gt;
        if backtracking(current - 1, target):&lt;br /&gt;
            operatii.append(-1)&lt;br /&gt;
            return True&lt;br /&gt;
&lt;br /&gt;
        # Încercăm să înmulțim cu 3&lt;br /&gt;
        if backtracking(current * 3, target):&lt;br /&gt;
            operatii.append(3)&lt;br /&gt;
            return True&lt;br /&gt;
&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Apelăm funcția de backtracking&lt;br /&gt;
    backtracking(1, n)&lt;br /&gt;
&lt;br /&gt;
    return operatii&lt;br /&gt;
&lt;br /&gt;
# Citire din fișierul de intrare&lt;br /&gt;
with open(&#039;n311in.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    n = int(file.readline())&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verifica_restrictii(n):&lt;br /&gt;
    # Generare și afișare șir de operații&lt;br /&gt;
    operatii = generare_sir_operatii(n)&lt;br /&gt;
&lt;br /&gt;
    # Scriere în fișierul de ieșire&lt;br /&gt;
    with open(&#039;n311out.txt&#039;, &#039;w&#039;) as file_out:&lt;br /&gt;
        file_out.write(&amp;quot; &amp;quot;.join(map(str, operatii)))&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Date de intrare nevalide.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0139_-_n311_-_Obtinere_numar_prin_aplicare_repetata_de_operatii&amp;diff=8552</id>
		<title>0139 - n311 - Obtinere numar prin aplicare repetata de operatii</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0139_-_n311_-_Obtinere_numar_prin_aplicare_repetata_de_operatii&amp;diff=8552"/>
		<updated>2023-12-27T13:29:32Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Pornind de la numărul &#039;&#039;&#039;1&#039;&#039;&#039;,orice număr natural se poate obţine aplicând repetat în mod convenabil operaţii din cele de mai jos:&lt;br /&gt;
&lt;br /&gt;
*înmulţire cu &#039;&#039;&#039;3&#039;&#039;&#039;&lt;br /&gt;
*adunare cu &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
*scădere cu &#039;&#039;&#039;1&#039;&#039;&#039;&lt;br /&gt;
De exemplu numărul &#039;&#039;&#039;24&#039;&#039;&#039; se poate obţine astfel:&lt;br /&gt;
&lt;br /&gt;
Adunăm &#039;&#039;&#039;1: 1 + 1 = 2&#039;&#039;&#039;&lt;br /&gt;
Adunăm &#039;&#039;&#039;1: 2 + 1 = 3&#039;&#039;&#039;&lt;br /&gt;
Înmultim cu &#039;&#039;&#039;3: 3 * 3 = 9&#039;&#039;&#039;&lt;br /&gt;
Scădem &#039;&#039;&#039;1: 9 - 1 = 8&#039;&#039;&#039;&lt;br /&gt;
Înmulțim cu &#039;&#039;&#039;3: 8 * 3 = 24&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Urmărind operaţiile de la stânga la dreapta pentru exemplul de mai sus, şirul de operaţii se codifică cu 1, 1, 3, -1, 3.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Cunoscând numărul natural &#039;&#039;&#039;n&#039;&#039;&#039;,să se tipărească şirul de operaţii prin care se poate ajunge de la numărul iniţial 1 la numărul final n.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;n311in.txt&#039;&#039;&#039; conţine pe prima linie valoarea numărului natural &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;n311out.txt&#039;&#039;&#039; va conţine pe prima linie şirul de operaţii format din numere întregi separate prin câte un spaţiu, cu semnificaţia de mai sus.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n %les; 2 000 000000;&lt;br /&gt;
*Pot exista mai multe soluţii, se acceptă oricare, dacă se încadrează în timpul de execuţie;&lt;br /&gt;
*Nu este obligatorie folosirea tuturor tipurilor de operaţii.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;n311in.txt&lt;br /&gt;
:24&lt;br /&gt;
;n311out.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 1 3 -1 3&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;n311in.txt&lt;br /&gt;
:-121&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def sir_operatii(n):&lt;br /&gt;
    operatii = []&lt;br /&gt;
&lt;br /&gt;
    while n != 1:&lt;br /&gt;
        operatii.append(n)&lt;br /&gt;
        if n % 3 == 0:&lt;br /&gt;
            n = n // 3&lt;br /&gt;
        elif (n - 1) % 3 == 0:&lt;br /&gt;
            n = n - 1&lt;br /&gt;
        elif (n + 1) % 3 == 0:&lt;br /&gt;
            n = n + 1&lt;br /&gt;
&lt;br /&gt;
    operatii.append(1)&lt;br /&gt;
    return operatii[::-1]  # Inversăm șirul pentru a obține operațiile de la 1 la n&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;n311.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    n = int(file.readline())&lt;br /&gt;
&lt;br /&gt;
# Rezolvare problema&lt;br /&gt;
rezultat = sir_operatii(n)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;n311.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
    file_out.write(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0198_-_Submultimi&amp;diff=8551</id>
		<title>0198 - Submultimi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0198_-_Submultimi&amp;diff=8551"/>
		<updated>2023-12-27T13:25:54Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se citește un număr natural nenul &#039;&#039;&#039;n&#039;&#039;&#039;. Să se afişeze, în ordine lexicografică, toate submulțimile nevide ale mulţimii &#039;&#039;&#039;{1,2,..,n}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;submultimiin.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;submultimiout.txt&#039;&#039;&#039; va conţine pe fiecare linie câte o submulțime, elementele unei submulțimi fiind separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 10&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;submultimiin.txt&lt;br /&gt;
:4&lt;br /&gt;
;submultimiout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 &lt;br /&gt;
:1 2 &lt;br /&gt;
:1 2 3 &lt;br /&gt;
:1 2 3 4 &lt;br /&gt;
:1 2 4 &lt;br /&gt;
:1 3 &lt;br /&gt;
:1 3 4 &lt;br /&gt;
:1 4 &lt;br /&gt;
:2 &lt;br /&gt;
:2 3 &lt;br /&gt;
:2 3 4 &lt;br /&gt;
:2 4 &lt;br /&gt;
:3 &lt;br /&gt;
:3 4 &lt;br /&gt;
:4 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;submultimiin.txt&lt;br /&gt;
:19736&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def verifica_restrictii(n):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 10&lt;br /&gt;
&lt;br /&gt;
def genereaza_submultimi(n):&lt;br /&gt;
    submultimi = []&lt;br /&gt;
&lt;br /&gt;
    def backtrack(start, current):&lt;br /&gt;
        submultimi.append(current[:])&lt;br /&gt;
&lt;br /&gt;
        for i in range(start, n + 1):&lt;br /&gt;
            current.append(i)&lt;br /&gt;
            backtrack(i + 1, current)&lt;br /&gt;
            current.pop()&lt;br /&gt;
&lt;br /&gt;
    backtrack(1, [])&lt;br /&gt;
    return submultimi[1:]  # Excludem mulțimea vidă&lt;br /&gt;
&lt;br /&gt;
# Citire din fișierul de intrare&lt;br /&gt;
with open(&#039;submultimiin.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    n = int(file.readline())&lt;br /&gt;
&lt;br /&gt;
# Verificare restricții&lt;br /&gt;
if verifica_restrictii(n):&lt;br /&gt;
    # Generare submulțimi&lt;br /&gt;
    rezultat = genereaza_submultimi(n)&lt;br /&gt;
&lt;br /&gt;
    # Scriere în fișierul de ieșire&lt;br /&gt;
    with open(&#039;submultimiout.txt&#039;, &#039;w&#039;) as file_out:&lt;br /&gt;
        for subset in rezultat:&lt;br /&gt;
            file_out.write(&amp;quot; &amp;quot;.join(map(str, subset)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Date de intrare nevalide.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0198_-_Submultimi&amp;diff=8550</id>
		<title>0198 - Submultimi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0198_-_Submultimi&amp;diff=8550"/>
		<updated>2023-12-27T13:24:40Z</updated>

		<summary type="html">&lt;p&gt;Mesarosdenisa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
&lt;br /&gt;
Se citește un număr natural nenul &#039;&#039;&#039;n&#039;&#039;&#039;. Să se afişeze, în ordine lexicografică, toate submulțimile nevide ale mulţimii &#039;&#039;&#039;{1,2,..,n}&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;submultimiin.txt&#039;&#039;&#039; conţine pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;submultimiout.txt&#039;&#039;&#039; va conţine pe fiecare linie câte o submulțime, elementele unei submulțimi fiind separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 10&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;submultimiin.txt&lt;br /&gt;
:4&lt;br /&gt;
;submultimiout.txt&lt;br /&gt;
:Datele introduse corespund restrictiilor impuse&lt;br /&gt;
:1 &lt;br /&gt;
:1 2 &lt;br /&gt;
:1 2 3 &lt;br /&gt;
:1 2 3 4 &lt;br /&gt;
:1 2 4 &lt;br /&gt;
:1 3 &lt;br /&gt;
:1 3 4 &lt;br /&gt;
:1 4 &lt;br /&gt;
:2 &lt;br /&gt;
:2 3 &lt;br /&gt;
:2 3 4 &lt;br /&gt;
:2 4 &lt;br /&gt;
:3 &lt;br /&gt;
:3 4 &lt;br /&gt;
:4 &lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;submultimiin.txt&lt;br /&gt;
:19736&lt;br /&gt;
&lt;br /&gt;
:Datele introduse nu corespund restrictiilor impuse&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python3&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def generare_submultimi(n, subset, index):&lt;br /&gt;
    if index == n + 1:&lt;br /&gt;
        if len(subset) &amp;gt; 0:&lt;br /&gt;
            print(&amp;quot; &amp;quot;.join(map(str, subset)))&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Includem elementul la index în submulțime&lt;br /&gt;
    generare_submultimi(n, subset + [index], index + 1)&lt;br /&gt;
&lt;br /&gt;
    # Nu includem elementul la index în submulțime&lt;br /&gt;
    generare_submultimi(n, subset, index + 1)&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;submultimi.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    n = int(file.readline().strip())&lt;br /&gt;
&lt;br /&gt;
# Rezolvare problema&lt;br /&gt;
generare_submultimi(n, [], 1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Mesarosdenisa</name></author>
	</entry>
</feed>