<?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=Andrada378</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=Andrada378"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Andrada378"/>
	<updated>2026-06-17T08:25:20Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3490_-_Permutari_AB&amp;diff=9222</id>
		<title>3490 - Permutari AB</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3490_-_Permutari_AB&amp;diff=9222"/>
		<updated>2024-01-08T17:40:18Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Se consideră 2 permutări A şi B ale mulţimii {1, 2, ..., N}. Printr-o operaţie se pot selecta două elemente adiacente din B şi să se interschimbe (i.e. swap(B[i], B[i + 1]) pentru 1 ≤ i &amp;lt; N).&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine numărul minim de operaţii care trebuiesc efectuate pentru a transforma pe B în A.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare permutariab.in conţine pe prima linie numărul natural N. Pe a doua linie se află N numere naturale, separate prin câte un spaţiu, reprezentând permutarea A. Pe a treia linie se află de asemenea N numere naturale, separate prin câte un spaţiu, reprezentând permutarea B.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Fişierul de ieşire permutariab.out conţine pe prima linie numărul natural X, reprezentând numărul minim de operaţii care trebuiesc efectuate pentru a transforma pe B în A.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ N ≤ 100.000&lt;br /&gt;
* Pentru 70% din teste, 1 ≤ N ≤ 1000&lt;br /&gt;
&lt;br /&gt;
=== Exemplu 1 ===&lt;br /&gt;
permutariabin.txt&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
2 1 3 4 5 6&lt;br /&gt;
&lt;br /&gt;
1 3 4 5 6 2&lt;br /&gt;
&lt;br /&gt;
permutariabout.txt&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
=== Exemplu 2: ===&lt;br /&gt;
permutariabin.txt&lt;br /&gt;
&lt;br /&gt;
10&lt;br /&gt;
&lt;br /&gt;
1 5 2 3 4 6 9 10 7 8&lt;br /&gt;
&lt;br /&gt;
3 9 5 1 2 7 8 10 4 6&lt;br /&gt;
&lt;br /&gt;
permutariabout.txt&lt;br /&gt;
&lt;br /&gt;
17&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
În primul exemplu, se interschimbă 2 cu 6, apoi 2 cu 5, apoi 2 cu 4, apoi 2 cu 3 apoi 2 cu 1.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def citeste_permutari():&lt;br /&gt;
    nume_fisier = &#039;permutariabin.txt&#039;&lt;br /&gt;
    with open(nume_fisier, &#039;r&#039;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        &lt;br /&gt;
        # Adaugăm verificarea pentru intervalul specificat&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
            print(&amp;quot;Numarul N nu se afla in intervalul permis.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        &lt;br /&gt;
        permutare_A = list(map(int, file.readline().split()))&lt;br /&gt;
        permutare_B = list(map(int, file.readline().split()))&lt;br /&gt;
    return n, permutare_A, permutare_B&lt;br /&gt;
&lt;br /&gt;
def numar_minim_operatii(n, permutare_A, permutare_B):&lt;br /&gt;
    numar_operatii = 0&lt;br /&gt;
    for i in range(n - 1):&lt;br /&gt;
        if permutare_B[i] != permutare_A[i]:&lt;br /&gt;
            index = permutare_B.index(permutare_A[i])&lt;br /&gt;
            permutare_B[i], permutare_B[index] = permutare_B[index], permutare_B[i]&lt;br /&gt;
            numar_operatii += 1&lt;br /&gt;
    return numar_operatii&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    numar, permutare_A, permutare_B = citeste_permutari()&lt;br /&gt;
    numar_operatii = numar_minim_operatii(numar, permutare_A, permutare_B)&lt;br /&gt;
    nume_fisier_iesire = &#039;permutariabout.txt&#039;&lt;br /&gt;
    with open(nume_fisier_iesire, &#039;w&#039;) as file_out:&lt;br /&gt;
        file_out.write(f&amp;quot;{numar_operatii}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;   &lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4051_-_Lumina&amp;diff=9104</id>
		<title>4051 - Lumina</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4051_-_Lumina&amp;diff=9104"/>
		<updated>2024-01-05T20:33:15Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Explicație */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &#039;&#039;&#039;Cerința&#039;&#039;&#039; ==&lt;br /&gt;
Se consideră un panou de dimensiuni n×m&lt;br /&gt;
&lt;br /&gt;
pe care sunt așezate nm  becuri. Becul de pe rândul i și coloana j se notează (i,j). Inițial, fiecare bec este stins (0) sau aprins (1). Putem efectua următoarele comenzi de oricâte ori:&lt;br /&gt;
&lt;br /&gt;
* Se alege un rând i(1≤i≤n) și se inversează starea tuturor becurilor de pe rândul i (0→1,1→0);&lt;br /&gt;
* Se alege o coloană j (1≤j≤m) și se inversează starea tuturor becurilor de pe coloana j (0→1,1→0).&lt;br /&gt;
&lt;br /&gt;
Găsiți o secvență cu un număr minim de comenzi care conduce la aprinderea tuturor becurilor.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie se află numerele n și m. Pe a i-a dintre următoarele n linii se găsește o secvență de mnumere care sunt fie 0, fie 1. Al j-lea număr reprezintă starea becului (i,j).&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa DA, dacă este posibilă aprinderea tuturor becurilor și NU în caz contrar. Dacă răspunsul este DA, pe a doua linie se vor afișa indicii liniilor inversate. Apoi, pe a treia linie se vor afișa indicii coloanelor inversate. Atât pe a doua, cât și pe a treia linie, numerele vor fi afișate în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări ==&lt;br /&gt;
&lt;br /&gt;
* 2≤n,m≤500&lt;br /&gt;
* Se garantează că pentru testele date, există o unică soluție optimă&lt;br /&gt;
* Pentru 10 de puncte, se garantează că soluția optimă inversează doar rânduri&lt;br /&gt;
* Pentru alte 10 de puncte, se garantează că soluția optimă inversează un rând și o coloană&lt;br /&gt;
&lt;br /&gt;
== Exemplu1 ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
1 0 1 1 0&lt;br /&gt;
&lt;br /&gt;
0 1 0 0 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
DA&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se inversează rândul 2 și coloanele 2 și 5.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2: ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
1 0 1 1 1&lt;br /&gt;
&lt;br /&gt;
0 1 0 0 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
NU&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se poate demonstra că nu există soluție pentru acest test.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, m):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 500) or not (2 &amp;lt;= m &amp;lt;= 500):&lt;br /&gt;
        raise ValueError(&amp;quot;Dimensiunile matricei trebuie să fie între 2 și 500 inclusiv.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def schimba_randuri_coloane(matrice, randuri, coloane):&lt;br /&gt;
    randuri_schimbate = []&lt;br /&gt;
    coloane_schimbate = []&lt;br /&gt;
&lt;br /&gt;
    # Parcurgem toate liniile și coloanele și verificăm dacă becul trebuie inversat&lt;br /&gt;
    for i in range(randuri):&lt;br /&gt;
        if matrice[i][0] == 0:&lt;br /&gt;
            randuri_schimbate.append(i + 1)  # Adăugăm indexul rândului pentru a fi inversat&lt;br /&gt;
            for j in range(coloane):&lt;br /&gt;
                matrice[i][j] = 1 if matrice[i][j] == 0 else 0  # Inversăm starea becului&lt;br /&gt;
&lt;br /&gt;
    for j in range(coloane):&lt;br /&gt;
        count = sum(matrice[i][j] for i in range(randuri))&lt;br /&gt;
        if count &amp;lt;= randuri // 2:&lt;br /&gt;
            coloane_schimbate.append(j + 1)  # Adăugăm indexul coloanei pentru a fi inversată&lt;br /&gt;
            for i in range(randuri):&lt;br /&gt;
                matrice[i][j] = 1 if matrice[i][j] == 0 else 0  # Inversăm starea becului&lt;br /&gt;
&lt;br /&gt;
    return matrice, randuri_schimbate, coloane_schimbate&lt;br /&gt;
&lt;br /&gt;
def all_lights_on(matrice, randuri, coloane):&lt;br /&gt;
    for randuri in matrice:&lt;br /&gt;
        if 0 in randuri:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def rezolva_luminile():&lt;br /&gt;
    n, m = map(int, input().split())&lt;br /&gt;
    matrice = [list(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
    matrice, randuri_schimbate, coloane_schimbate = schimba_randuri_coloane(matrice, n, m)&lt;br /&gt;
&lt;br /&gt;
    if all_lights_on(matrice, n, m):&lt;br /&gt;
        print(&amp;quot;DA&amp;quot;)&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, randuri_schimbate)))&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, coloane_schimbate)))&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__==&amp;quot;__main__&amp;quot;:&lt;br /&gt;
    rezolva_luminile()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1819_-_Copaci&amp;diff=9103</id>
		<title>1819 - Copaci</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1819_-_Copaci&amp;diff=9103"/>
		<updated>2024-01-05T20:21:03Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: Pagină nouă: == Enunț == Pe un teren dreptunghiular de dimensiuni m şi n, din loc în loc sunt plantaţi copaci. Pentru fiecare copac se cunosc rândul şi coloana pe care este plantat, între ei fiind spaţii neplantate. Doi copaci se consideră consecutivi dacă mergând pe coloane, numai de la nord către sud, între ei sunt doar spaţii neplantate.  == Cerința == Să se determine cea mai mare distanţă dintre doi copaci consecutivi şi toate perechile de copaci între care există...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Pe un teren dreptunghiular de dimensiuni m şi n, din loc în loc sunt plantaţi copaci. Pentru fiecare copac se cunosc rândul şi coloana pe care este plantat, între ei fiind spaţii neplantate. Doi copaci se consideră consecutivi dacă mergând pe coloane, numai de la nord către sud, între ei sunt doar spaţii neplantate.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine cea mai mare distanţă dintre doi copaci consecutivi şi toate perechile de copaci între care există această distanţă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul copaciin.txt conţine pe prima linie, m, n si k (m numărul de randuri, n numărul de coloane şi k numărul de copaci), separate prin cate un spaţiu; pe fiecare dintre următoarele k linii, câte o pereche de numere x, y (separate prin cate un spaţiu) reprezentând rândul, respectiv coloana pe care se află un copac.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul copaciout.txt va conţine pe prima linie distanţa maximă dintre doi copaci consecutivi, iar pe fiecare dintre următoarele linii câte patru numere întregi x1, y1, x2, y2 (separate prin cate un spaţiu), reprezentând coordonatele (rândul şi coloana) a doi copaci consecutivi între care distanţa este maximă.&lt;br /&gt;
&lt;br /&gt;
== Observaţii ==&lt;br /&gt;
Distanţa dintre dintre doi copaci consecutivi este dată de numărul de spaţii neplantate dintre ei.&lt;br /&gt;
&lt;br /&gt;
Dacă sunt mai multe perechi de copaci între care distanţa este maximă acestea se vor afişa în ordinea crescătoare a numărului de coloană.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 &amp;lt; m,n ≤ 500&lt;br /&gt;
* 2 ≤ k ≤ 10000&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&#039;&#039;&#039;copaciin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 4 2&lt;br /&gt;
&lt;br /&gt;
2 4&lt;br /&gt;
&lt;br /&gt;
3 4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;copaciout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
2 4 3 4&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Sunt 2 copaci plantaţi pe coloana a 4-a şi între ei nu se află nici un spaţiu neplantat.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&#039;&#039;&#039;copaciin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6 7 7&lt;br /&gt;
&lt;br /&gt;
1 1&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
2 6&lt;br /&gt;
&lt;br /&gt;
3 3&lt;br /&gt;
&lt;br /&gt;
4 2&lt;br /&gt;
&lt;br /&gt;
5 4&lt;br /&gt;
&lt;br /&gt;
6 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;copaciout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
8&lt;br /&gt;
&lt;br /&gt;
1 1 4 2&lt;br /&gt;
&lt;br /&gt;
5 4 2 6&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Sunt 7 copaci. Distanţa maximă între 2 copaci consecutivi este egală cu 8.&lt;br /&gt;
&lt;br /&gt;
Sunt 2 perechi de copaci care se află la această distanţă. Prima pereche are copacii pe coloanele 1 respectiv 2, a doua pereche are copacii pe coloanele 4 respectiv 6.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def is_valid(m, n, k):&lt;br /&gt;
    return 1 &amp;lt; m &amp;lt;= 500 and 1 &amp;lt; n &amp;lt;= 500 and 2 &amp;lt;= k &amp;lt;= 10000&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;copaciin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f_in:&lt;br /&gt;
    n, m, p = map(int, f_in.readline().split())&lt;br /&gt;
    a = [[0] * 501 for _ in range(501)]&lt;br /&gt;
&lt;br /&gt;
    for _ in range(p):&lt;br /&gt;
        x, y = map(int, f_in.readline().split())&lt;br /&gt;
        a[x][y] = 1&lt;br /&gt;
&lt;br /&gt;
l, lmax, st = 0, -1, -1&lt;br /&gt;
&lt;br /&gt;
for j in range(1, m + 1):&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        if a[i][j] == 1:&lt;br /&gt;
            if l &amp;gt; lmax and st != -1:&lt;br /&gt;
                lmax = l&lt;br /&gt;
            st = a[i][j]&lt;br /&gt;
            l = 0&lt;br /&gt;
        if a[i][j] == 0:&lt;br /&gt;
            l += 1&lt;br /&gt;
&lt;br /&gt;
st = -1&lt;br /&gt;
with open(&amp;quot;copaciout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    f_out.write(str(lmax) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    dr = 0&lt;br /&gt;
    for j in range(1, m + 1):&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            if a[i][j] == 1:&lt;br /&gt;
                if l == lmax and st != -1:&lt;br /&gt;
                    f_out.write(f&amp;quot;{dr} {st} {i} {j}\n&amp;quot;)&lt;br /&gt;
                st, dr, l = j, i, 0&lt;br /&gt;
            if a[i][j] == 0:&lt;br /&gt;
                l += 1&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4263_-_ifelse&amp;diff=9099</id>
		<title>4263 - ifelse</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4263_-_ifelse&amp;diff=9099"/>
		<updated>2024-01-05T14:48:28Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerință ==&lt;br /&gt;
Studiind instrucțiunea if, Alinutza a aflat că ramura else se asociază celui mai apropiat if neasociat încă. Aprofundând studiul, a extras din fiecare program scris cuvintele if și else. Din neatenție a transcris greșit, pierzând asocierea corectă if else. Ajutați-o voi să aibă scrierea corectă, folosind un număr minim de modificări. O modificare înseamnă să înlocuim un cuvânt if cu else sau un cuvânt else cu if.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fisierul ifelsein.txt conține pe prima linie un număr natural n. Pe fiecare din următoarele n linii, se află câte un șir de caractere. Fiecare șir conține cuvinte if și else separate prin câte un spațiu, scrise cu litere mici.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Fisierul ifelseout.txt va conține n valori reprezentând numărul minim de modificări efectuate astfel încât asocierea if else să fie corectă, sau -1 dacă nu este posibil pentru șirul de pe linia corespunzătoare.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* în scrierea corectă fiecare if va avea asociat un else;&lt;br /&gt;
* n este un număr natural mai mic sau egal cu 10;&lt;br /&gt;
* fiecare linie poate avea cel mult 10000 de cuvinte if sau else separate prin cate un spațiu&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&#039;&#039;&#039;ifelsein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
if else if if else if&lt;br /&gt;
&lt;br /&gt;
if else if else&lt;br /&gt;
&lt;br /&gt;
if else if&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ifelseout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
-1&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pentru primul caz va fi efectuată o singura modificare, ultimul if va fi transformat în else&lt;br /&gt;
&lt;br /&gt;
În al doilea caz scrierea este corectă.&lt;br /&gt;
&lt;br /&gt;
În al treilea caz nu se poate stabili o asociere corectă if else.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_șir(sir):&lt;br /&gt;
    stiva = []&lt;br /&gt;
    for cuvant in sir:&lt;br /&gt;
        if cuvant == &amp;quot;if&amp;quot;:&lt;br /&gt;
            stiva.append(&amp;quot;if&amp;quot;)&lt;br /&gt;
        elif cuvant == &amp;quot;else&amp;quot;:&lt;br /&gt;
            if not stiva:&lt;br /&gt;
                return False&lt;br /&gt;
            else:&lt;br /&gt;
                stiva.pop()&lt;br /&gt;
    return not stiva&lt;br /&gt;
&lt;br /&gt;
def corect_associere(sir):&lt;br /&gt;
    if len(sir) &amp;gt; 10000:&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
    if not validare_șir(sir):&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
    stiva = []&lt;br /&gt;
    modificari = 0&lt;br /&gt;
&lt;br /&gt;
    for cuvant in sir:&lt;br /&gt;
        if cuvant == &amp;quot;if&amp;quot;:&lt;br /&gt;
            stiva.append(&amp;quot;if&amp;quot;)&lt;br /&gt;
        elif cuvant == &amp;quot;else&amp;quot;:&lt;br /&gt;
            stiva.pop()&lt;br /&gt;
&lt;br /&gt;
    return modificari&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;ifelsein.txt&amp;quot;, &amp;quot;r&amp;quot;) as input_file:&lt;br /&gt;
        n = int(input_file.readline().strip())&lt;br /&gt;
        if n &amp;gt; 10:&lt;br /&gt;
            print(&amp;quot;Eroare: n trebuie să fie mai mic sau egal cu 10.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        siruri = [input_file.readline().split() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    rezultate = [corect_associere(sir) for sir in siruri]&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;ifelseout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
        output_file.write(&amp;quot;\n&amp;quot;.join(map(str, rezultate)))&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>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4253_-_Text_OJI&amp;diff=9098</id>
		<title>4253 - Text OJI</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4253_-_Text_OJI&amp;diff=9098"/>
		<updated>2024-01-05T14:30:38Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Vasile lucrează intens la un editor de texte. Un text este format din unul sau mai multe paragrafe. Orice paragraf se termină cu Enter şi oricare două cuvinte consecutive din acelaşi paragraf sunt separate prin spaţii (unul sau mai multe). În funcţie de modul de setare a paginii, numărul maxim de caractere care încap în pagină pe o linie este unic determinat (Max).&lt;br /&gt;
&lt;br /&gt;
Funcţia pe care Vasile trebuie să o implementeze acum este alinierea în pagină a fiecărui paragraf din text la stânga şi la dreapta. Pentru aceasta el va trebui să împartă fiecare paragraf în linii separate de lungime Max (fiecare linie terminată cu Enter). Împărţirea se realizează punând numărul maxim posibil de cuvinte pe fiecare linie, fără împărţirea cuvintelor în silabe. Pentru aliniere stânga-dreapta, el trebuie să repartizeze spaţii în mod uniform între cuvintele de pe fiecare linie, astfel încât ultimul caracter de pe linie să fie diferit de spaţiu, iar numărul total de caractere de pe linie să fie egal cu Max. Excepţie face numai ultima linie din paragraf, care rămâne aliniată la stânga (cuvintele fiind separate printr-un singur spaţiu, chiar dacă linia nu este plină).&lt;br /&gt;
&lt;br /&gt;
În general, este puţin probabil ca alinierea să fie realizabilă prin plasarea aceluiaşi număr de spaţii între oricare două cuvinte consecutive de pe linie. Vasile consideră că este mai elegant ca, dacă între unele cuvinte consecutive trebuie plasat un spaţiu în plus faţă de alte perechi de cuvinte consecutive, acestea să fie plasate la începutul liniei.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Scrieţi un program care să citească lungimea unei linii şi textul dat şi care să alinieze textul la stânga şi la dreapta.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare textoji.in conține pe prima linie linie Max, lungimea maximă a unui rând. Pe următoarele linii este scris textul.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire textoji.out va conține textul aliniat stânga-dreapta.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 2 ≤ Max ≤ 1000&lt;br /&gt;
* Lungimea maximă a oricărui cuvânt din text este 50 caractere şi nu depăşeşte Max.&lt;br /&gt;
* Lungimea unui paragraf nu depăşeşte 1000 de caractere.&lt;br /&gt;
* Soluţia este unică.&lt;br /&gt;
* Problema aceasta s-a dat la OJI clasa a IX-a deoarece pe atunci șirurile de caractere se studiau în primul an de liceu (erau 8 ore de informatică pe săptămână – ce vremuri!)&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&#039;&#039;&#039;textojiin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
20&lt;br /&gt;
&lt;br /&gt;
Vasile are multe bomboane bune.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;textojiout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Vasile   are   multe &lt;br /&gt;
&lt;br /&gt;
bomboane bune.&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pe prima linie au fost plasate câte 3 spaţii între cuvintele consecutive.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&#039;&#039;&#039;textojiin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
20&lt;br /&gt;
&lt;br /&gt;
Ana are mere.&lt;br /&gt;
&lt;br /&gt;
Ion are multe pere galbene?&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;textojiout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ana are mere.&lt;br /&gt;
&lt;br /&gt;
Ion  are  multe pere &lt;br /&gt;
&lt;br /&gt;
galbene?&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Între Ion şi are există 2 spaţii, între are şi multe – 2 spaţii, iar între multe şi pere – 1 spaţiu. Observaţi că paragraful Ana are mere. (care are lungimea mai mică decât 20) a rămas aliniat la stânga, iar ultima linie din fiecare paragraf rămâne aliniată la stânga, cuvintele consecutive fiind separate printr-un singur spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def aliniere_stanga_dreapta(max_lungime, paragraf):&lt;br /&gt;
    # Verificăm condițiile impuse asupra datelor de intrare&lt;br /&gt;
    if not (2 &amp;lt;= max_lungime &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;Max trebuie să fie între 2 și 1000.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    cuvinte_paragraf = paragraf.split()&lt;br /&gt;
&lt;br /&gt;
    if any(len(cuvant) &amp;gt; 50 for cuvant in cuvinte_paragraf):&lt;br /&gt;
        raise ValueError(&amp;quot;Lungimea maximă a oricărui cuvânt nu trebuie să depășească 50 de caractere.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if len(paragraf) &amp;gt; 1000:&lt;br /&gt;
        raise ValueError(&amp;quot;Lungimea totală a paragrafului nu trebuie să depășească 1000 de caractere.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    linii = []&lt;br /&gt;
&lt;br /&gt;
    for linie in paragraf.split(&amp;quot;\n&amp;quot;):&lt;br /&gt;
        cuvinte = linie.split()&lt;br /&gt;
        linie_curenta = cuvinte[0]&lt;br /&gt;
&lt;br /&gt;
        for cuvant in cuvinte[1:]:&lt;br /&gt;
            if len(linie_curenta) + len(cuvant) + 1 &amp;lt;= max_lungime:&lt;br /&gt;
                linie_curenta += &amp;quot; &amp;quot; + cuvant&lt;br /&gt;
            else:&lt;br /&gt;
                linii.append(linie_curenta.ljust(max_lungime))&lt;br /&gt;
                linie_curenta = cuvant&lt;br /&gt;
&lt;br /&gt;
        linii.append(linie_curenta.ljust(max_lungime))&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;\n&amp;quot;.join(linii)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    # Citim datele de intrare din fișierul &amp;quot;textoji.in&amp;quot;&lt;br /&gt;
    with open(&amp;quot;textojiin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f_in:&lt;br /&gt;
        max_lungime = int(f_in.readline().strip())&lt;br /&gt;
        text = f_in.read()&lt;br /&gt;
&lt;br /&gt;
    # Apelăm funcția pentru aliniere&lt;br /&gt;
    try:&lt;br /&gt;
        rezultat = aliniere_stanga_dreapta(max_lungime, text)&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(f&amp;quot;Eroare: {str(e)}&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        # Scriem rezultatul în fișierul &amp;quot;textoji.out&amp;quot;&lt;br /&gt;
        with open(&amp;quot;textojiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
            f_out.write(rezultat)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3263_-_Sum_Max_XI&amp;diff=9094</id>
		<title>3263 - Sum Max XI</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3263_-_Sum_Max_XI&amp;diff=9094"/>
		<updated>2024-01-05T14:11:15Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Date de intrare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă o matrice pătratică cu n lini şi n coloane şi elemente numere întregi. Determinaţi cea mai mare sumă a n elemente din matrice, obținută adunând câte un element de pe fiecare linie a matricei.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare summax_xiin.txt conţine pe prima linie numărul n, iar pe următoarele n linii câte n numere întregi, separate prin spaţii, reprezentând elementele matricei.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire summax_xiout.txt va conţine pe prima linie numărul S, reprezentând suma maximă determinată.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele matricei vor avea cel mult 4 cifre&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;summax_xiin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
12 16 5 4&lt;br /&gt;
&lt;br /&gt;
11 14 6 7&lt;br /&gt;
&lt;br /&gt;
8 2 3 17&lt;br /&gt;
&lt;br /&gt;
10 9 13 15&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;summax_xiout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
62&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
62=16+14+17+15.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;summax_xiin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    # Validare pentru dimensiunea matricei (n)&lt;br /&gt;
    n = int(file.readline().strip())&lt;br /&gt;
    if not 1 &amp;lt;= n &amp;lt;= 100:&lt;br /&gt;
        raise ValueError(&amp;quot;Dimensiunea matricei trebuie să fie între 1 și 100 inclusiv.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    matrix = [list(map(int, file.readline().split())) for _ in range(n)]  # Se citesc elementele matricei&lt;br /&gt;
    # Validare pentru elementele matricei&lt;br /&gt;
    for row in matrix:&lt;br /&gt;
        if any(not (0 &amp;lt;= element &amp;lt;= 9999) for element in row):&lt;br /&gt;
            raise ValueError(&amp;quot;Elementele matricei trebuie să fie între 0 și 9999 inclusiv.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Determinarea sumei maxime&lt;br /&gt;
&lt;br /&gt;
max_sum = sum(max(matrix[i]) for i in range(n))  # Se calculează suma maximă a celor mai mari elemente de pe fiecare linie&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;summax_xiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
    file_out.write(str(max_sum) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3263_-_Sum_Max_XI&amp;diff=9093</id>
		<title>3263 - Sum Max XI</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3263_-_Sum_Max_XI&amp;diff=9093"/>
		<updated>2024-01-05T14:10:44Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Se dă o matrice pătratică cu n lini şi n coloane şi elemente numere întregi. Determinaţi cea mai mare sumă a n elemente din matrice, obținută adunând câte un element de pe fiecare linie a matricei.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare summax_xi.in conţine pe prima linie numărul n, iar pe următoarele n linii câte n numere întregi, separate prin spaţii, reprezentând elementele matricei.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire summax_xi.out va conţine pe prima linie numărul S, reprezentând suma maximă determinată.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele matricei vor avea cel mult 4 cifre&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;summax_xiin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
12 16 5 4&lt;br /&gt;
&lt;br /&gt;
11 14 6 7&lt;br /&gt;
&lt;br /&gt;
8 2 3 17&lt;br /&gt;
&lt;br /&gt;
10 9 13 15&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;summax_xiout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
62&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
62=16+14+17+15.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;summax_xiin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    # Validare pentru dimensiunea matricei (n)&lt;br /&gt;
    n = int(file.readline().strip())&lt;br /&gt;
    if not 1 &amp;lt;= n &amp;lt;= 100:&lt;br /&gt;
        raise ValueError(&amp;quot;Dimensiunea matricei trebuie să fie între 1 și 100 inclusiv.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    matrix = [list(map(int, file.readline().split())) for _ in range(n)]  # Se citesc elementele matricei&lt;br /&gt;
    # Validare pentru elementele matricei&lt;br /&gt;
    for row in matrix:&lt;br /&gt;
        if any(not (0 &amp;lt;= element &amp;lt;= 9999) for element in row):&lt;br /&gt;
            raise ValueError(&amp;quot;Elementele matricei trebuie să fie între 0 și 9999 inclusiv.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# Determinarea sumei maxime&lt;br /&gt;
&lt;br /&gt;
max_sum = sum(max(matrix[i]) for i in range(n))  # Se calculează suma maximă a celor mai mari elemente de pe fiecare linie&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;summax_xiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
    file_out.write(str(max_sum) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2615_-_Caesar_Crypt&amp;diff=9092</id>
		<title>2615 - Caesar Crypt</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2615_-_Caesar_Crypt&amp;diff=9092"/>
		<updated>2024-01-05T14:03:56Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== &amp;lt;big&amp;gt;Cerința&amp;lt;/big&amp;gt; ==&lt;br /&gt;
Se citește un text de maxim 256 caractere. Să se afișeze textul după aplicarea Cifrului Caesar.&lt;br /&gt;
&lt;br /&gt;
Cifrul Caesar este o metodă de criptare în care fiecare literă este înlocuită cu o altă literă ce se află la un număr fix de poziții după aceasta în alfabet. Este numită după Julius Caesar, care o folosea în corespondența privată.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;big&amp;gt;Date de intrare&amp;lt;/big&amp;gt; ==&lt;br /&gt;
Fișierul de intrare caesar.in conține:&lt;br /&gt;
&lt;br /&gt;
Pe prima linie un text format din maxim 256 caractere.&lt;br /&gt;
&lt;br /&gt;
Pe a doua linie un număr n reprezentând numărul de poziții.&lt;br /&gt;
&lt;br /&gt;
Pe a treia linie operația ce se va aplica pe text:&lt;br /&gt;
&lt;br /&gt;
encrypt pentru criptare.&lt;br /&gt;
&lt;br /&gt;
decrypt pentru decriptare.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire dbftbs.out va conține textul prelucrat.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* Se va folosi alfabetul englez. Literele își păstrează capitalizarea.&lt;br /&gt;
* Atenție la exemple!&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
&lt;br /&gt;
=== Exemplu 1 ===&lt;br /&gt;
&#039;&#039;&#039;caesarin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
caesar&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
encrypt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbftbsout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
dbftbs&lt;br /&gt;
&lt;br /&gt;
=== Exemplu 2 ===&lt;br /&gt;
&#039;&#039;&#039;caesarin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
dbftbs&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
decrypt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbftbsout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
caesar&lt;br /&gt;
&lt;br /&gt;
=== Exemplu 3 ===&lt;br /&gt;
&#039;&#039;&#039;caesarin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
caeSaR&lt;br /&gt;
&lt;br /&gt;
10&lt;br /&gt;
&lt;br /&gt;
encrypt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbftbsout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
mkoCkB&lt;br /&gt;
&lt;br /&gt;
Exemplu 4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;caesarin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
CAEsAr&lt;br /&gt;
&lt;br /&gt;
10&lt;br /&gt;
&lt;br /&gt;
decrypt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbftbsout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
SQUiQh&lt;br /&gt;
&lt;br /&gt;
== Exemplu 5 ==&lt;br /&gt;
&#039;&#039;&#039;caesarin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
If he had anything confidential to say, he wrote it in cipher, that is, by so changing the order of the 26 letters of the alphabet, that not a word could be made out.&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
encrypt&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;dbftbsout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pm ol ohk hufaopun jvumpkluaphs av zhf, ol dyval pa pu jpwoly, aoha pz, if zv johunpun aol vykly vm aol 26 slaalyz vm aol hswohila, aoha uva h dvyk jvbsk il thkl vba.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def LM(ch):&lt;br /&gt;
    return &#039;A&#039; &amp;lt;= ch &amp;lt;= &#039;Z&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def lm(ch):&lt;br /&gt;
    return &#039;a&#039; &amp;lt;= ch &amp;lt;= &#039;z&#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validate_key(key):&lt;br /&gt;
    return 1 &amp;lt;= key &amp;lt;= 100&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;caesarin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file_in:&lt;br /&gt;
    s = list(file_in.readline().strip())&lt;br /&gt;
    n = int(file_in.readline().strip())&lt;br /&gt;
&lt;br /&gt;
    # Validare cheie&lt;br /&gt;
    if not validate_key(n):&lt;br /&gt;
        print(&amp;quot;Cheia nu este valida. Introdu o cheie intre 1 si 100.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    cer = file_in.readline().strip()&lt;br /&gt;
    n = n % 26&lt;br /&gt;
&lt;br /&gt;
if cer == &amp;quot;encrypt&amp;quot;:&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; len(s):&lt;br /&gt;
        if lm(s[i]) or LM(s[i]):&lt;br /&gt;
            if LM(s[i]):&lt;br /&gt;
                nr = ord(s[i]) + n&lt;br /&gt;
                if nr &amp;gt; ord(&#039;Z&#039;):&lt;br /&gt;
                    s[i] = chr(nr - ord(&#039;Z&#039;) + ord(&#039;A&#039;) - 1)&lt;br /&gt;
                else:&lt;br /&gt;
                    s[i] = chr(nr)&lt;br /&gt;
            else:&lt;br /&gt;
                nr = ord(s[i]) + n&lt;br /&gt;
                if nr &amp;gt; ord(&#039;z&#039;):&lt;br /&gt;
                    s[i] = chr(nr - ord(&#039;z&#039;) + ord(&#039;a&#039;) - 1)&lt;br /&gt;
                else:&lt;br /&gt;
                    s[i] = chr(nr)&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;dbftbsout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        file_out.write(&amp;quot;&amp;quot;.join(s))&lt;br /&gt;
else:&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; len(s):&lt;br /&gt;
        if LM(s[i]) or lm(s[i]):&lt;br /&gt;
            if LM(s[i]):&lt;br /&gt;
                s[i] = chr(ord(s[i]) - n)&lt;br /&gt;
                if s[i] &amp;lt; &#039;A&#039;:&lt;br /&gt;
                    s[i] = chr(ord(s[i]) + ord(&#039;Z&#039;) - ord(&#039;A&#039;) + 1)&lt;br /&gt;
            else:&lt;br /&gt;
                s[i] = chr(ord(s[i]) - n)&lt;br /&gt;
                if s[i] &amp;lt; &#039;a&#039;:&lt;br /&gt;
                    s[i] = chr(ord(s[i]) + ord(&#039;z&#039;) - ord(&#039;a&#039;) + 1)&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;dbftbsout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        file_out.write(&amp;quot;&amp;quot;.join(s))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3033_-_criptografie&amp;diff=9088</id>
		<title>3033 - criptografie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3033_-_criptografie&amp;diff=9088"/>
		<updated>2024-01-05T13:43:14Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Zedd a descoperit frumusețea aplicațiilor din domeniul criptografiei. Astfel, el și-a activat abilitățile de hacker și s-a lovit de următoarea problemă: fiind dat un șir format doar din litere mici ale alfabetului englez, Zedd trebuie să găsească secvențe pe care le poate forma fără ca vreo literă să apară de prea multe ori.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând textul lui Zedd, să se determine:&lt;br /&gt;
&lt;br /&gt;
Numărul de secvențe distincte în care fiecare literă poate să apară de maximum k ori. Două secvențe sunt considerate distincte dacă diferă fie prin poziția de început, fie prin cea de final.&lt;br /&gt;
&lt;br /&gt;
Cea mai lungă secvență care conține doar litere distincte. Dacă sunt mai multe secvențe de lungime maximă formate din litere distincte se alege prima din punct de vedere lexicografic (alfabetic).&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare criptografiein.txt conține pe prima linie cerința C (care poate fi 1 sau 2), pe linia a doua numărul natural k, cu semnificația de mai sus, precum și un număr natural n, separate printr-un spațiu. Pe a treia linie se află un text format din n litere mici ale alfabetului englez (neseparate prin spații).&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire criptografieout.txt va conține pe prima linie:&lt;br /&gt;
&lt;br /&gt;
Dacă C = 1 un număr natural ce reprezintă răspunsul la cerința 1.&lt;br /&gt;
&lt;br /&gt;
Dacă C = 2 șirul ce reprezintă răspunsul la cerința 2.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* o secvență este formată dintr-o succesiune de litere aflate pe poziții consecutive într-un șir.&lt;br /&gt;
* 0 &amp;lt; n ≤ 100.000&lt;br /&gt;
* 0 &amp;lt; k ≤ n&lt;br /&gt;
* Pentru teste în valoare de 67 de puncte C = 1, iar pentru 33 de puncte C = 2&lt;br /&gt;
* Pentru teste în valoare de 17 puncte se garantează C = 1, k = 1 și n ≤ 100&lt;br /&gt;
* Pentru teste în valoare de alte 17 puncte se garantează C = 1 și n ≤ 1000&lt;br /&gt;
* Pentru cerința 2 se garantează că valoarea lui k este 1.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&#039;&#039;&#039;criptografiein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1 &lt;br /&gt;
&lt;br /&gt;
1 4 &lt;br /&gt;
&lt;br /&gt;
abac&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;criptografieout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
8&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Pentru textul dat, variantele care ar putea fi obținute conform cerinței sunt: a, ab, b, ba, bac, a, ac, c. În total numărul de secvențe cu caractere distincte (k = 1) ce pot fi formate este 8.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&#039;&#039;&#039;criptografiein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
1 6&lt;br /&gt;
&lt;br /&gt;
abacba&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;criptografieout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
acb&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Explicație&#039;&#039;&#039; ===&lt;br /&gt;
Lungimea maximă a unei secvențe de elemente distincte este 3. Sunt trei astfel de secvențe. Prima din punct de vedere alfabetic este acb.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(c, k, n):&lt;br /&gt;
    if not (0 &amp;lt; n &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError(&amp;quot;Valoare invalidă pentru n. Se cere 0 &amp;lt; n &amp;lt;= 100000.&amp;quot;)&lt;br /&gt;
    if not (0 &amp;lt; k &amp;lt;= n):&lt;br /&gt;
        raise ValueError(&amp;quot;Valoare invalidă pentru k. Se cere 0 &amp;lt; k &amp;lt;= n.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;criptografiein.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;criptografieout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        c = int(fin.readline().strip())&lt;br /&gt;
        k, n = map(int, fin.readline().split())&lt;br /&gt;
        s = fin.readline().strip()&lt;br /&gt;
&lt;br /&gt;
        sol = 0&lt;br /&gt;
        p = 0&lt;br /&gt;
        maxim = 0&lt;br /&gt;
        smaxim = &#039;z&#039; * 27&lt;br /&gt;
        f = [0] * 26&lt;br /&gt;
&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            ch = ord(s[i]) - ord(&#039;a&#039;)&lt;br /&gt;
            f[ch] += 1&lt;br /&gt;
&lt;br /&gt;
            while f[ch] &amp;gt; k:&lt;br /&gt;
                f[ord(s[p]) - ord(&#039;a&#039;)] -= 1&lt;br /&gt;
                p += 1&lt;br /&gt;
&lt;br /&gt;
            if c == 1:&lt;br /&gt;
                sol += i - p + 1&lt;br /&gt;
            else:&lt;br /&gt;
                if i - p + 1 &amp;gt; maxim:&lt;br /&gt;
                    maxim = i - p + 1&lt;br /&gt;
                    smaxim = s[p:p + maxim]&lt;br /&gt;
                elif i - p + 1 == maxim and smaxim &amp;gt; s[p:p + maxim]:&lt;br /&gt;
                    smaxim = s[p:p + maxim]&lt;br /&gt;
&lt;br /&gt;
        if c == 1:&lt;br /&gt;
            fout.write(str(sol))&lt;br /&gt;
        else:&lt;br /&gt;
            fout.write(smaxim)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3865_-_Water_Front&amp;diff=9085</id>
		<title>3865 - Water Front</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3865_-_Water_Front&amp;diff=9085"/>
		<updated>2024-01-05T13:10:53Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Pe faleza râului Prahova primarul oraşului Ploieşti a plantat un şir de N arbuşti ornamentali de diverse soiuri, fiecare arbust i având iniţial înălţimea height[i], 1 ≤ i ≤ N. În funcţie de solul în care este plantat şi de vreme, arbustul i creşte zilnic cu înălţimea dailyGrowth[i].&lt;br /&gt;
&lt;br /&gt;
În fiecare zi grădinarul primăriei ajustează, prin tăiere cu o foarfecă, înălţimea arbuştilor. Totuşi, grădinarul este limitat de detaliile tehnice ale foarfecii. Astfel, acesta poate tăia la o tăietură exact x centimetri din înălţimea unui arbust dacă înălțimea este cel puțin x (de notat faptul că arbustul poate ajunge la înălțimea 0 după o tăietură). Pentru a nu se obosi, grădinarul poate să efectueze într-o zi cel mult k tăieturi. Grădinarul poate să efectueze mai multe tăieturi asupra unui arbust într-o zi.&lt;br /&gt;
&lt;br /&gt;
Atenție! În fiecare zi arbustul întâi crește și apoi se fac tăierile.&lt;br /&gt;
&lt;br /&gt;
== Cerinta ==&lt;br /&gt;
Primarul organizează după M zile un eveniment artistic şi doreşte să aflaţi care este înălţimea minimă a celui mai înalt arbust după cele M zile.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare: ==&lt;br /&gt;
De la tastatură se citesc de pe prima linie numerele naturale N, M, k şi x. Pe următoarele N linii se află câte două numere naturale height[i] şi dailyGrowth[i], separate prin spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Afișați la ecran un număr nenegativ reprezentând înălţimea minimă a celui mai înalt arbust după cele M zile.&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari: ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ k ≤ 1.000&lt;br /&gt;
* 1 ≤ x ≤ 10.000&lt;br /&gt;
* 0 ≤ height[i] ≤ 10.000&lt;br /&gt;
* 0 ≤ dailyGrowth[i] ≤ 10.000&lt;br /&gt;
* Pentru 8 puncte, N ≤ 100, M = 1, k = 1, x = 1, height[i] ≥ 1, dailyGrowth[i] = 0&lt;br /&gt;
* Pentru 22 puncte, 1 ≤ N, M ≤ 500&lt;br /&gt;
* Pentru 43 puncte, 1 ≤ N, M  5.000&lt;br /&gt;
* Pentru 27 puncte, 1 ≤ N, M ≤ 10.000&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4 3 4 3&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
3 2&lt;br /&gt;
&lt;br /&gt;
0 4&lt;br /&gt;
&lt;br /&gt;
2 8 ,  fara spatiu intre randuri&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
8&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_data(N, M, k, x, heights, daily_growths):&lt;br /&gt;
    # Validare pentru k și x&lt;br /&gt;
    if not (1 &amp;lt;= k &amp;lt;= 1000 and 1 &amp;lt;= x &amp;lt;= 10000):&lt;br /&gt;
        print(&amp;quot;Eroare: k și x trebuie să fie în intervalul 1 ≤ k ≤ 1000 și 1 ≤ x ≤ 10000.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    # Validare pentru N, M, height și dailyGrowth&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 5000 and 1 &amp;lt;= M &amp;lt;= 10000):&lt;br /&gt;
        print(&amp;quot;Eroare: N trebuie să fie în intervalul 1 ≤ N ≤ 5000 și M trebuie să fie în intervalul 1 ≤ M ≤ 10000.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    if not all(0 &amp;lt;= height &amp;lt;= 10000 for height in heights):&lt;br /&gt;
        print(&amp;quot;Eroare: Înălțimile trebuie să fie în intervalul 0 ≤ height[i] ≤ 10000.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    if not all(0 &amp;lt;= growth &amp;lt;= 10000 for growth in daily_growths):&lt;br /&gt;
        print(&amp;quot;Eroare: Creșterile zilnice trebuie să fie în intervalul 0 ≤ dailyGrowth[i] ≤ 10000.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
def calculate_height(N, M, k, x, heights, daily_growths):&lt;br /&gt;
    max_height = max(heights)&lt;br /&gt;
&lt;br /&gt;
    for day in range(M):&lt;br /&gt;
        cut_heights = [min(heights[i], k * x) for i in range(N)]  # Înălțimile pe care le putem tăia în ziua respectivă&lt;br /&gt;
&lt;br /&gt;
        total_cut = min(sum(cut_heights), k * x * N)  # Totalul pe care îl putem tăia în ziua respectivă&lt;br /&gt;
&lt;br /&gt;
        for i in range(N):&lt;br /&gt;
            cut = min(heights[i], total_cut)  # Cantitatea pe care o tăiem din arbustul i&lt;br /&gt;
            heights[i] -= cut  # Efectuăm tăierea&lt;br /&gt;
            total_cut -= cut  # Scădem cantitatea tăiată din total&lt;br /&gt;
            heights[i] += daily_growths[i]  # Creștem înălțimile zilnice&lt;br /&gt;
&lt;br /&gt;
        max_height = max(max(heights), max_height)&lt;br /&gt;
&lt;br /&gt;
    return max_height&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N, M, k, x = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    heights = []&lt;br /&gt;
    daily_growths = []&lt;br /&gt;
&lt;br /&gt;
    for _ in range(N):&lt;br /&gt;
        h, d = map(int, input().split())&lt;br /&gt;
        heights.append(h)&lt;br /&gt;
        daily_growths.append(d)&lt;br /&gt;
&lt;br /&gt;
    result = calculate_height(N, M, k, x, heights, daily_growths)&lt;br /&gt;
    print(result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2772_-_Placinte&amp;diff=9083</id>
		<title>2772 - Placinte</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2772_-_Placinte&amp;diff=9083"/>
		<updated>2024-01-05T12:55:53Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Placinte ==&lt;br /&gt;
Nimic nu se compară cu plăcintele calde ieșite din cuporul bunicii! Alexa simte mirosul ispititor al bunătățurilor proaspete și coboară în bucătărie ca să descopere n tipuri diferite de plăcinte. Unele sunt cu mere, altele cu vișine, altele cu brânză, în fine! Bunica ei a făcut câte o infinitate din fiecare tip. Dacă fata alege să mănânce un tip de plăcintă, ea îl mănâncă numai sub forma unui set. Un set de plăcinte de tipul i este egal cu 2i−1&lt;br /&gt;
&lt;br /&gt;
. Fata cunoaște din experiență timpul Ti necesar pentru a mânca un set de plăcinte de tip i.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Știind că fata va mânca fără preferințe câte seturi de plăcinte va vrea din fiecare tip, să se calculeze timpul minim necesar pentru a mânca cel puțin k plăcinte.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n, k și apoi n numere, reprezentând timpurile T1,T2,…,Tn&lt;br /&gt;
&lt;br /&gt;
necesare pentru a mânca un set din fiecare tip de plăcintă (în ordine, tipurile 1, 2, …, n).&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran un singur număr, timplul minim necesar pentru a mânca cel puțin k plăcinte.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1≤n≤30&lt;br /&gt;
* 1≤k,Ti≤109&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4 11&lt;br /&gt;
&lt;br /&gt;
2 3 4 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
9&lt;br /&gt;
&lt;br /&gt;
În acest exemplu, este mai avantajos să mănânce un set de plăcinte de tip 4 (adică 8 plăcinte) și un set de tip 3 (4 plăcinte), consumând în total 12 plăcinte în 9 unități de timp. Ar putea să mănânce 11 plăcinte sub forma 1 + 2 + 8, dar ar dura 10 unități de timp.&lt;br /&gt;
&lt;br /&gt;
…sau:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
1 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
…sau:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 1000000000&lt;br /&gt;
&lt;br /&gt;
32145 1421431 13124 315125 124124&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3281000000000&lt;br /&gt;
&lt;br /&gt;
== Rezolvare: ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, k, Ti):&lt;br /&gt;
    # Verifică condițiile de validare&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 30):&lt;br /&gt;
        return False, &amp;quot;Numărul de tipuri de plăcinte trebuie să fie între 1 și 30.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= k &amp;lt;= 10 ** 9):&lt;br /&gt;
        return False, &amp;quot;Numărul minim de plăcinte de consumat trebuie să fie între 1 și 10^9.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if not all(1 &amp;lt;= timp &amp;lt;= 10 ** 9 for timp in Ti):&lt;br /&gt;
        return False, &amp;quot;Toate timpurile trebuie să fie între 1 și 10^9.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return True, None&lt;br /&gt;
&lt;br /&gt;
def timp_minim_placinte(Ti, n, k):&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (k + 1)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, k + 1):&lt;br /&gt;
        for j in range(n):&lt;br /&gt;
            if i &amp;gt;= 2 ** j:&lt;br /&gt;
                dp[i] = min(dp[i], dp[i - 2 ** j] + (2 ** j) * Ti[j])&lt;br /&gt;
&lt;br /&gt;
    return dp[k]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de la tastatură&lt;br /&gt;
n = int(input(&amp;quot;Introdu numărul de tipuri de plăcinte: &amp;quot;))&lt;br /&gt;
k = int(input(&amp;quot;Introdu numărul minim de plăcinte de consumat: &amp;quot;))&lt;br /&gt;
Ti = list(map(int, input(&amp;quot;Introdu timpurile necesare pentru fiecare tip de plăcinte: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
# Validare date&lt;br /&gt;
valid, mesaj_eroare = validare_date(n, k, Ti)&lt;br /&gt;
&lt;br /&gt;
if valid:&lt;br /&gt;
    timp_minim = timp_minim_placinte(Ti, n, k)&lt;br /&gt;
    print(timp_minim)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;Datele introduse nu sunt valide. Motiv:&amp;quot;, mesaj_eroare)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1340_-_Rucsac&amp;diff=9078</id>
		<title>1340 - Rucsac</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1340_-_Rucsac&amp;diff=9078"/>
		<updated>2024-01-05T11:48:52Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-un magazin sunt n obiecte; pentru fiecare se cunoaște greutatea G și valoarea V. Un hoț intră în magazin având un rucsac ce poate transporta o greutate maximă GMax. El va fura anumite obiecte, sau porțiuni de obiecte, astfel încât suma greutăților obiectelor furate să nu depășească GMax.&lt;br /&gt;
&lt;br /&gt;
Să se stabilească câștigul maxim pe care îl poate obține hoțul. Câștigul este egal cu suma valorilor obiectelor furate. Câștigul adus de o fracțiune de obiect este direct proporțional cu greutatea fracțiunii.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele naturale n GMax, iar apoi n perechi de valori naturale G V, reprezentând greutatea, respectiv valoarea fiecărui obiect.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran numărul C, reprezentând câștigul maxim pe care îl poate obține hoțul.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1000;&lt;br /&gt;
* 1 ≤ GMax, G, V ≤ 10000;&lt;br /&gt;
* rezultatul va fi punctat dacă diferența dintre cel afișat de program și cel corect este mai mică decât 0.01.&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4 30&lt;br /&gt;
&lt;br /&gt;
10 60&lt;br /&gt;
&lt;br /&gt;
5 50&lt;br /&gt;
&lt;br /&gt;
12 60&lt;br /&gt;
&lt;br /&gt;
20 140&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
220&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Hoțul va lua obiectele 2 și 4 în întregime și jumătate din obiectul 1, obținând un câștig de 220.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, GMax, obiecte):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 1 și 1000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= GMax &amp;lt;= 10000):&lt;br /&gt;
        raise ValueError(&amp;quot;GMax trebuie să fie între 1 și 10000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for greutate, valoare in obiecte:&lt;br /&gt;
        if not (1 &amp;lt;= greutate &amp;lt;= 10000 and 1 &amp;lt;= valoare &amp;lt;= 10000):&lt;br /&gt;
            raise ValueError(&amp;quot;Greutatea și valoarea fiecărui obiect trebuie să fie între 1 și 10000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def castig_maxim(n, GMax, obiecte):&lt;br /&gt;
    obiecte.sort(key=lambda x: x[1] / x[0], reverse=True)  # Sortează obiectele după raportul valoare/greutate în ordine descrescătoare&lt;br /&gt;
&lt;br /&gt;
    castig_total = 0  &lt;br /&gt;
    greutate_actuala = 0  &lt;br /&gt;
&lt;br /&gt;
    for obiect in obiecte:&lt;br /&gt;
        greutate, valoare = obiect&lt;br /&gt;
        if greutate_actuala + greutate &amp;lt;= GMax:&lt;br /&gt;
            castig_total += valoare&lt;br /&gt;
            greutate_actuala += greutate&lt;br /&gt;
        else:&lt;br /&gt;
            fractiune = (GMax - greutate_actuala) / greutate  # Calculăm cât din obiect putem lua pentru a umple rucsacul&lt;br /&gt;
            castig_total += fractiune * valoare&lt;br /&gt;
            break  &lt;br /&gt;
&lt;br /&gt;
    return castig_total&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
n, GMax = map(int, input().split())&lt;br /&gt;
obiecte = [tuple(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
# Calcularea și afișarea câștigului maxim&lt;br /&gt;
rezultat = castig_maxim(n, GMax, obiecte)&lt;br /&gt;
print(rezultat)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1078_-_Adun_Scad&amp;diff=9076</id>
		<title>1078 - Adun Scad</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1078_-_Adun_Scad&amp;diff=9076"/>
		<updated>2024-01-05T11:32:47Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Considerăm un număr întreg N şi un şir de M cifre zecimale nenule. Să se determine dacă numărul N poate fi rezultatul unei expresii aritmetice simple (fără paranteze), formată exclusiv din cifrele şirului citit şi din operatorii aritmetici desemnaţi pentru operaţiile de adunare şi scădere (+, -).&lt;br /&gt;
&lt;br /&gt;
== Cerinţă ==&lt;br /&gt;
Scrieţi un program care citeşte numerele N şi M de pe prima linie a fişierului de intrare şi şirul de M cifre de pe linia următoare şi determină şi afişează expresia găsită sau valoarea 0 în cazul în care nu există soluţie.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare adunscadin.txt conține pe prima linie numerele întregi N M, separate printr-un spaţiu, reprezentând valoarea ce trebuie obţinută la evaluarea expresiei şi numărul de cifre din şir. Linia a doua a fişierului de intrare conţine şirul celor M cifre nenule, separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire adunscadout.txt va conține pe prima linie expresia determinată, în cazul în care există soluţie, sau valoarea 0 în cazul în care nu există soluţie.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* -180 ≤ N ≤ 180&lt;br /&gt;
* 2 ≤ M ≤ 20&lt;br /&gt;
* în şirul citit cifrele se pot repeta&lt;br /&gt;
* toate cifrele din şir trebuie să apară şi în expresia aritmetică, în aceeaşi ordine în care au fost citite&lt;br /&gt;
* în expresia aritmetică, orice cifră trebuie să fie precedată de un operator; în cazul în care prima cifră este precedată de operatorul &#039;+&#039; acesta nu se pune în expresie&lt;br /&gt;
* în expresia aritmetică nu există spaţii&lt;br /&gt;
* expresia aritmetică se termină cu caracterul sfârşit de linie&lt;br /&gt;
* în cazul în care soluţia nu este unică se va afişa o soluţie corectă&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
&#039;&#039;&#039;adunscadin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
21 4&lt;br /&gt;
&lt;br /&gt;
3 9 1 8&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;adunscadout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3+9+1+8&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
&#039;&#039;&#039;adunscadin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-1 4&lt;br /&gt;
&lt;br /&gt;
1 2 3 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;adunscadout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-1+2+3-5&lt;br /&gt;
&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
&#039;&#039;&#039;adunscadin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-7 7&lt;br /&gt;
&lt;br /&gt;
1 1 1 1 1 1 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;adunscadout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
-1-1-1-1-1-1-1&lt;br /&gt;
&lt;br /&gt;
Exemplu 4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;adunscadin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
12 3&lt;br /&gt;
&lt;br /&gt;
1 2 3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;adunscadout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(N, M, cifre):&lt;br /&gt;
    if not (-180 &amp;lt;= N &amp;lt;= 180):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (2 &amp;lt;= M &amp;lt;= 20):&lt;br /&gt;
        return False&lt;br /&gt;
    if len(cifre) != M:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_expresie(N, cifre):&lt;br /&gt;
    M = len(cifre)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1 &amp;lt;&amp;lt; (M - 1)):&lt;br /&gt;
        expresie = str(cifre[0])&lt;br /&gt;
        valoare = int(cifre[0])&lt;br /&gt;
&lt;br /&gt;
        for j in range(M - 1):&lt;br /&gt;
            if (i &amp;gt;&amp;gt; j) &amp;amp; 1:&lt;br /&gt;
                expresie += &#039;+&#039; + str(cifre[j + 1])&lt;br /&gt;
                valoare += int(cifre[j + 1])&lt;br /&gt;
            else:&lt;br /&gt;
                expresie += &#039;-&#039; + str(cifre[j + 1])&lt;br /&gt;
                valoare -= int(cifre[j + 1])&lt;br /&gt;
&lt;br /&gt;
        if valoare == N:&lt;br /&gt;
            return expresie&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
with open(&amp;quot;adunscadin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
    N, M = map(int, file.readline().split())&lt;br /&gt;
    cifre = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
# Validare date&lt;br /&gt;
if not validare_date(N, M, cifre):&lt;br /&gt;
    print(&amp;quot;Datele de intrare nu sunt valide.&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Găsire expresie sau 0 în cazul în care nu există soluție&lt;br /&gt;
rezultat = gaseste_expresie(N, cifre)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;adunscadout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(str(rezultat))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3942_-_Fazan&amp;diff=9072</id>
		<title>3942 - Fazan</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3942_-_Fazan&amp;diff=9072"/>
		<updated>2024-01-05T11:09:03Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau n cuvinte distincte formate din litere mici și un număr m. Afișați în ordine lexicografică toate șirurile de câte m cuvinte distincte dintre cele date, care respectă regula jocului Fazan. La jocul Fazan o succesiune de două cuvine a și b se consideră corectă dacă ultimele două litere din cuvântul a sunt identice cu primele două din b. De exemplu, cuvintele fazan și anterior sunt corecte în această ordine.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n și m, iar apoi n cuvinte, separate prin spații sau scrise pe rânduri separate.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran pe linii separate în ordine lexicografică toate șirurile de câte m cuvinte dintre cele date, care respectă regula jocului Fazan. Cuvintele de pe același rând se vor separa prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
Dacă nu se pot alege m cuvinte care să respecte condiția, atunci se va afișa IMPOSIBIL.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ m &amp;lt; n ≤ 30&lt;br /&gt;
* cele n cuvinte sunt formate din litere mici, au lungimea cel puțin 2 și cel mult 20 și sunt distincte.&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
11 3&lt;br /&gt;
&lt;br /&gt;
cosmin nasture repede cosmina alina interactiv ascutit anual incrementare ananas banana&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
alina nasture repede &lt;br /&gt;
&lt;br /&gt;
anual alina nasture &lt;br /&gt;
&lt;br /&gt;
banana nasture repede &lt;br /&gt;
&lt;br /&gt;
cosmin incrementare repede &lt;br /&gt;
&lt;br /&gt;
cosmina nasture repede &lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def este_valid(ultim_cuvant, cuvant):&lt;br /&gt;
    # Verifică dacă ultimele două litere ale cuvântului &#039;ultim_cuvant&#039;&lt;br /&gt;
    # coincid cu primele două litere ale cuvântului &#039;cuvant&#039;.&lt;br /&gt;
    return ultim_cuvant[-2:] == cuvant[:2]&lt;br /&gt;
&lt;br /&gt;
def backtracking(alese, cuvinte, solutie_parciala, rezultate):&lt;br /&gt;
    # Algoritmul de backtracking pentru formarea șirului de cuvinte.&lt;br /&gt;
&lt;br /&gt;
    if alese == 0:&lt;br /&gt;
        rezultate.append(solutie_parciala[:])&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    ultim_cuvant = solutie_parciala[-1] if solutie_parciala else &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        if cuvant not in solutie_parciala and este_valid(ultim_cuvant, cuvant):&lt;br /&gt;
            solutie_parciala.append(cuvant)&lt;br /&gt;
            backtracking(alese - 1, cuvinte, solutie_parciala, rezultate)&lt;br /&gt;
            solutie_parciala.pop()&lt;br /&gt;
&lt;br /&gt;
def afiseaza_alegeri(cuvinte, m):&lt;br /&gt;
    # Afișează șirurile de cuvinte de lungime &#039;m&#039; care respectă regula jocului Fazan.&lt;br /&gt;
&lt;br /&gt;
    rezultate = []&lt;br /&gt;
&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        backtracking(m - 1, cuvinte, [cuvant], rezultate)&lt;br /&gt;
&lt;br /&gt;
    rezultate = sorted(rezultate)&lt;br /&gt;
&lt;br /&gt;
    if not rezultate:&lt;br /&gt;
        print(&amp;quot;IMPOSIBIL&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        for solutie in rezultate:&lt;br /&gt;
            print(&amp;quot; &amp;quot;.join(solutie))&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru validarea datelor de intrare&lt;br /&gt;
def validate_input(n, m, cuvinte):&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt; n &amp;lt;= 30):&lt;br /&gt;
        print(&amp;quot;Constrângeri neîndeplinite pentru n și m.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        if not (2 &amp;lt;= len(cuvant) &amp;lt;= 20):&lt;br /&gt;
            print(&amp;quot;Lungimea cuvintelor trebuie să fie între 2 și 20 caractere.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
n, m = map(int, input().split())&lt;br /&gt;
cuvinte = input().split()&lt;br /&gt;
&lt;br /&gt;
# Validare date de intrare&lt;br /&gt;
if validate_input(n, m, cuvinte):&lt;br /&gt;
    # Apelare funcție pentru afișare rezultate&lt;br /&gt;
    afiseaza_alegeri(cuvinte, m)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2036_-_Numele_animalutului_lui_Arpsod&amp;diff=9071</id>
		<title>2036 - Numele animalutului lui Arpsod</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2036_-_Numele_animalutului_lui_Arpsod&amp;diff=9071"/>
		<updated>2024-01-05T10:58:03Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Explicație */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
De ziua lui, vrăjitorul Arpsod a primit în dar un animăluț mic și pufos. Evident, acesta dorește să îi dea un nume. Pentru a fi protejat de răul și blaturile existente în Univers, Arpsod a decis să îi dea un nume strict legat de numărul său protector. Cunoscând numărul protector, numele animăluțului se va determina astfel: Va fi un șir de litere MARI ale alfabetului latin, de lungime minimă cu proprietatea că suma diferențelor în modul a literelor vecine este egală cu numărul lui Arpsod.&lt;br /&gt;
&lt;br /&gt;
Concret: dacă avem numele FLAFFY, obținem:&lt;br /&gt;
&lt;br /&gt;
|F – L| + |L – A| + |A – F| + |F – F| + |F – Y| =&lt;br /&gt;
&lt;br /&gt;
&amp;lt;nowiki&amp;gt;= |6 – 12| + |12 – 1| + |1 – 6| + |6 – 6| + |6 – 25|=&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= 6 + 11 + 5 + 0 + 19 = 41&lt;br /&gt;
&lt;br /&gt;
Deci codul numelui FLAFFY este 41&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Arpsod vă oferă onoarea de a afla numele micuțului său animăluț.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
În fișierul nume1.in, pe prima și singura linie, se va afla P, numărul protector dat de Arpsod.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul nume1out.txt, pe prima și singura linie se va afișa un șir de litere MARI ale alfabetului latin, cu proprietățile cerute în enunț.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ P ≤ 4.000.000&lt;br /&gt;
* A = 1, B = 2, C = 3… Z = 26&lt;br /&gt;
* În cazul în care șirul afișat are suma corectă și număr minim de caractere, primiți 20% din punctajul pe acel test.&lt;br /&gt;
* Dacă șirul afișat are proprietățile de mai sus și este și minim lexicografic, primiți punctajul integral pe acel test.&lt;br /&gt;
* Un șir A este mai mic lexicografic decât un șir B dacă pe prima poziție unde A[i] ≠ B[i], A[i] &amp;lt; B[i].&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;nume1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
19&lt;br /&gt;
&lt;br /&gt;
808&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;nume1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
AT&lt;br /&gt;
&lt;br /&gt;
ARAZAZAZAZAZAZAZAZAZAZAZAZAZAZAZAY&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
În primul exemplu: A = 1, T = 20, |A – T| = |1 – 20| = 19&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;&amp;lt;u&amp;gt;Rezolvare&amp;lt;/u&amp;gt;&#039;&#039;&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def pot_pune(trebuie, c, last, lungime_optima, lungime_curenta):&lt;br /&gt;
    suma = abs(ord(last) - ord(c))&lt;br /&gt;
    ramase = lungime_optima - lungime_curenta - 1&lt;br /&gt;
&lt;br /&gt;
    if ramase &amp;gt; 0:&lt;br /&gt;
        suma += max(abs(ord(c) - ord(&#039;A&#039;)), abs(ord(c) - ord(&#039;Z&#039;)))&lt;br /&gt;
        ramase -= 1&lt;br /&gt;
&lt;br /&gt;
    suma += ramase * 25&lt;br /&gt;
&lt;br /&gt;
    return suma &amp;gt;= trebuie&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare_date(P):&lt;br /&gt;
    if 1 &amp;lt;= P &amp;lt;= 4000000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Eroare: P trebuie să fie în intervalul [1, 4.000.000]&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;nume1in.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;nume1out.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        P = int(fin.readline().strip())&lt;br /&gt;
        if not validare_date(P):&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        N = int(fin.readline().strip())&lt;br /&gt;
        lungimea_optima = (N // 25) + 1 + (N % 25 != 0)&lt;br /&gt;
        last = &#039;A&#039;&lt;br /&gt;
        lungime_curenta = 1&lt;br /&gt;
        fout.write(&#039;A&#039;)&lt;br /&gt;
&lt;br /&gt;
        suma = 0&lt;br /&gt;
&lt;br /&gt;
        while lungime_curenta &amp;lt; lungimea_optima:&lt;br /&gt;
            for i in range(ord(&#039;A&#039;), ord(&#039;Z&#039;) + 1):&lt;br /&gt;
                i = chr(i)&lt;br /&gt;
&lt;br /&gt;
                if pot_pune(N - suma, i, last, lungimea_optima, lungime_curenta):&lt;br /&gt;
                    if lungime_curenta == lungimea_optima - 1 and suma + abs(ord(last) - ord(i)) != N:&lt;br /&gt;
                        continue&lt;br /&gt;
&lt;br /&gt;
                    suma += abs(ord(last) - ord(i))&lt;br /&gt;
                    fout.write(i)&lt;br /&gt;
                    lungime_curenta += 1&lt;br /&gt;
                    last = i&lt;br /&gt;
                    break&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main() &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1155_-_Cautare_Binara&amp;diff=9070</id>
		<title>1155 - Cautare Binara</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1155_-_Cautare_Binara&amp;diff=9070"/>
		<updated>2024-01-05T10:33:07Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un vector x cu n elemente numere naturale, ordonate crescător, și un vector y cu m elemente, de asemenea numere naturale. Verificați pentru fiecare element al vectorului y dacă apare în x.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale vectorului x. Apoi și citește m și cele m elemente ale lui y.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran m valori 0 sau 1, separate prin exact un spațiu. A j-a valoare afișată este 1, dacă al j-lea element al șirului y apare în x, respectiv 0 în caz contrar.&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 25000&lt;br /&gt;
* 1 ≤ m ≤ 200000&lt;br /&gt;
* elementele celor 2 vectori vor fi mai mici decât 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
1 2 5 6 9 10 14 &lt;br /&gt;
&lt;br /&gt;
8&lt;br /&gt;
&lt;br /&gt;
8 14 9 14 16 15 4 2 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
0 1 1 1 0 0 0 1&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(n, a, m, b):&lt;br /&gt;
    # Verificare pentru n&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 25000):&lt;br /&gt;
        print(&amp;quot;Valoarea lui n nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificare pentru elementele vectorului a&lt;br /&gt;
    if any(not -1000000000 &amp;lt;= ai &amp;lt;= 1000000000 for ai in a):&lt;br /&gt;
        print(&amp;quot;Elementele vectorului a depășesc limita de 1.000.000.000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificare pentru m&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 200000):&lt;br /&gt;
        print(&amp;quot;Valoarea lui m nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificare pentru elementele vectorului b&lt;br /&gt;
    if any(not -1000000000 &amp;lt;= bi &amp;lt;= 1000000000 for bi in b):&lt;br /&gt;
        print(&amp;quot;Elementele vectorului b depășesc limita de 1.000.000.000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
def cautare_binara(arr, obiectiv):&lt;br /&gt;
&lt;br /&gt;
    left, right = 0, len(arr) - 1&lt;br /&gt;
&lt;br /&gt;
    while left &amp;lt;= right:&lt;br /&gt;
&lt;br /&gt;
        mij = left + (right - left) // 2&lt;br /&gt;
&lt;br /&gt;
        if arr[mij] == obiectiv:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
            return True&lt;br /&gt;
&lt;br /&gt;
        elif arr[mij] &amp;lt; obiectiv:&lt;br /&gt;
&lt;br /&gt;
            left = mij + 1&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
&lt;br /&gt;
            right = mij - 1&lt;br /&gt;
&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def verifica_elementele():&lt;br /&gt;
&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
    x = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    m = int(input())&lt;br /&gt;
&lt;br /&gt;
    y = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    x.sort()&lt;br /&gt;
&lt;br /&gt;
    for elem in y:&lt;br /&gt;
        if cautare_binara(x, elem):&lt;br /&gt;
&lt;br /&gt;
            rezultat.append(1)&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
            rezultat.append(0)&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    rezultat = verifica_elementele()&lt;br /&gt;
    print(*rezultat)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1154_-_Cautare_Div_Imp&amp;diff=9069</id>
		<title>1154 - Cautare Div Imp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1154_-_Cautare_Div_Imp&amp;diff=9069"/>
		<updated>2024-01-05T10:13:32Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un vector x cu n elemente numere naturale, și un vector y cu m elemente, de asemenea numere naturale. Folosind metoda Divide et Impera, verificați pentru fiecare element al vectorului y dacă apare în x.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale vectorului x. Apoi și citește m și cele m elemente ale lui y.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran m valori 0 sau 1, separate prin exact un spațiu. A j-a valoare afișată este 1, dacă al j-lea element al șirului y apare în x, respectiv 0 în caz contrar.&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n,m ≤ 1000&lt;br /&gt;
* elementele celor doi vectori vor fi mai mici decât 1.000.000.000&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
9 6 5 14 2 1 10 &lt;br /&gt;
&lt;br /&gt;
8&lt;br /&gt;
&lt;br /&gt;
8 14 9 14 16 15 4 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
0 1 1 1 0 0 0 1&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def gasesc(elem, a, st, dr):&lt;br /&gt;
    if st == dr:&lt;br /&gt;
        return a[st - 1] == elem&lt;br /&gt;
    else:&lt;br /&gt;
        mij = (st + dr) // 2&lt;br /&gt;
        return gasesc(elem, a, st, mij) or gasesc(elem, a, mij + 1, dr)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Verificare pentru n&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        print(&amp;quot;Valoarea lui n nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    a = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare pentru elementele vectorului a&lt;br /&gt;
    if any(abs(ai) &amp;gt;= 1000000000 for ai in a):&lt;br /&gt;
        print(&amp;quot;Elementele vectorului a depășesc limita de 1.000.000.000.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    m = int(input())&lt;br /&gt;
&lt;br /&gt;
    # Verificare pentru m&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 1000):&lt;br /&gt;
        print(&amp;quot;Valoarea lui m nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    b = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificare pentru elementele vectorului b&lt;br /&gt;
    if any(abs(bi) &amp;gt;= 1000000000 for bi in b):&lt;br /&gt;
        print(&amp;quot;Elementele vectorului b depășesc limita de 1.000.000.000.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, m + 1):&lt;br /&gt;
        if gasesc(b[i - 1], a, 1, n):&lt;br /&gt;
            print(1, end=&#039; &#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            print(0, end=&#039; &#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3659_-_SumMaxSecv&amp;diff=9068</id>
		<title>3659 - SumMaxSecv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3659_-_SumMaxSecv&amp;diff=9068"/>
		<updated>2024-01-05T09:56:45Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Pentru că e criză, cu ocazia campaniei electorale, în loc de găleți pline cu făină, zahăr și bilete la teatru primiți un șir a1, a2, …, an care reprezintă o permutare a mulțimii {1,2,...,n}. Pentru fiecare secvență nevidă a permutării costul ei este valoarea maximă din acea secvență. De exemplu, costul secvenței 4,2,6,1,3,5 este 6, iar costul secvenței 4,2 este 4.&lt;br /&gt;
Cerinta:&lt;br /&gt;
Să se calculeze suma totală a costurilor tuturor secvențelor.&lt;br /&gt;
Date de intrare:&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi șirul de n numere naturale, separate prin spații.&lt;br /&gt;
Restrictii:&lt;br /&gt;
2 ≤ n ≤ 100.000&lt;br /&gt;
șirul de numere este o permutare a mulțimii {1,2,...,n}&lt;br /&gt;
Exemplu:&lt;br /&gt;
Intrare:&lt;br /&gt;
4&lt;br /&gt;
2 3 4 1&lt;br /&gt;
Iesire:&lt;br /&gt;
33&lt;br /&gt;
&lt;br /&gt;
== Cerință ==&lt;br /&gt;
Să se calculeze suma totală a costurilor tuturor secvențelor.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi șirul de n numere naturale, separate prin spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran numărul S, reprezentând suma costurilor tuturor secvențelor.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
2 ≤ n ≤ 100.000&lt;br /&gt;
&lt;br /&gt;
șirul de numere este o permutare a mulțimii {1,2,...,n}&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
2 3 4 1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
33&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Secvențele nevide ale permutării 2,3,4,1 sunt:&lt;br /&gt;
&lt;br /&gt;
2 – cost 2&lt;br /&gt;
&lt;br /&gt;
2 3 – cost 3&lt;br /&gt;
&lt;br /&gt;
2 3 4 – cost 4&lt;br /&gt;
&lt;br /&gt;
2 3 4 1 – cost 4&lt;br /&gt;
&lt;br /&gt;
3 – cost 3&lt;br /&gt;
&lt;br /&gt;
3 4 – cost 4&lt;br /&gt;
&lt;br /&gt;
3 4 1 – cost 4&lt;br /&gt;
&lt;br /&gt;
4 – cost 4&lt;br /&gt;
&lt;br /&gt;
4 1 – cost 4&lt;br /&gt;
&lt;br /&gt;
1 – cost 1&lt;br /&gt;
&lt;br /&gt;
Costul total este 2+3+4+4+3+4+4+4+4+1=33.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare: ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def suma_costuri_permutare(perm):&lt;br /&gt;
    n = len(perm)&lt;br /&gt;
    cost_total = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        max_val = perm[i]&lt;br /&gt;
        for j in range(i, n):&lt;br /&gt;
            max_val = max(max_val, perm[j])&lt;br /&gt;
            cost_total += max_val&lt;br /&gt;
    return cost_total&lt;br /&gt;
&lt;br /&gt;
def valid_input(n, permutare):&lt;br /&gt;
    if n &amp;lt; 2 or n &amp;gt; 100000:&lt;br /&gt;
        print(&amp;quot;Numărul n trebuie să fie între 2 și 100.000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(permutare) != n or set(permutare) != set(range(1, n + 1)):&lt;br /&gt;
        print(&amp;quot;Lista de numere nu reprezintă o permutare validă a mulțimii {1,2,...,n}.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citirea valorii lui n&lt;br /&gt;
n = int(input(&amp;quot;Introduceți numărul n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Citirea listei de n numere naturale separate prin spații&lt;br /&gt;
print(f&amp;quot;Introduceți {n} numere naturale separate prin spații:&amp;quot;)&lt;br /&gt;
input_numbers = input().split()  # Citim input-ul și îl despărțim într-o listă de string-uri&lt;br /&gt;
&lt;br /&gt;
# Convertim fiecare element din listă într-un număr întreg&lt;br /&gt;
permutare = [int(num) for num in input_numbers]&lt;br /&gt;
&lt;br /&gt;
# Validare input&lt;br /&gt;
if valid_input(n, permutare):&lt;br /&gt;
    rezultat = suma_costuri_permutare(permutare)&lt;br /&gt;
    print(f&amp;quot;Suma costurilor tuturor secvențelor este: {rezultat}&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2582_-_Secv_Elim&amp;diff=8989</id>
		<title>2582 - Secv Elim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2582_-_Secv_Elim&amp;diff=8989"/>
		<updated>2024-01-04T16:53:54Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un șir de caractere care conține doar litere mici și mari ale alfabetului englez. Se parcurge șirul de la stânga la dreapta și dacă se întâlnește o secvență de litere alăturate egale, se șterge. Dacă în urma acestei operații se obține o nouă secvență de litere egale, se șterge și ea, ș. a. m. d.&lt;br /&gt;
&lt;br /&gt;
Să se afișeze șirul obținut.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&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;
Programul va afișa pe ecran șirul obținut.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* șirul dat conține maximum 255 de caractere&lt;br /&gt;
* nu se face diferență între literele mari și mici.&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
aAcboOoBcAXa &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
AXa &lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def elimina_duplicate_consecutive(s):&lt;br /&gt;
    if len(s) &amp;gt; 255:&lt;br /&gt;
        print(&amp;quot;Eroare: Lungimea șirului depășește 255 de caractere.&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    i = 0&lt;br /&gt;
&lt;br /&gt;
    while i &amp;lt; len(s) - 1:&lt;br /&gt;
        if s[i].lower() == s[i + 1].lower():&lt;br /&gt;
            c = s[i].lower()&lt;br /&gt;
            j = i + 1&lt;br /&gt;
            while j &amp;lt; len(s) and s[j].lower() == c:&lt;br /&gt;
                j += 1&lt;br /&gt;
            s = s[:i] + s[j:]&lt;br /&gt;
            i = -1&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    return s&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    input_str = input(&amp;quot;Introduceți șirul: &amp;quot;)&lt;br /&gt;
    result = elimina_duplicate_consecutive(input_str)&lt;br /&gt;
    if result is not None:&lt;br /&gt;
        print(result)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0873_-_Vase&amp;diff=8987</id>
		<title>0873 - Vase</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0873_-_Vase&amp;diff=8987"/>
		<updated>2024-01-04T16:46:48Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau dau două vase cu capacitatea A, respectiv B litri, iniţial goale. Se cere să se măsoare cu ajutorul lor C litri de apă, având la dispoziţie următoarele operaţii:&lt;br /&gt;
&lt;br /&gt;
* umplerea completă a unui vas (de la robinet). Operaţia se notează R X, unde X poate fi A sau B.&lt;br /&gt;
* golirea completă a unui vas (în chiuvetă). Operaţia se notează X C , unde X poate fi A sau B.&lt;br /&gt;
* mutarea dintr-un vas în celălalt. Mutarea din vasul X în vasul Y se încheie când se goleşte vasul X sau când se umple vasul Y. Operaţia se notează X Y, unde X şi Y sunt diferite şi pot fi A sau B.&lt;br /&gt;
&lt;br /&gt;
Să se determine o secvenţă de operaţii în urma cărora unul dintre vase să conţină C litri de apă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele A B C.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Programul va afișa pe ecran numărul minim de operaţii n, apoi cele n operaţii, fiecare pe o linie. Operaţiile pot fi: R A, R B, A C, B C, A B, B A, cu semnificaţia de mai sus.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ A , B , C ≤ 1000&lt;br /&gt;
* se garantează că pentru toate datele de test există soluţie&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 8 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
R A&lt;br /&gt;
&lt;br /&gt;
A B&lt;br /&gt;
&lt;br /&gt;
R A&lt;br /&gt;
&lt;br /&gt;
A B&lt;br /&gt;
&lt;br /&gt;
== Explicaţie ==&lt;br /&gt;
Vasul A are capacitatea de 5 litri, iar vasul B are capacitatea de 8 litri. Se cere să se măsoare 2 litri de apă.&lt;br /&gt;
&lt;br /&gt;
Cele 4 operaţii sunt:&lt;br /&gt;
&lt;br /&gt;
R A – se umple vasul A. A conţine 5 litri, B conţine 0 litri&lt;br /&gt;
&lt;br /&gt;
A B – se mută apă din vasul A în B. Se va muta toată apa din A. A conţine 0 litri, B conţine 5 litri&lt;br /&gt;
&lt;br /&gt;
R A – se umple vasul A. A conţine 5 litri, B conţine 5 litri&lt;br /&gt;
&lt;br /&gt;
A B – se mută apă din vasul A în B. Se vor muta 3 litri de apă din A. A conţine 2 litri, B conţine 8 litri&lt;br /&gt;
&lt;br /&gt;
vasul A conţine 2 litri&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(A, B, C):&lt;br /&gt;
    return 1 &amp;lt;= A &amp;lt;= 1000 and 1 &amp;lt;= B &amp;lt;= 1000 and 1 &amp;lt;= C &amp;lt;= 1000&lt;br /&gt;
&lt;br /&gt;
# Obțineți valorile de intrare&lt;br /&gt;
A, B, C = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
# Validați valorile de intrare&lt;br /&gt;
if not validate_input(A, B, C):&lt;br /&gt;
    print(&amp;quot;Valorile introduse nu sunt valide. Asigurați-vă că 1 ≤ A, B, C ≤ 1000.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
v = [-1] * 1000001&lt;br /&gt;
q = [0] * 1000001&lt;br /&gt;
op = [0] * 1000001&lt;br /&gt;
&lt;br /&gt;
def operatii(poz, cnt):&lt;br /&gt;
    if poz == 0:&lt;br /&gt;
        print(cnt)&lt;br /&gt;
    else:&lt;br /&gt;
        operatii(v[poz], cnt + 1)&lt;br /&gt;
        case = op[poz]&lt;br /&gt;
        if case == 1:&lt;br /&gt;
            print(&amp;quot;A C&amp;quot;)&lt;br /&gt;
        elif case == 2:&lt;br /&gt;
            print(&amp;quot;B C&amp;quot;)&lt;br /&gt;
        elif case == 3:&lt;br /&gt;
            print(&amp;quot;R A&amp;quot;)&lt;br /&gt;
        elif case == 4:&lt;br /&gt;
            print(&amp;quot;R B&amp;quot;)&lt;br /&gt;
        elif case == 5:&lt;br /&gt;
            print(&amp;quot;A B&amp;quot;)&lt;br /&gt;
        elif case == 6:&lt;br /&gt;
            print(&amp;quot;B A&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
st, dr = 1, 1&lt;br /&gt;
q[dr] = 0&lt;br /&gt;
v[0] = 0&lt;br /&gt;
pdr = -1&lt;br /&gt;
&lt;br /&gt;
while st &amp;lt;= dr and pdr == -1:&lt;br /&gt;
    k = q[st]&lt;br /&gt;
    x, y = k // 1000, k % 1000&lt;br /&gt;
&lt;br /&gt;
    # Golirea lui A&lt;br /&gt;
    xx, yy, kk = 0, y, 0&lt;br /&gt;
    if v[kk] == -1:&lt;br /&gt;
        dr += 1&lt;br /&gt;
        q[dr] = kk&lt;br /&gt;
        v[kk] = k&lt;br /&gt;
        op[kk] = 1&lt;br /&gt;
        if xx == C or yy == C:&lt;br /&gt;
            pdr = dr&lt;br /&gt;
&lt;br /&gt;
    # Golirea lui B&lt;br /&gt;
    xx, yy, kk = x, 0, x * 1000&lt;br /&gt;
    if v[kk] == -1:&lt;br /&gt;
        dr += 1&lt;br /&gt;
        q[dr] = kk&lt;br /&gt;
        v[kk] = k&lt;br /&gt;
        op[kk] = 2&lt;br /&gt;
        if xx == C or yy == C:&lt;br /&gt;
            pdr = dr&lt;br /&gt;
&lt;br /&gt;
    # Umplerea lui A&lt;br /&gt;
    xx, yy, kk = A, y, A * 1000 + y&lt;br /&gt;
    if v[kk] == -1:&lt;br /&gt;
        dr += 1&lt;br /&gt;
        q[dr] = kk&lt;br /&gt;
        v[kk] = k&lt;br /&gt;
        op[kk] = 3&lt;br /&gt;
        if xx == C or yy == C:&lt;br /&gt;
            pdr = dr&lt;br /&gt;
&lt;br /&gt;
    # Umplerea lui B&lt;br /&gt;
    xx, yy, kk = x, B, x * 1000 + B&lt;br /&gt;
    if v[kk] == -1:&lt;br /&gt;
        dr += 1&lt;br /&gt;
        q[dr] = kk&lt;br /&gt;
        v[kk] = k&lt;br /&gt;
        op[kk] = 4&lt;br /&gt;
        if xx == C or yy == C:&lt;br /&gt;
            pdr = dr&lt;br /&gt;
&lt;br /&gt;
    # A -&amp;gt; B&lt;br /&gt;
    if y + x &amp;lt;= B:&lt;br /&gt;
        yy, xx, kk = y + x, 0, 0&lt;br /&gt;
    else:&lt;br /&gt;
        yy, xx, kk = B, y + x - B, B * 1000 + (y + x - B)&lt;br /&gt;
    if v[kk] == -1:&lt;br /&gt;
        dr += 1&lt;br /&gt;
        q[dr] = kk&lt;br /&gt;
        v[kk] = k&lt;br /&gt;
        op[kk] = 5&lt;br /&gt;
        if xx == C or yy == C:&lt;br /&gt;
            pdr = dr&lt;br /&gt;
&lt;br /&gt;
    # B -&amp;gt; A&lt;br /&gt;
    if x + y &amp;lt;= A:&lt;br /&gt;
        xx, yy, kk = x + y, 0, (x + y)&lt;br /&gt;
    else:&lt;br /&gt;
        xx, yy, kk = A, x + y - A, A * 1000 + (x + y - A)&lt;br /&gt;
    if v[kk] == -1:&lt;br /&gt;
        dr += 1&lt;br /&gt;
        q[dr] = kk&lt;br /&gt;
        v[kk] = k&lt;br /&gt;
        op[kk] = 6&lt;br /&gt;
        if xx == C or yy == C:&lt;br /&gt;
            pdr = dr&lt;br /&gt;
&lt;br /&gt;
    st += 1&lt;br /&gt;
&lt;br /&gt;
if pdr == -1:&lt;br /&gt;
    print(&amp;quot;Nu se poate&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    operatii(q[pdr], 0)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1905_-_Snooker_1&amp;diff=8986</id>
		<title>1905 - Snooker 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1905_-_Snooker_1&amp;diff=8986"/>
		<updated>2024-01-04T16:29:52Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Jocul de snooker are reguli relativ simple:&lt;br /&gt;
&lt;br /&gt;
Doi jucători au la dispoziție 15 bile roșii și 6 bile colorate. Bilele roșii valorează câte 1 punct, iar cele colorate au valori cuprinse între 1 și 6 puncte. De fiecare dată când un jucător intră la masă trebuie să introducă serii de bile, începând cu o bilă roșie apoi una colorată, după fiecare bilă colorată fiind obligat să introducă o bilă roșie. Atunci când un jucător nu introduce nicio bilă sau nu introduce o bilă corectă, la masă urmează adversarul său. Loviturile nepermise se penalizează cu 5 puncte. De fiecare dată când este introdusă o bilă colorată, aceasta se repune pe masă. Când nu mai există bile roșii, bilele colorate se vor introduce în ordinea valorii lor, de la 1 la 6.&lt;br /&gt;
&lt;br /&gt;
Dan și Paul și-au propus să învețe să joace snooker, dar până mai capătă puțină experiență ei nu vor ține cont de absolut toate regulile jocului și vor contoriza punctajele în felul următor: apare valoarea 1 dacă un jucător a introdus o bilă roșie, o valoare cuprinsă între 1 și 6 dacă introduce corect o bilă colorată și valoarea -5 dacă jucătorul comite fault. Când un jucător ratează, pe tabelă apare valoarea 0. De fiecare dată când un jucător comite fault sau ratează, acesta își pierde rândul la masă.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
La sfârșitul jocului cei doi prieteni studiază tabela de scor și își doresc să afle:&lt;br /&gt;
&lt;br /&gt;
a) Care dintre ei a câștigat partida?&lt;br /&gt;
&lt;br /&gt;
b) Care este numărul maxim de bile introduse consecutiv de un jucător fără a comite fault la sfârșitul respectivei serii?&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare snooker1in.txt conține pe prima linie numărul n, reprezentând numărul de lovituri, iar pe a doua linie n numere care ilustrează tabela de scor, cu semnificațiile din enunț.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire snooker1out.txt va conține pe prima linie răspunsul la cerința a),respectiv numărul 1 dacă Dan a câștigat jocul sau numărul 2 dacă Paul a câștigat. Pe a doua linie se va afișa răspunsul la cerința b).&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* Dan este cel care începe mereu jocul&lt;br /&gt;
* Se consideră că a câștigat jocul copilul care a strâns cele mai multe puncte și se garantează că în datele de test cei doi copii nu vor avea la final punctaje egale.&lt;br /&gt;
&lt;br /&gt;
=== &#039;&#039;&#039;Exemplu&#039;&#039;&#039; ===&lt;br /&gt;
snooker1in.txt&lt;br /&gt;
&lt;br /&gt;
45&lt;br /&gt;
&lt;br /&gt;
0 0 1 0 1 3 1 4 0 1 0 1 0 1 0 1 0 1 0 0 0 1 4  1 1 1 5 -5 0 1 5 1 6 1 6 0 0 1 6 1 2 3 0 4 5&lt;br /&gt;
&lt;br /&gt;
snooker1out.txt&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Paul a câștigat partida deoarece a acumulat 52 de puncte, în timp ce Dan a acumulat 13 puncte.&lt;br /&gt;
&lt;br /&gt;
Paul introduce 6 bile consecutiv, fără a comite fault după introducerea acestora: 1 5 1 6 1 6&lt;br /&gt;
&lt;br /&gt;
== &#039;&#039;&#039;Rezolvare&#039;&#039;&#039; ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_n(n):&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 1000:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Valoare invalidă pentru &#039;n&#039;. N trebuie sa fie intre 1 ≤ n ≤ 1000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def proceseaza_element(v, i, juc, s1, s2, k1, k2, maxim):&lt;br /&gt;
    if i &amp;lt; len(v):&lt;br /&gt;
        if v[i] != 0 and juc % 2 == 1:&lt;br /&gt;
            s1 += v[i]&lt;br /&gt;
            k1 += 1&lt;br /&gt;
&lt;br /&gt;
        if v[i] != 0 and juc % 2 == 0:&lt;br /&gt;
            s2 += v[i]&lt;br /&gt;
            k2 += 1&lt;br /&gt;
&lt;br /&gt;
        if v[i] == 0 or v[i] == -5:&lt;br /&gt;
            if k1 &amp;gt; maxim and v[i] != -5:&lt;br /&gt;
                maxim = k1&lt;br /&gt;
            if k2 &amp;gt; maxim and v[i] != -5:&lt;br /&gt;
                maxim = k2&lt;br /&gt;
            juc += 1&lt;br /&gt;
            k1, k2 = 0, 0&lt;br /&gt;
    else:&lt;br /&gt;
        print(f&amp;quot;Index i out of range for list &#039;v&#039;&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return juc, s1, s2, k1, k2, maxim&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;snooker1in.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
    v = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
juc, s1, s2, k1, k2, maxim = 1, 0, 0, 0, 0, 0&lt;br /&gt;
&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    juc, s1, s2, k1, k2, maxim = proceseaza_element(v, i, juc, s1, s2, k1, k2, maxim)&lt;br /&gt;
&lt;br /&gt;
if k1 &amp;gt; maxim:&lt;br /&gt;
    maxim = k1&lt;br /&gt;
if k2 &amp;gt; maxim:&lt;br /&gt;
    maxim = k2&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;snooker1out.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    if s1 &amp;gt; s2:&lt;br /&gt;
        g.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        g.write(&amp;quot;2\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    g.write(str(maxim))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4010_-_Mos_Craciun_2&amp;diff=8985</id>
		<title>4010 - Mos Craciun 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4010_-_Mos_Craciun_2&amp;diff=8985"/>
		<updated>2024-01-04T16:16:58Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Moș Crăciun pregătește cadourile pentru acest an. El trebuie să dea cadouri identice la n copii. Pentru aceasta, a vizitat m magazine (posibil online) și pentru fiecare magazin a aflat prețul cadoului în acel magazin și numărul de cadouri disponibile în acel magazin.&lt;br /&gt;
&lt;br /&gt;
Determinati suma minimă necesară pentru a cumpăra cele n cadouri necesare. Dacă nu se pot cumpăra cele n cadouri afișați mesajul imposibil.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n m, iar apoi m perechi numere naturale p c, reprezentând prețul și cantitatea de cadouri disponibile în cele n magazine.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Programul va afișa pe ecran suma totală necesară S sau mesajul imposibil.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* 1 ≤ m ≤ 100&lt;br /&gt;
* 0 ≤ c ≤ 100&lt;br /&gt;
* 1 ≤ p ≤ 100&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 3&lt;br /&gt;
&lt;br /&gt;
2 1&lt;br /&gt;
&lt;br /&gt;
4 5&lt;br /&gt;
&lt;br /&gt;
3 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
16&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Moș Crăciun va cumpăra un cadou cu prețul 2, două cu prețul 3 și două cu prețul 4.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_intrare(n, m, magazine):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        print(&amp;quot;Eroare: n trebuie să fie între 1 și 1000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 100):&lt;br /&gt;
        print(&amp;quot;Eroare: m trebuie să fie între 1 și 100.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i, (pret, cantitate) in enumerate(magazine):&lt;br /&gt;
        if not (0 &amp;lt;= cantitate &amp;lt;= 100):&lt;br /&gt;
            print(f&amp;quot;Eroare la magazinul {i + 1}: Cantitatea trebuie să fie între 0 și 100.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
        if not (1 &amp;lt;= pret &amp;lt;= 100):&lt;br /&gt;
            print(f&amp;quot;Eroare la magazinul {i + 1}: Prețul trebuie să fie între 1 și 100.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
def suma_minima(n, m, magazine):&lt;br /&gt;
    magazine = sorted(magazine, key=lambda x: x[0])  # Sortăm magazinele după preț&lt;br /&gt;
    total_cadouri = 0&lt;br /&gt;
    suma = 0&lt;br /&gt;
&lt;br /&gt;
    for pret, cantitate in magazine:&lt;br /&gt;
        if total_cadouri + cantitate &amp;gt;= n:  # Dacă avem suficiente cadouri&lt;br /&gt;
            suma += n * pret&lt;br /&gt;
            break&lt;br /&gt;
        suma += cantitate * pret&lt;br /&gt;
        total_cadouri += cantitate&lt;br /&gt;
&lt;br /&gt;
    if total_cadouri &amp;lt; n:&lt;br /&gt;
        return -1  # Imposibil de cumpărat n cadouri&lt;br /&gt;
    else:&lt;br /&gt;
        return suma  # Suma minimă necesară&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, m = map(int, input(&amp;quot;Introduceți numărul de copii (n) și numărul de magazine (m): &amp;quot;).split())&lt;br /&gt;
    magazine = []&lt;br /&gt;
&lt;br /&gt;
    print(&amp;quot;Introduceți prețul și cantitatea disponibilă pentru fiecare magazin:&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for _ in range(m):&lt;br /&gt;
        p, c = map(int, input().split())&lt;br /&gt;
        magazine.append((p, c))&lt;br /&gt;
&lt;br /&gt;
    rezultat = suma_minima(n, m, magazine)&lt;br /&gt;
&lt;br /&gt;
    if rezultat == -1:&lt;br /&gt;
        print(&amp;quot;Imposibil&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Suma minima necesara:&amp;quot;, rezultat)&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>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4009_-_Mos_Craciun_1&amp;diff=8984</id>
		<title>4009 - Mos Craciun 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4009_-_Mos_Craciun_1&amp;diff=8984"/>
		<updated>2024-01-04T16:04:41Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinta ==&lt;br /&gt;
Moș Crăciun pregătește cadourile pentru acest an. El cunoaște prețurile a n cadouri și are la dispoziție o sumă de bani S. Ajutați-l să aleagă un număr maxim de cadouri a căror preț total să nu depășească S și determinați suma minimă de care mai are nevoie Moș Crăciun pentru a cumpăra încă un cadou.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n S, iar apoi n numere naturale, reprezentând prețurile cadourilor.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Programul va afișa pe ecran două numere, k p, separate printr-un spațiu, reprezentând numărul maxim de cadouri pe care le poate cumpăra Moș Crăciun și suma minimă de care mai are nevoie pentru a cumpăra încă un cadou.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* 1 ≤ S ≤ 1 000 000 000&lt;br /&gt;
* prețurile cadourilor vor fi mai mici decât 1 000 000&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(n, S, preturi):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;Numărul de cadouri trebuie să fie între 1 și 1000.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= S &amp;lt;= 1000000000):&lt;br /&gt;
        raise ValueError(&amp;quot;Suma disponibilă trebuie să fie între 1 și 1 000 000 000.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if not all(0 &amp;lt; pret &amp;lt; 1000000 for pret in preturi):&lt;br /&gt;
        raise ValueError(&amp;quot;Prețurile cadourilor trebuie să fie mai mici decât 1 000 000.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def mos_craciun(n, S, preturi):&lt;br /&gt;
    preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare&lt;br /&gt;
    suma_cheltuita = 0&lt;br /&gt;
    numar_cadouri = 0&lt;br /&gt;
    for pret in preturi:&lt;br /&gt;
        if suma_cheltuita + pret &amp;lt;= S:  # Dacă putem cumpăra acest cadou&lt;br /&gt;
            suma_cheltuita += pret&lt;br /&gt;
            numar_cadouri += 1&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
    suma_necesara = max(0, pret - (S - suma_cheltuita))  # Calculăm suma minimă necesară pentru următorul cadou&lt;br /&gt;
    return numar_cadouri, suma_necesara&lt;br /&gt;
&lt;br /&gt;
def mos_craciun(n, S, preturi):&lt;br /&gt;
    preturi.sort()  # Sortăm prețurile cadourilor în ordine crescătoare&lt;br /&gt;
    suma_cheltuita = 0&lt;br /&gt;
    numar_cadouri = 0&lt;br /&gt;
    for pret in preturi:&lt;br /&gt;
        if suma_cheltuita + pret &amp;lt;= S:  # Dacă putem cumpăra acest cadou&lt;br /&gt;
            suma_cheltuita += pret&lt;br /&gt;
            numar_cadouri += 1&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
    suma_necesara = max(0, pret - (S - suma_cheltuita))  # Calculăm suma minimă necesară pentru următorul cadou&lt;br /&gt;
    return numar_cadouri, suma_necesara&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, S = map(int, input(&amp;quot;Introduceți numărul de cadouri și suma de bani disponibilă (S): &amp;quot;).split())&lt;br /&gt;
    preturi = list(map(int, input(&amp;quot;Introduceți prețurile cadourilor: &amp;quot;).split()))&lt;br /&gt;
    k, p = mos_craciun(n, S, preturi)&lt;br /&gt;
    print(f&amp;quot;Numărul maxim de cadouri: {k}&amp;quot;)&lt;br /&gt;
    print(f&amp;quot;Suma minimă necesară pentru încă un cadou: {p}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4006_-_Partitie_AB&amp;diff=8983</id>
		<title>4006 - Partitie AB</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4006_-_Partitie_AB&amp;diff=8983"/>
		<updated>2024-01-04T15:52:56Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau trei numere naturale n a b, 1 ≤ a &amp;lt; b &amp;lt; n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este maxim.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n a b.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări: ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000&lt;br /&gt;
* 1 ≤ a &amp;lt; b ≤ 1000&lt;br /&gt;
* pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
40 3 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 3 3 3 3 3 3 3 3 3 5 5&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, a, b):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1000000 and 1 &amp;lt;= a &amp;lt; b &amp;lt;= 1000&lt;br /&gt;
&lt;br /&gt;
def scrie_n_ca_suma(n, a, b):&lt;br /&gt;
    if n - b &amp;lt; b:&lt;br /&gt;
        a, b = b, a&lt;br /&gt;
&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    termeni_a = (n - b) // a&lt;br /&gt;
&lt;br /&gt;
    for _ in range(termeni_a):&lt;br /&gt;
        rezultat.append(a)&lt;br /&gt;
&lt;br /&gt;
    for _ in range((n - b) - (termeni_a * a)):&lt;br /&gt;
        rezultat.append(b)&lt;br /&gt;
&lt;br /&gt;
    return sorted(rezultat)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți valoarea lui n: &amp;quot;))&lt;br /&gt;
    a = int(input(&amp;quot;Introduceți valoarea lui a: &amp;quot;))&lt;br /&gt;
    b = int(input(&amp;quot;Introduceți valoarea lui b: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if validare_date(n, a, b):&lt;br /&gt;
        rezultat = scrie_n_ca_suma(n, a, b)&lt;br /&gt;
        print(&amp;quot;Termenii ceruți:&amp;quot;, rezultat)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Verificați condițiile: 1 ≤ n ≤ 1.000.000, 1 ≤ a &amp;lt; b ≤ 1000!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1877_-_K_Max&amp;diff=8981</id>
		<title>1877 - K Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1877_-_K_Max&amp;diff=8981"/>
		<updated>2024-01-04T15:44:18Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un șir cu n elemente, numere întregi, și un număr natural k ≤ n. Calculați cea mai mare sumă care poate fi obținută schimbând semnul a exact k elemente aflate pe poziții distincte din șirul dat.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului, apoi numărul k.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Programul va afișa pe ecran numărul S, reprezentând suma maximă determinată.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1000&lt;br /&gt;
* elementele șirului vor fi cuprinse între -1.000.000 și 1.000.000&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
5 -2 -3 4 1&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
11&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def calculeaza_max_sum(n, v, k):&lt;br /&gt;
    v.sort()&lt;br /&gt;
&lt;br /&gt;
    for i in range(k):&lt;br /&gt;
        v[i] *= -1&lt;br /&gt;
&lt;br /&gt;
    s = sum(v)&lt;br /&gt;
    return s&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    while True:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceți valoarea lui n (1 ≤ n ≤ 1000): &amp;quot;))&lt;br /&gt;
        if 1 &amp;lt;= n &amp;lt;= 1000:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Intrare invalidă. Vă rugăm să introduceți o valoare în intervalul specificat.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    while True:&lt;br /&gt;
        v = list(map(int, input(&amp;quot;Introduceți elementele șirului separate prin spațiu: &amp;quot;).split()))&lt;br /&gt;
        elemente_valide = all(-1000000 &amp;lt;= elem &amp;lt;= 1000000 for elem in v)&lt;br /&gt;
        if elemente_valide:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Intrare invalidă. Asigurați-vă că toate elementele sunt în intervalul specificat.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    while True:&lt;br /&gt;
        k = int(input(&amp;quot;Introduceți valoarea lui k: &amp;quot;))&lt;br /&gt;
        if 1 &amp;lt;= k &amp;lt;= n:&lt;br /&gt;
            break&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Intrare invalidă. Vă rugăm să introduceți o valoare în intervalul specificat.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    rezultat = calculeaza_max_sum(n, v, k)&lt;br /&gt;
    print(rezultat)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1153_-_-Verif_Nr_Par_Cifre_Div_Imp&amp;diff=8980</id>
		<title>1153 - -Verif Nr Par Cifre Div Imp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1153_-_-Verif_Nr_Par_Cifre_Div_Imp&amp;diff=8980"/>
		<updated>2024-01-04T15:32:19Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Restricții si precizări: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un şir cu n elemente, numere naturale. Folosind metoda Divide et Impera să se verifice dacă toate elementele şirului au număr par de cifre.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale şirului, separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul afișează pe ecran mesajul DA, dacă toate elementele şirului au număr par de cifre, respectiv NU în caz contrar.&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări: ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 100&lt;br /&gt;
* elementele şirului sunt numere naturale nenule cu cel mult 9 cifre&lt;br /&gt;
&lt;br /&gt;
=== Exemplu ===&lt;br /&gt;
&#039;&#039;&#039;Date de intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
2820 82 65 1026 84&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date de iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
DA&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def citire():&lt;br /&gt;
    n = 0&lt;br /&gt;
    while n &amp;lt; 1 or n &amp;gt; 100:&lt;br /&gt;
        try:&lt;br /&gt;
            n = int(input(&amp;quot;Introduceti un numar intreg intre 1 si 100 inclusiv: &amp;quot;))&lt;br /&gt;
            if n &amp;lt; 1 or n &amp;gt; 100:&lt;br /&gt;
                print(&amp;quot;Numarul introdus nu este in intervalul dorit. Incercati din nou.&amp;quot;)&lt;br /&gt;
        except ValueError:&lt;br /&gt;
            print(&amp;quot;Introduceti un numar intreg valid.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    v = [0] * n&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        valid_input = False&lt;br /&gt;
        while not valid_input:&lt;br /&gt;
            try:&lt;br /&gt;
                v[i] = int(input(f&amp;quot;Introduceti elementul {i + 1} (un numar natural nenul cu cel mult 9 cifre): &amp;quot;))&lt;br /&gt;
                if 0 &amp;lt; v[i] &amp;lt;= 999999999:  # Verificare pentru numere naturale nenule cu cel mult 9 cifre&lt;br /&gt;
                    valid_input = True&lt;br /&gt;
                else:&lt;br /&gt;
                    print(&amp;quot;Numarul introdus nu corespunde criteriilor. Incercati din nou.&amp;quot;)&lt;br /&gt;
            except ValueError:&lt;br /&gt;
                print(&amp;quot;Introduceti un numar intreg valid.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return n, v&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nrcif(st, dr, v):&lt;br /&gt;
    if st == dr:&lt;br /&gt;
        cnt = 1&lt;br /&gt;
        while v[st] &amp;gt; 9:&lt;br /&gt;
            v[st] //= 10&lt;br /&gt;
            cnt += 1&lt;br /&gt;
        return cnt % 2 == 0&lt;br /&gt;
    else:&lt;br /&gt;
        m = (st + dr) // 2&lt;br /&gt;
        R1 = nrcif(st, m, v)&lt;br /&gt;
        R2 = nrcif(m + 1, dr, v)&lt;br /&gt;
        return R1 and R2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, v = citire()&lt;br /&gt;
    if nrcif(0, n - 1, v):&lt;br /&gt;
        print(&amp;quot;DA&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;NU&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;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;diff=8979</id>
		<title>1142 - Lasere</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1142_-_Lasere&amp;diff=8979"/>
		<updated>2024-01-04T15:22:36Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Se consideră un teren reprezentat printr-o matrice cu n linii şi n coloane având elemente numere naturale. În fiecare element al matricei este memorată înălţimea zonei de teren corespunzătoare ca poziţie elementului respectiv. Pe acest teren sunt amplasate m lasere, în poziţii cunoscute. Un laser este îndreptat spre unul dintre cele 4 puncte cardinale, codificate prin numere astfel: Nord prin valoarea 1, Est prin valoarea 2, Sud prin valoarea 3 şi respectiv Vest prin valoarea 4. Fiecare laser va executa o singură tragere şi ca urmare va scădea cu 1 valorile tuturor elementelor din matrice din direcţia sa de tragere, exceptând poziţia laserului respectiv.&lt;br /&gt;
&lt;br /&gt;
După efectuarea tuturor tragerilor, se caută poziţiile tuturor gropilor şi ale tranşeelor.&lt;br /&gt;
&lt;br /&gt;
Numim groapă un element din matrice pentru care toate cele 8 elemente învecinate pe linie, coloană sau diagonale au valori mai mari sau egale decât el.&lt;br /&gt;
&lt;br /&gt;
Numim tranşee o secvenţă maximală formată din două sau mai multe gropi situate pe aceeaşi linie, pe coloane consecutive. Secvenţa se numeşte maximală dacă nu mai poate fi prelungită la niciunul dintre capete.&lt;br /&gt;
&lt;br /&gt;
== &amp;lt;big&amp;gt;Cerinţe&amp;lt;/big&amp;gt; ==&lt;br /&gt;
Cunoscând configuraţia terenului şi amplasarea laserelor, să se rezolve una dintre următoarele două cerinţe:&lt;br /&gt;
&lt;br /&gt;
1. să se determine numărul de gropi din teren, după executarea tragerilor;&lt;br /&gt;
&lt;br /&gt;
2. să se determine numărul de tranşee existente, după executarea tragerilor.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare laserein.txt conține pe prima linie un număr natural c care reprezintă cerinţa ce urmează să fie rezolvată (1 sau 2). Pe a doua linie se află două numere naturale n şi m, reprezentând numărul de linii şi de coloane ale matricei, respectiv numărul de lasere. Pe următoarele n linii se află câte n numere naturale, reprezentând elementele matricei. Pe următoarele m linii sunt descrise cele m lasere, câte un laser pe o linie. Pe o linie care descrie un laser se află 3 numere naturale i j d, cu semnificaţia că se află un laser pe linia i şi coloana j (1≤i,j≤n), care trage în direcţia d (1≤d≤4). Valorile situate pe aceeaşi linie sunt separate prin spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire lasereout.txt va conține pe prima linie un singur număr natural. Acest număr reprezintă numărul de gropi (dacă c=1) sau numărul de tranşee (dacă c=2).&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 4 ≤ n ≤ 200&lt;br /&gt;
* 1 ≤ m ≤ 200&lt;br /&gt;
* Numerotarea liniilor şi a coloanelor este de la 1 la n.&lt;br /&gt;
* Elementele matricei din fişierul de intrare sunt numere naturale de maxim 4 cifre.&lt;br /&gt;
* Poziţiile laserelor sunt distincte.&lt;br /&gt;
* Pentru teste valorând 30% din punctaj cerinţa este 1.&lt;br /&gt;
&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
&#039;&#039;&#039;laserein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
5 3&lt;br /&gt;
&lt;br /&gt;
1 1 3 4 5&lt;br /&gt;
&lt;br /&gt;
8 7 6 5 4&lt;br /&gt;
&lt;br /&gt;
9 3 5 6 7&lt;br /&gt;
&lt;br /&gt;
1 1 1 9 8&lt;br /&gt;
&lt;br /&gt;
1 1 1 5 6&lt;br /&gt;
&lt;br /&gt;
2 3 3&lt;br /&gt;
&lt;br /&gt;
4 4 4&lt;br /&gt;
&lt;br /&gt;
1 4 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lasereout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
&#039;&#039;&#039;laserein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
5 3&lt;br /&gt;
&lt;br /&gt;
1 1 3 4 5&lt;br /&gt;
&lt;br /&gt;
8 7 6 5 4&lt;br /&gt;
&lt;br /&gt;
9 3 5 6 7&lt;br /&gt;
&lt;br /&gt;
1 1 1 9 8&lt;br /&gt;
&lt;br /&gt;
1 1 1 5 6&lt;br /&gt;
&lt;br /&gt;
2 3 3&lt;br /&gt;
&lt;br /&gt;
4 4 4&lt;br /&gt;
&lt;br /&gt;
1 4 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lasereout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def is_valid(x, y, direction, n):&lt;br /&gt;
    return 1 &amp;lt;= x &amp;lt;= n and 1 &amp;lt;= y &amp;lt;= n and 1 &amp;lt;= direction &amp;lt;= 4&lt;br /&gt;
&lt;br /&gt;
def validare_matrice_element(element):&lt;br /&gt;
    return 0 &amp;lt;= element &amp;lt;= 9999&lt;br /&gt;
&lt;br /&gt;
def valid_input(n, m):&lt;br /&gt;
    return 4 &amp;lt;= n &amp;lt;= 200 and 1 &amp;lt;= m &amp;lt;= 200&lt;br /&gt;
&lt;br /&gt;
N = 204&lt;br /&gt;
INF = 10000&lt;br /&gt;
M = 10000&lt;br /&gt;
&lt;br /&gt;
dx = [-1, -1, -1, 0, 1, 1, 1, 0]&lt;br /&gt;
dy = [-1, 0, 1, 1, 1, 0, -1, -1]&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;laserein.txt&amp;quot;, &amp;quot;r&amp;quot;) as infile, open(&amp;quot;lasereout.txt&amp;quot;, &amp;quot;w&amp;quot;) as outfile:&lt;br /&gt;
    cer = int(infile.readline().strip())&lt;br /&gt;
    n, m = map(int, infile.readline().split())&lt;br /&gt;
&lt;br /&gt;
    A = [[0] * (N + 2) for _ in range(N + 2)]&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        A[i][1:n + 1] = map(int, infile.readline().split())&lt;br /&gt;
    for i in range(n + 2):&lt;br /&gt;
        A[0][i] = A[i][0] = A[i][n + 1] = A[n + 1][i] = INF&lt;br /&gt;
&lt;br /&gt;
    X = []&lt;br /&gt;
    nr = 0&lt;br /&gt;
    tr = 0&lt;br /&gt;
    B = [0] * (N + 1)&lt;br /&gt;
    for _ in range(m):&lt;br /&gt;
        x, y, direction = map(int, infile.readline().split())&lt;br /&gt;
        X.append({&#039;x&#039;: x, &#039;y&#039;: y, &#039;dir&#039;: direction})&lt;br /&gt;
&lt;br /&gt;
        if direction == 1:&lt;br /&gt;
            for i in range(x - 1, 0, -1):&lt;br /&gt;
                A[i][y] -= 1&lt;br /&gt;
        elif direction == 2:&lt;br /&gt;
            for i in range(y + 1, n + 1):&lt;br /&gt;
                A[x][i] -= 1&lt;br /&gt;
        elif direction == 3:&lt;br /&gt;
            for i in range(x + 1, n + 1):&lt;br /&gt;
                A[i][y] -= 1&lt;br /&gt;
        elif direction == 4:&lt;br /&gt;
            for i in range(y - 1, 0, -1):&lt;br /&gt;
                A[x][i] -= 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        for j in range(1, n + 1):&lt;br /&gt;
            ok = all(A[i][j] &amp;lt;= A[i + dx[l]][j + dy[l]] for l in range(8))&lt;br /&gt;
            if ok:&lt;br /&gt;
                B[j] = 1&lt;br /&gt;
                nr += 1&lt;br /&gt;
&lt;br /&gt;
        p1 = 0&lt;br /&gt;
        s = 1&lt;br /&gt;
        while s &amp;lt; n:&lt;br /&gt;
            if B[s] == 1:&lt;br /&gt;
                p1 = s&lt;br /&gt;
                while B[s]:&lt;br /&gt;
                    s += 1&lt;br /&gt;
                if s - p1 &amp;gt;= 2:&lt;br /&gt;
                    tr += 1&lt;br /&gt;
            else:&lt;br /&gt;
                s += 1&lt;br /&gt;
&lt;br /&gt;
        B = [0] * (N + 1)&lt;br /&gt;
&lt;br /&gt;
    if cer == 1:&lt;br /&gt;
        outfile.write(str(nr) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        outfile.write(str(tr) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__==&amp;quot;-__main__&amp;quot;:&lt;br /&gt;
    is_valid()&lt;br /&gt;
    validare_matrice_element()&lt;br /&gt;
    valid_input()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt; &lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3257_-_Cifre_Romane_1&amp;diff=8945</id>
		<title>3257 - Cifre Romane 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3257_-_Cifre_Romane_1&amp;diff=8945"/>
		<updated>2024-01-03T23:07:57Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Dan a plecat în vacanța de vară la Roma. Pe fațada clădirilor apărea anul lor de construcție scris cu cifre romane. Ajutați-l să înțeleagă numărul scris în cifre romane transformându-l în număr scris cu cifre arabe. Dacă numărul nu respectă regulile de scriere a numerelor romane, se afișează mesajul Numar invalid.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare cifre_romane1in.txt conține pe prima linie numărul n scris cu cifre romane.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire cifre_romane1out.txt va conține pe prima linie numărul n scris în cifre arabe dacă numărul este valid și în caz contrar se afișează mesajul Numar invalid.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
1 ≤ n ≤ 3999&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;cifre_romane1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IV&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cifre_romane1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cifre_romane1in.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
IIII&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;cifre_romane1out.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Numar invalid&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def roman_to_arabic(roman):&lt;br /&gt;
    # Dicționar care mapează cifrele romane la echivalentele lor arabe&lt;br /&gt;
    roman_numerals = {&#039;I&#039;: 1, &#039;V&#039;: 5, &#039;X&#039;: 10, &#039;L&#039;: 50, &#039;C&#039;: 100, &#039;D&#039;: 500, &#039;M&#039;: 1000}&lt;br /&gt;
    arabic = 0&lt;br /&gt;
    prev_value = 0&lt;br /&gt;
    &lt;br /&gt;
    # Parcurgem cifrele romane de la dreapta la stânga&lt;br /&gt;
    for numeral in reversed(roman):&lt;br /&gt;
        value = roman_numerals[numeral]&lt;br /&gt;
        &lt;br /&gt;
        # Dacă cifra curentă este mai mică decât cifra precedentă, scădem valoarea curentă&lt;br /&gt;
        if value &amp;lt; prev_value:&lt;br /&gt;
            arabic -= value&lt;br /&gt;
        else:&lt;br /&gt;
            # Altfel, adunăm valoarea curentă&lt;br /&gt;
            arabic += value&lt;br /&gt;
        &lt;br /&gt;
        prev_value = value&lt;br /&gt;
    &lt;br /&gt;
    return arabic&lt;br /&gt;
&lt;br /&gt;
def is_valid_roman_numeral(roman):&lt;br /&gt;
    # Verificăm dacă cifrele romane respectă regulile de scriere&lt;br /&gt;
    combinatii_invalide = [&#039;IIII&#039;, &#039;VIV&#039;, &#039;XXXX&#039;, &#039;LXL&#039;, &#039;CCCC&#039;, &#039;DID&#039;, &#039;CMCM&#039;, &#039;CDCD&#039;, &#039;XCXC&#039;, &#039;XLXL&#039;, &#039;IXIX&#039;, &#039;IVIV&#039;]&lt;br /&gt;
    &lt;br /&gt;
    for combinatie in combinatii_invalide:&lt;br /&gt;
        if combinatie in roman:&lt;br /&gt;
            return False&lt;br /&gt;
    &lt;br /&gt;
    valoare_araba = roman_to_arabic(roman)&lt;br /&gt;
    if 1 &amp;lt;= valoare_araba &amp;lt;= 3999:&lt;br /&gt;
        return True&lt;br /&gt;
    &lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Deschidem fișierul de intrare în modul citire și pe cel de ieșire în modul scriere&lt;br /&gt;
        with open(&#039;cifre_romane1in.txt&#039;, &#039;r&#039;) as file_in, open(&#039;cifre_romane1out.txt&#039;, &#039;w&#039;) as file_out:&lt;br /&gt;
            # Citim cifrele romane din fișier&lt;br /&gt;
            cifre_romane = file_in.readline().strip()&lt;br /&gt;
            &lt;br /&gt;
            # Verificăm dacă cifrele romane sunt valide&lt;br /&gt;
            if is_valid_roman_numeral(cifre_romane):&lt;br /&gt;
                # Convertem cifrele romane în cifre arabe și scriem rezultatul în fișierul de ieșire&lt;br /&gt;
                cifre_arabe = roman_to_arabic(cifre_romane)&lt;br /&gt;
                file_out.write(str(cifre_arabe) + &#039;\n&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                # Dacă cifrele romane nu sunt valide, scriem un mesaj corespunzător în fișierul de ieșire&lt;br /&gt;
                file_out.write(&#039;Numar invalid\n&#039;)&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fisierul de intrare nu exista!&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2682_-_Lungime_Rand_Max&amp;diff=8941</id>
		<title>2682 - Lungime Rand Max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2682_-_Lungime_Rand_Max&amp;diff=8941"/>
		<updated>2024-01-03T22:52:09Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural l și un șir de cel mult 10000 de caractere ce conține cuvinte separate prin câte un spațiu. Fiecare cuvânt din șir este format din cel mult l litere mari ale alfabetului englez.&lt;br /&gt;
&lt;br /&gt;
Să se scrie un program care afișează cuvintele din text, în ordine, pe linii de cel mult l caractere, astfel încât orice linie începe și se termină cu un cuvânt și oricare două cuvinte de pe aceeași linie sunt separate printr-un singur spațiu. Fiecare linie va fi folosită la maxim, adică dacă un cuvânt are loc pe acea linie va fi pus acolo și nu va fi trecut pe linia următoare sau despărțit în silabe.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare lungimerandmaxin.txt conține două linii:&lt;br /&gt;
&lt;br /&gt;
pe prima linie se află numărul l;&lt;br /&gt;
&lt;br /&gt;
pe a doua linie se află șirul de caractere.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire lungimerandmaxout.txt va conține textul transformat conform regulilor de mai sus.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 20 ≤ l ≤ 1000&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
lungimerandmaxin.txt&lt;br /&gt;
&lt;br /&gt;
22&lt;br /&gt;
&lt;br /&gt;
PROBLEMA DE LA EXAMEN NU MI SE PARE FOARTE GREU DE REZOLVAT IN TIMPUL ACORDAT&lt;br /&gt;
&lt;br /&gt;
lungimerandmaxout.txt&lt;br /&gt;
&lt;br /&gt;
PROBLEMA DE LA EXAMEN&lt;br /&gt;
&lt;br /&gt;
NU MI SE PARE FOARTE &lt;br /&gt;
&lt;br /&gt;
GREU DE REZOLVAT IN&lt;br /&gt;
&lt;br /&gt;
TIMPUL ACORDAT&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def formatare_text(l, cuvinte):&lt;br /&gt;
    if not (20 &amp;lt;= l &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;l ar trebui să fie între 20 și 1000.&amp;quot;)&lt;br /&gt;
    rezultat = []&lt;br /&gt;
    linie_curenta = []&lt;br /&gt;
    lungime_curenta = 0&lt;br /&gt;
&lt;br /&gt;
    for cuvant in cuvinte:&lt;br /&gt;
        if lungime_curenta + len(cuvant) + len(linie_curenta) &amp;gt; l:&lt;br /&gt;
            rezultat.append(&amp;quot; &amp;quot;.join(linie_curenta))&lt;br /&gt;
            linie_curenta = [cuvant]&lt;br /&gt;
            lungime_curenta = len(cuvant)&lt;br /&gt;
        else:&lt;br /&gt;
            linie_curenta.append(cuvant)&lt;br /&gt;
            lungime_curenta += len(cuvant)&lt;br /&gt;
&lt;br /&gt;
    if linie_curenta:&lt;br /&gt;
        rezultat.append(&amp;quot; &amp;quot;.join(linie_curenta))&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor din fișierul de intrare&lt;br /&gt;
with open(&amp;quot;lungimerandmaxin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    l = int(f.readline().strip())&lt;br /&gt;
    cuvinte = f.readline().strip().split()&lt;br /&gt;
&lt;br /&gt;
# Formatarea textului&lt;br /&gt;
text_formatat = formatare_text(l, cuvinte)&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;lungimerandmaxout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
    for linie in text_formatat:&lt;br /&gt;
        f.write(linie + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2720_-_Bucket_Sort&amp;diff=8939</id>
		<title>2720 - Bucket Sort</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2720_-_Bucket_Sort&amp;diff=8939"/>
		<updated>2024-01-03T22:43:20Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Metoda Bucket Sort constă în distribuirea elementelor în mai multe grupe, numite “bucket-uri”. Apoi fiecare bucket este sortat individual folosind un algoritm de sortare oarecare.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dă un şir cu n numere naturale ce trebuie sortat în funcţie de d. Dacă d este 1, şirul se va sorta descrescător, iar dacă este 0, se va sorta crescător.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare bucketsortin.txt conține pe prima linie numărul n, iar pe a doua linie n numere naturale separate prin spații, iar pe a treia linie se va afla d.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire bucketsortout.txt va conține pe prima linie şirul sortat în funcţie de d.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* n ≤ 10.000&lt;br /&gt;
* toate numerele ≤ 100.000.000&lt;br /&gt;
* d=0 pentru 50% din teste&lt;br /&gt;
* d=1 pentru 50% din teste&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1: ==&lt;br /&gt;
&#039;&#039;&#039;bucketsort.in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
10 90 5 6 101&lt;br /&gt;
&lt;br /&gt;
0&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bucketsort.out&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 6 10 90 101 &lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Deoarece d este 0, şirul se sortează crescător&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2: ==&lt;br /&gt;
&#039;&#039;&#039;bucketsort.in&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
10 90 5 6 101&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;bucketsort.out&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
101 90 10 6 5 &lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Deoarece d este 1, şirul se sortează descrescător&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(n, numbers, d):&lt;br /&gt;
    if n &amp;gt; 10000:&lt;br /&gt;
        return False&lt;br /&gt;
    if any(num &amp;gt; 100000000 for num in numbers):&lt;br /&gt;
        return False&lt;br /&gt;
    if d not in [0, 1]:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def bucket_sort(arr, d):&lt;br /&gt;
    n = len(arr)&lt;br /&gt;
    buckets = [list() for _ in range(10)]&lt;br /&gt;
&lt;br /&gt;
    max_val = max(arr)&lt;br /&gt;
    exp = 1&lt;br /&gt;
&lt;br /&gt;
    while max_val // exp &amp;gt; 0:&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            index = arr[i] // exp % 10&lt;br /&gt;
            buckets[index].append(arr[i])&lt;br /&gt;
&lt;br /&gt;
        arr = []&lt;br /&gt;
        for bucket in buckets:&lt;br /&gt;
            if d == 1:&lt;br /&gt;
                arr = bucket + arr&lt;br /&gt;
            else:&lt;br /&gt;
                arr.extend(bucket)&lt;br /&gt;
&lt;br /&gt;
            bucket.clear()&lt;br /&gt;
&lt;br /&gt;
        exp *= 10&lt;br /&gt;
&lt;br /&gt;
    return arr&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor din fișierul de intrare&lt;br /&gt;
with open(&amp;quot;bucketsortin.txt&amp;quot;, &amp;quot;r&amp;quot;) as infile:&lt;br /&gt;
    n = int(infile.readline().strip())&lt;br /&gt;
    numbers = list(map(int, infile.readline().split()))&lt;br /&gt;
    d = int(infile.readline().strip())&lt;br /&gt;
# Apelarea funcției de sortare&lt;br /&gt;
sorted_numbers = bucket_sort(numbers, d)&lt;br /&gt;
&lt;br /&gt;
# Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;bucketsortout.txt&amp;quot;, &amp;quot;w&amp;quot;) as outfile:&lt;br /&gt;
    outfile.write(&amp;quot; &amp;quot;.join(map(str, sorted_numbers)))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0889_-_Cuvinte_Comune&amp;diff=8937</id>
		<title>0889 - Cuvinte Comune</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0889_-_Cuvinte_Comune&amp;diff=8937"/>
		<updated>2024-01-03T22:29:21Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau două propoziții formate din litere mari și mici ale alfabetului englez și spații. Să se afișeze în ordine alfabetică cuvintele care apar în ambele șiruri.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură cele două propoziții, separate printr-un caracter newline.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran cuvintele comune, scrise cu litere mici, fiecare pe o linie, în ordine alfabetică.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* șirurile date au cel mult 255 de caractere&lt;br /&gt;
* nu se face distincție între literele mari și cele mici&lt;br /&gt;
* dacă un cuvânt comun apare de mai multe ori, se va afișa o singură dată&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Ana si Maria au mere si nuci&lt;br /&gt;
&lt;br /&gt;
ana are MERE si Pere si prune&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ana&lt;br /&gt;
&lt;br /&gt;
mere&lt;br /&gt;
&lt;br /&gt;
si&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;&#039;&#039;Rezolvare&#039;&#039;&#039;&#039;&#039;&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
# Citirea celor două propoziții de la tastatură&lt;br /&gt;
propozitie1 = input(&amp;quot;Introduceti prima propozitie: &amp;quot;).lower()&lt;br /&gt;
propozitie2 = input(&amp;quot;Introduceti a doua propozitie: &amp;quot;).lower()&lt;br /&gt;
&lt;br /&gt;
# Validare șiruri pentru a avea cel mult 255 de caractere&lt;br /&gt;
if len(propozitie1) &amp;gt; 255 or len(propozitie2) &amp;gt; 255:&lt;br /&gt;
    print(&amp;quot;Eroare: Una sau ambele propozitii au mai mult de 255 de caractere.&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Obținerea listelor de cuvinte pentru fiecare propoziție&lt;br /&gt;
cuvinte1 = propozitie1.split()&lt;br /&gt;
cuvinte2 = propozitie2.split()&lt;br /&gt;
&lt;br /&gt;
# Obținerea cuvintelor comune și eliminarea duplicatelor&lt;br /&gt;
cuvinte_comune = list(set(cuvinte1) &amp;amp; set(cuvinte2))&lt;br /&gt;
&lt;br /&gt;
# Sortarea cuvintelor comune în ordine alfabetică&lt;br /&gt;
cuvinte_comune.sort()&lt;br /&gt;
&lt;br /&gt;
# Afișarea cuvintelor comune pe linii separate&lt;br /&gt;
for cuvant in cuvinte_comune:&lt;br /&gt;
    print(cuvant)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0903_-_Cezar&amp;diff=8934</id>
		<title>0903 - Cezar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0903_-_Cezar&amp;diff=8934"/>
		<updated>2024-01-03T22:11:40Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
În criptografie, cifrul Caesar este una dintre cele mai simple și mai cunoscute modalități de criptare a unui text. Este un cifru cu substituție, în care fiecare literă textul inițial este înlocuită cu o literă care se află în alfabet la o distanță fixă față de cea înlocuită. Această metodă este numită așa după Iulius Cezar, care o folosea pentru a comunica cu generalii săi.&lt;br /&gt;
&lt;br /&gt;
De exemplu, cu o deplasare de 3 poziții, A este înlocuit cu D, B devine E și așa mai departe – în final X devine A, Y devine B, Z devine C. Celelalte caractere din text rămân nemodificate. Astfel, textul ana are mere devine dqd duh phuh.&lt;br /&gt;
&lt;br /&gt;
Să se scrie un program care citește un text și un număr reprezentând deplasarea și îl criptează folosind cifrul Cezar cu deplasarea dată.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură textul dat și valoarea deplasării, separate printr-un caracter newline.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran șirul criptat&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări ==&lt;br /&gt;
&lt;br /&gt;
* șirul citit va avea cel mult 255 de caractere, în care nu apar litere mari&lt;br /&gt;
* deplasarea este un număr natural cuprins între 1 și 25.&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
ana are mere&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
dqd duh phuh&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def deplasare_caracter(s, n):&lt;br /&gt;
&lt;br /&gt;
    rezultat = &amp;quot;&amp;quot;&lt;br /&gt;
    for caracter in s:&lt;br /&gt;
        if &#039;a&#039; &amp;lt;= caracter &amp;lt;= &#039;z&#039;:&lt;br /&gt;
            if ord(caracter) + n &amp;gt; ord(&#039;z&#039;):&lt;br /&gt;
                rezultat += chr(ord(caracter) + n - 26)&lt;br /&gt;
            else:&lt;br /&gt;
                rezultat += chr(ord(caracter) + n)&lt;br /&gt;
        else:&lt;br /&gt;
            rezultat += caracter&lt;br /&gt;
        # Validare lungime șir și absența literelor mari&lt;br /&gt;
        if len(s) &amp;gt; 255 or any(char.isupper() for char in s):&lt;br /&gt;
            return &amp;quot;Șirul introdus nu respectă condițiile.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Validare deplasare între 1 și 25&lt;br /&gt;
        if not (1 &amp;lt;= n &amp;lt;= 25):&lt;br /&gt;
            return &amp;quot;Deplasarea trebuie să fie un număr întreg între 1 și 25.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return rezultat&lt;br /&gt;
&lt;br /&gt;
# Intrare&lt;br /&gt;
s = input(&amp;quot;Introduceți un șir de caractere: &amp;quot;)&lt;br /&gt;
n = int(input(&amp;quot;Introduceți o valoare de deplasare (număr întreg): &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
# Apelați funcția și afișați rezultatul&lt;br /&gt;
rezultat_sir = deplasare_caracter(s, n)&lt;br /&gt;
print(rezultat_sir)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1152_-_Verificare_Ordonat_Div_Imp&amp;diff=8933</id>
		<title>1152 - Verificare Ordonat Div Imp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1152_-_Verificare_Ordonat_Div_Imp&amp;diff=8933"/>
		<updated>2024-01-03T22:03:26Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un vector cu n elemente numere naturale. Folosind metoda Divide et Impera să se verifice dacă are elementele ordonate crescător.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, apoi n numere naturale, reprezentând elementele vectorului.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Programul afișează pe ecran mesajul DA, dacă vectorul are elementele ordonate crescător, sau NU, în caz contrar.&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 500&lt;br /&gt;
* fiecare element al vectorului va avea cel mult patru cifre&lt;br /&gt;
&lt;br /&gt;
=== Exemplu ===&lt;br /&gt;
&#039;&#039;&#039;Date de intrare&#039;&#039;&#039; &lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
4 5 7 9 9 10 12 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Date de ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
DA&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, a):&lt;br /&gt;
    if not 1 &amp;lt;= n &amp;lt;= 500:&lt;br /&gt;
        print(&amp;quot;Valoare invalidă pentru n.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    if any(not 0 &amp;lt;= element &amp;lt;= 9999 for element in a[1:]):&lt;br /&gt;
        print(&amp;quot;Valoare invalidă în vector. Fiecare element ar trebui să aibă cel mult patru cifre.&amp;quot;)&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
def ordonat(a, st, dr):&lt;br /&gt;
    if st == dr:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        mij = (st + dr) // 2&lt;br /&gt;
        a1 = ordonat(a, st, mij)&lt;br /&gt;
        a2 = ordonat(a, mij + 1, dr)&lt;br /&gt;
        if a1 == a2 and a[mij] &amp;lt;= a[mij + 1]:&lt;br /&gt;
            return 1&lt;br /&gt;
        else:&lt;br /&gt;
            return 0&lt;br /&gt;
&lt;br /&gt;
n = int(input())&lt;br /&gt;
a = [0] + list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
if ordonat(a, 1, n):&lt;br /&gt;
    print(&amp;quot;DA&amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    print(&amp;quot;NU&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1558_-_NPE&amp;diff=8930</id>
		<title>1558 - NPE</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1558_-_NPE&amp;diff=8930"/>
		<updated>2024-01-03T21:44:05Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se desenează un șir de pătrate distincte, de latură: 1,2,3,4,….&lt;br /&gt;
&lt;br /&gt;
Pătratele sunt numerotate cu numerele egale cu laturile lor. Fiecare pătrat este împărțit în pătrate elementare, adică pătrate de latură 1. De exemplu, un pătrat de latură k se împarte, trasând k-1 linii orizontale și k-1 linii verticale echidistante, în k*k pătrate elementare dispuse căte k pe fiecare rând, respectiv coloană. Începând de la primul pătrat desenat, parcurgând în spirală fiecare pătrat din șir, se numerotează toate pătratele elementare, ca în imaginea de mai jos:&lt;br /&gt;
&lt;br /&gt;
În fiecare pătrat din șir, rândurile sunt numerotate de sus în jos cu numerele distincte 1,2,3…. Analog, coloanele sunt numerotate de la stânga la dreapta cu numerele distincte 1,2,3….&lt;br /&gt;
&lt;br /&gt;
Dându-se un număr natural N să se determine:&lt;br /&gt;
&lt;br /&gt;
1) Numărul P al pătratului din șir care conține pătratul elementar numerotat cu N;&lt;br /&gt;
&lt;br /&gt;
2) Rândul R și coloana C în care este situat pătratul elementar cu numărul N în pătratul cu numărul P.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare npein.txt conține pe prima linie numărul N.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire npeout.txt va conține pe prima linie cele trei numere naturale P R C determinate, separate prin câte un spațiu, cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ N ≤ 2.000.000.000&lt;br /&gt;
* Pentru determinarea corectă a numărului P se acordă 40% din punctaj; pentru determinarea corectă a numărului R se acordă 30% din punctaj; pentru determinarea corectă a numărului C se acordă 30% din punctaj&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;npein.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
52&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;npeout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 4 3&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Pătratul cu numărul P=5 conține pe rândul R=4 și coloana C=3 pătratul elementar cu numărul N=52.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(n):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 2000000000):&lt;br /&gt;
        raise ValueError(&amp;quot;Valoarea de intrare N trebuie să fie între 1 și 2.000.000.000.&amp;quot;)&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;npein.txt&amp;quot;, &amp;quot;r&amp;quot;) as f, open(&amp;quot;npeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
        if n == 1:&lt;br /&gt;
            g.write(&amp;quot;1 1 1\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        # Calculul valorii lui p și nr&lt;br /&gt;
        p = 1&lt;br /&gt;
        nr = 0&lt;br /&gt;
        while n &amp;gt; nr + p * p:&lt;br /&gt;
            nr += p * p&lt;br /&gt;
            p += 1&lt;br /&gt;
        # Actualizarea valorii lui n&lt;br /&gt;
        n = n - nr&lt;br /&gt;
        # Verificarea cazului n == 1 după actualizare&lt;br /&gt;
        if n == 1:&lt;br /&gt;
            g.write(f&amp;quot;{p} 1 1\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        # Calculul valorilor lui k și r&lt;br /&gt;
        k = p&lt;br /&gt;
        r = 1&lt;br /&gt;
        while n &amp;gt; 4 * k - 4 and k &amp;gt; 0:&lt;br /&gt;
            n = n - (4 * k - 4)&lt;br /&gt;
            k = k - 2&lt;br /&gt;
            r += 1&lt;br /&gt;
        # Verificarea cazului n == 1 după calculul lui k și r&lt;br /&gt;
        if n == 1:&lt;br /&gt;
            l = c = r&lt;br /&gt;
        else:&lt;br /&gt;
            # Calculul poziției (l, c) în funcție de valoarea lui n&lt;br /&gt;
            k = p - 2 * (r - 1)&lt;br /&gt;
            if n &amp;lt;= k:&lt;br /&gt;
                l = r&lt;br /&gt;
                c = r - 1 + n&lt;br /&gt;
            else:&lt;br /&gt;
                n = n - k&lt;br /&gt;
                if n &amp;lt;= k - 1:&lt;br /&gt;
                    l = r + n&lt;br /&gt;
                    c = p + 1 - r&lt;br /&gt;
                else:&lt;br /&gt;
                    n = n - (k - 1)&lt;br /&gt;
                    if n &amp;lt;= k - 1:&lt;br /&gt;
                        l = p + 1 - r&lt;br /&gt;
                        c = p - r + 1 - n&lt;br /&gt;
                    else:&lt;br /&gt;
                        n = n - (k - 1)&lt;br /&gt;
                        l = p + 1 - r - n&lt;br /&gt;
                        c = r&lt;br /&gt;
&lt;br /&gt;
        g.write(f&amp;quot;{p} {l} {c}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4007_-_Partitie_AB_1&amp;diff=8928</id>
		<title>4007 - Partitie AB 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4007_-_Partitie_AB_1&amp;diff=8928"/>
		<updated>2024-01-03T21:28:39Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau trei numere naturale n a b, 1 ≤ a &amp;lt; b &amp;lt; n. Să se determine o modalitate de a-l scrie pe n ca sumă de termeni egali cu a sau b în care numărul de termeni egali cu a este minim.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n a b.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran un șir de numere ordonate crescător, reprezentând termenii ceruți.&lt;br /&gt;
&lt;br /&gt;
== Restricții si precizări: ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 1.000.000&lt;br /&gt;
* 1 ≤ a &amp;lt; b ≤ 1000&lt;br /&gt;
&lt;br /&gt;
* pentru toate datele de test n poate fi scris ca sumă de termeni egali cu a și b.&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
44 3 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 3 3 5 5 5 5 5 5 5&lt;br /&gt;
&lt;br /&gt;
== Rezolvare: ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, a, b):&lt;br /&gt;
    if not(1 &amp;lt;= n &amp;lt;= 1000000) or not(1 &amp;lt;= a &amp;lt; b &amp;lt;= 1000):&lt;br /&gt;
        print(&amp;quot;Datele introduse nu respectă condițiile.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
def gaseste_valori(n, a, b):&lt;br /&gt;
    p, q = -1, -1&lt;br /&gt;
&lt;br /&gt;
    for i in range(0, n + 1):&lt;br /&gt;
        if (n - i * a) % b == 0:&lt;br /&gt;
            p = i&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    q = (n - p * a) // b&lt;br /&gt;
&lt;br /&gt;
    return p, q&lt;br /&gt;
&lt;br /&gt;
def afiseaza_valori(p, q, a, b):&lt;br /&gt;
    for i in range(1, p + 1):&lt;br /&gt;
        print(a, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, q + 1):&lt;br /&gt;
        print(b, end=&amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, a, b = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    p, q = gaseste_valori(n, a, b)&lt;br /&gt;
&lt;br /&gt;
    afiseaza_valori(p, q, a, b)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3686_-_Vaccination&amp;diff=8926</id>
		<title>3686 - Vaccination</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3686_-_Vaccination&amp;diff=8926"/>
		<updated>2024-01-03T21:19:43Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Echipa V.R.N.C. a dezvoltat un vaccin contra celei mai recente boli. Vaccinul este distribuit mai întâi unei singure persoane, iar mai apoi se împrăștie celor 4 vecini(populația este reprezentată pe o matrice de dimensiunile n și m). Ulterior, fiecare persoana va da vaccinul celor 4 vecini până când o persoană de la marginea matricii este vaccinată, moment în care vaccinul nu mai este dat mai departe.&lt;br /&gt;
&lt;br /&gt;
Vazând succesul acestei metode, V.R.N.C ne dă o matrice în care știm vârsta fiecărei persoane și trebuie să aflăm punctul unde V.R.N.C ar trebui să înceapă distribuția vaccinului astfel încât să maximizăm suma vârstelor oamenilor vaccinați.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură pe prima linie numerele n și m, iar apoi n linii, fiecare linie conținând m numere separate prin spații, reprezentând vârstele celor n*m cetățeni&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran două valori i și j, locul unde vaccinarea ar trebui să înceapă. Dacă sunt mai multe soluții, trebuie afișată cea mai din stânga-sus poziție.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n, m ≤ 1000&lt;br /&gt;
* cele n*m numere citite vor fi între 0 și 2147483647&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 4&lt;br /&gt;
&lt;br /&gt;
1 2 3 4&lt;br /&gt;
&lt;br /&gt;
5 6 7 8&lt;br /&gt;
&lt;br /&gt;
9 10 11 12&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2 3&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Începând de la celula (2, 3) cu valoarea 7, vaccinul va ajunge și la valorile 3, 6, 8 și 11, suma fiind 35, aceasta fiind suma maximă posibilă obținută.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_date(n, m, matrice):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000) or not (1 &amp;lt;= m &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;Dimensiuni invalide pentru matrice. 1 ≤ n, m ≤ 1000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if not (0 &amp;lt;= matrice[i][j] &amp;lt;= 2147483647):&lt;br /&gt;
                raise ValueError(&amp;quot;Valoare invalidă în matrice. Numerele trebuie să fie între 0 și 2147483647&amp;quot;)&lt;br /&gt;
def get_vecini(matrice, i, j):&lt;br /&gt;
&lt;br /&gt;
    vecini = []&lt;br /&gt;
&lt;br /&gt;
    randuri, coloane = len(matrice), len(matrice[0])&lt;br /&gt;
    if i &amp;gt; 0:&lt;br /&gt;
        vecini.append(matrice[i - 1][j])&lt;br /&gt;
    if i &amp;lt; randuri - 1:&lt;br /&gt;
        vecini.append(matrice[i + 1][j])&lt;br /&gt;
    if j &amp;gt; 0:&lt;br /&gt;
        vecini.append(matrice[i][j - 1])&lt;br /&gt;
    if j &amp;lt; coloane - 1:&lt;br /&gt;
        vecini.append(matrice[i][j + 1])&lt;br /&gt;
    return vecini&lt;br /&gt;
&lt;br /&gt;
def maximizeaza_distributia_vaccinului(matrice):&lt;br /&gt;
    suma_maxima = 0&lt;br /&gt;
    start_i, start_j = 0, 0&lt;br /&gt;
    randuri, coloane = len(matrice), len(matrice[0])&lt;br /&gt;
    for i in range(1, randuri - 1):&lt;br /&gt;
        for j in range(coloane):&lt;br /&gt;
            suma_curenta = matrice[i][j]&lt;br /&gt;
            vecini = get_vecini(matrice, i, j)&lt;br /&gt;
            suma_curenta += sum(vecini)&lt;br /&gt;
            if suma_curenta &amp;gt; suma_maxima:&lt;br /&gt;
                suma_maxima = suma_curenta&lt;br /&gt;
                start_i, start_j = i, j&lt;br /&gt;
    return start_i, start_j + 1&lt;br /&gt;
&lt;br /&gt;
n, m = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
varste_matrice = [list(map(int, input().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
start_i, start_j = maximizeaza_distributia_vaccinului(varste_matrice)&lt;br /&gt;
&lt;br /&gt;
print(f&amp;quot;Locul de start pentru vaccinare: ({start_i + 1}, {start_j})&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2271_-_Prod_Max_1&amp;diff=8925</id>
		<title>2271 - Prod Max 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2271_-_Prod_Max_1&amp;diff=8925"/>
		<updated>2024-01-03T21:12:45Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare: */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un șir cu n numere întregi. Determinați cel mai mare număr care poate fi scris ca produs de două elemente ale șirului.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi cele n elemente ale șirului.&lt;br /&gt;
&lt;br /&gt;
== Date de iesire ==&lt;br /&gt;
Programul va afisa pe ecran numarul determinat P&lt;br /&gt;
&lt;br /&gt;
== Restrictii si precizari ==&lt;br /&gt;
&lt;br /&gt;
* 2 ≤ n ≤ 100.000&lt;br /&gt;
* elementele șirului vor fi cuprinse în intervalul (-1.000.000, 1.000.000)&lt;br /&gt;
&lt;br /&gt;
=== Exemplu: ===&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
7&lt;br /&gt;
&lt;br /&gt;
-8 3 9 -1 -2 7 -10 &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Iesire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
80&lt;br /&gt;
&lt;br /&gt;
== Rezolvare: ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(n, V):&lt;br /&gt;
    if not (2 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 2 și 100.000 inclusiv.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    for val in V:&lt;br /&gt;
        if not (-1000000 &amp;lt;= val &amp;lt;= 1000000):&lt;br /&gt;
            raise ValueError(&amp;quot;Elementele listei trebuie să fie cuprinse în intervalul (-1.000.000, 1.000.000).&amp;quot;)&lt;br /&gt;
def gaseste_produsul(n, V):&lt;br /&gt;
    max1, max2 = max(V[0], V[1]), min(V[0], V[1])&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, n):&lt;br /&gt;
        if V[i] &amp;gt; max1:&lt;br /&gt;
            max2, max1 = max1, V[i]&lt;br /&gt;
        elif V[i] &amp;gt; max2:&lt;br /&gt;
            max2 = V[i]&lt;br /&gt;
&lt;br /&gt;
    min1, min2 = min(V[0], V[1]), max(V[0], V[1])&lt;br /&gt;
&lt;br /&gt;
    for i in range(2, n):&lt;br /&gt;
        if V[i] &amp;lt; min1:&lt;br /&gt;
            min2, min1 = min1, V[i]&lt;br /&gt;
        elif V[i] &amp;lt; min2:&lt;br /&gt;
            min2 = V[i]&lt;br /&gt;
&lt;br /&gt;
    P1 = min1 * min2&lt;br /&gt;
    P2 = max1 * max2&lt;br /&gt;
&lt;br /&gt;
    return P1 if P1 &amp;gt; P2 else P2&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
n = int(input())&lt;br /&gt;
V = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
rezultat = gaseste_produsul(n, V)&lt;br /&gt;
print(rezultat)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;       &lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0087_-_Lungime_Maxima&amp;diff=8923</id>
		<title>0087 - Lungime Maxima</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0087_-_Lungime_Maxima&amp;diff=8923"/>
		<updated>2024-01-03T21:07:50Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerinţa ==&lt;br /&gt;
Să se scrie un program care citește mai multe propoziții și determină propoziția de lungime maximă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare lgmax.in conține pe prima linie un număr natural n, iar pe următoarele n linii câte o propoziție alcătuită din litere ale alfabetului englez și spații.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fișierul de ieșire lgmax.out va conține pe prima linie propoziția de lungime maximă.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
* 0&amp;lt;n&amp;lt;100&lt;br /&gt;
* fiecare propoziție va conține cel mult 255 de caractere&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;lgmaxin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
somnoroase pasarele&lt;br /&gt;
&lt;br /&gt;
pe la cuiburi se aduna&lt;br /&gt;
&lt;br /&gt;
se ascund in ramurele&lt;br /&gt;
&lt;br /&gt;
noapte buna&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;lgmaxout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
pe la cuiburi se aduna&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validare_n(valoare):&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(valoare)&lt;br /&gt;
        if 0 &amp;lt; n &amp;lt; 100:&lt;br /&gt;
            return True, n&lt;br /&gt;
        else:&lt;br /&gt;
            return False, None&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        return False, None&lt;br /&gt;
&lt;br /&gt;
def validare_propozitie(propozitie):&lt;br /&gt;
    if len(propozitie) &amp;lt;= 255:&lt;br /&gt;
        return True&lt;br /&gt;
    else:&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Deschide fișierul de intrare pentru citire&lt;br /&gt;
    with open(&#039;lgmaxin.txt&#039;, &#039;r&#039;) as input_file:&lt;br /&gt;
        # Citește numărul de propoziții&lt;br /&gt;
        n_valoare = input_file.readline().strip()&lt;br /&gt;
        este_valid_n, n = validare_n(n_valoare)&lt;br /&gt;
&lt;br /&gt;
        if not este_valid_n:&lt;br /&gt;
            print(&amp;quot;Eroare: Numărul de propoziții nu respectă condițiile.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        # Inițializează o variabilă pentru propoziția de lungime maximă&lt;br /&gt;
        propozitie_maxima = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
        # Parcurge fiecare propoziție&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            propozitie = input_file.readline().strip()&lt;br /&gt;
&lt;br /&gt;
            # Verifică dacă propoziția curentă are lungimea mai mare decât cea maximă&lt;br /&gt;
            if validare_propozitie(propozitie) and len(propozitie) &amp;gt; len(propozitie_maxima):&lt;br /&gt;
                propozitie_maxima = propozitie&lt;br /&gt;
&lt;br /&gt;
    # Deschide fișierul de ieșire pentru scriere&lt;br /&gt;
    with open(&#039;lgmaxout.txt&#039;, &#039;w&#039;) as output_file:&lt;br /&gt;
        # Scrie propoziția de lungime maximă în fișierul de ieșire&lt;br /&gt;
        output_file.write(propozitie_maxima)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2430_-_zebra&amp;diff=8921</id>
		<title>2430 - zebra</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2430_-_zebra&amp;diff=8921"/>
		<updated>2024-01-03T20:58:10Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Oleg ține un istoric al vieții sale. O zi rea este notata cu 0, iar una bună este notată cu 1. Oleg numește un subșir zebră, un subșir care începe și se termină cu o zi rea și nu conține două zile de același fel pe poziții alăturate. De exemplu 0101, 001 și 0110 nu sunt subșiruri zebra, dar 010, 0 și 01010 sunt subșiruri zebră.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se determine o împărțire a unui șir în subșiruri zebră.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură un șir de caractere format din 0 și 1.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran S, numărul de subșiruri, iar apoi, pe următoarele S linii numărul de zile componente ale fiecărui subșir și pozițiile din șirul inițial la care se află acestea. Dacă șirul nu se poate împărții în subșiruri zebră, atunci se va afișa -1.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* Inputul conține cel mult 200.000 de caractere.&lt;br /&gt;
* Orice împărțire în subșiruri zebră este acceptată.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1: ==&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
0010100&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
3 1 3 4&lt;br /&gt;
&lt;br /&gt;
3 2 5 6&lt;br /&gt;
&lt;br /&gt;
1 7&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2: ==&lt;br /&gt;
Intrare&lt;br /&gt;
&lt;br /&gt;
111&lt;br /&gt;
&lt;br /&gt;
Ieșire&lt;br /&gt;
&lt;br /&gt;
-1&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(sir):&lt;br /&gt;
    if len(sir) &amp;gt; 200000:&lt;br /&gt;
        print(&amp;quot;Inputul depășește limita de 200.000 de caractere.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
def gaseste_subsiruri_zebra(sir):&lt;br /&gt;
    n = len(sir)&lt;br /&gt;
    subSiruri = []&lt;br /&gt;
&lt;br /&gt;
    i = 0&lt;br /&gt;
    while i &amp;lt; n:&lt;br /&gt;
        # Găsirea primei zi rele&lt;br /&gt;
        while i &amp;lt; n and sir[i] == &#039;1&#039;:&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
        if i == n:&lt;br /&gt;
            break  # Am ajuns la finalul șirului, nu mai avem subșiruri zebră&lt;br /&gt;
&lt;br /&gt;
        start = i&lt;br /&gt;
        ziua_curenta = 0&lt;br /&gt;
        while i &amp;lt; n and sir[i] == &#039;0&#039;:&lt;br /&gt;
            ziua_curenta += 1&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
        if i == n:&lt;br /&gt;
            break  # Am ajuns la finalul șirului, ultima zi a fost bună&lt;br /&gt;
&lt;br /&gt;
        # Verificăm dacă următoarea zi este rea&lt;br /&gt;
        if i &amp;lt; n and sir[i] == &#039;1&#039;:&lt;br /&gt;
            subSiruri.append((ziua_curenta, start + 1, i))&lt;br /&gt;
&lt;br /&gt;
    if not subSiruri:&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
    return subSiruri&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
sir = input().strip()&lt;br /&gt;
&lt;br /&gt;
# Găsirea subșirurilor zebră&lt;br /&gt;
rezultat = gaseste_subsiruri_zebra(sir)&lt;br /&gt;
&lt;br /&gt;
# Afișarea rezultatelor&lt;br /&gt;
if rezultat == -1:&lt;br /&gt;
    print(-1)&lt;br /&gt;
else:&lt;br /&gt;
    print(len(rezultat))&lt;br /&gt;
    for subSir in rezultat:&lt;br /&gt;
        print(*subSir)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2434_-_Tnia&amp;diff=8919</id>
		<title>2434 - Tnia</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2434_-_Tnia&amp;diff=8919"/>
		<updated>2024-01-03T20:47:48Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Se dă o matrice binară cu n coloane și m linii. Coloanele sunt numerotate de la stânga la dreapta cu valori de la 1 la n, iar liniile sunt numerotate de jos în sus cu valori de la 1 la m.&lt;br /&gt;
&lt;br /&gt;
Matricea dată are o formă particulară, astfel că pentru fiecare coloană i de la 1 la n toate elementele matricei de pe coloana respectivă au valoarea 1 pentru toate liniile cuprinse în intervalul [1, h[i]] și în rest valoarea 0. Valorile h[i] sunt numere naturale date în ordine crescătoare (h[i-1] ≤ h[i], 1 ≤ i ≤ n).&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Să se răspundă la q întrebări de forma: dându-se numerele A, B, C, D se cere suma elementelor din submatricea determinată de zona dreptunghiulară având colțul stânga-jos în coloana A și linia B, iar colțul dreapta-sus în coloana C și linia D.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare este tniain.txt.&lt;br /&gt;
&lt;br /&gt;
* pe prima linie se găsesc două numere naturale n și m despărțite printr-un spațiu, cu semnificația de mai sus;&lt;br /&gt;
* pe a doua linie sunt cele n elemente h[i] ale vectorului despărțite prin câte un spațiu;&lt;br /&gt;
* pe a treia linie este un număr natural q ce reprezintă numărul de întrebări;&lt;br /&gt;
* pe următoarele q linii se găsesc câte patru numere A, B, C, D cu semnificația de mai sus, despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire tniaout.txt va conține q linii reprezentând răspunsul pentru fiecare întrebare.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 0 ≤ h[i] ≤ m, 1 ≤ n ≤ 100 000&lt;br /&gt;
* 1 ≤ q ≤ 100 000, 1 ≤ m ≤ 1 000 000 000&lt;br /&gt;
* Pentru 15 puncte: n, m, q ≤ 100&lt;br /&gt;
* Pentru alte 16 puncte: n, m, q ≤ 3000&lt;br /&gt;
* Pentru alte 16 puncte: n ≤ 100 000, m ≤ 1000 000 000, q ≤ 100&lt;br /&gt;
* În concurs s-au acordat 10 puncte din oficiu. Aici se acordă pentru testul din exemplu. &lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;tniain.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 10 &lt;br /&gt;
&lt;br /&gt;
2 3 7 8 10 &lt;br /&gt;
&lt;br /&gt;
5 &lt;br /&gt;
&lt;br /&gt;
1 1 5 10 &lt;br /&gt;
&lt;br /&gt;
2 5 4 7 &lt;br /&gt;
&lt;br /&gt;
3 2 3 6 &lt;br /&gt;
&lt;br /&gt;
3 8 3 10 &lt;br /&gt;
&lt;br /&gt;
3 2 3 10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;tniaout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
30&lt;br /&gt;
&lt;br /&gt;
6 &lt;br /&gt;
&lt;br /&gt;
5 &lt;br /&gt;
&lt;br /&gt;
0 &lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Zona dreptunghiulară având colțul stânga-jos la coloana 1 și linia 1 și colțul dreapta-sus la coloana 5 și linia 10 are suma elementelor 30. Analog, pentru celelalte patru întrebări, răspunsurile corecte sunt: 6, 5, 0 și 6.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(n, m, q):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100000 and 1 &amp;lt;= q &amp;lt;= 100000 and 1 &amp;lt;= m &amp;lt;= 1000000000):&lt;br /&gt;
        raise ValueError(&amp;quot;Date de intrare invalide.&amp;quot;)&lt;br /&gt;
def cautare_binara(stanga, dreapta, valoare, inaltime):&lt;br /&gt;
    raspuns = stanga - 1&lt;br /&gt;
    while stanga &amp;lt;= dreapta:&lt;br /&gt;
        mijloc = (stanga + dreapta) // 2&lt;br /&gt;
        if inaltime[mijloc] &amp;lt; valoare:&lt;br /&gt;
            raspuns = mijloc&lt;br /&gt;
            stanga = mijloc + 1&lt;br /&gt;
        else:&lt;br /&gt;
            dreapta = mijloc - 1&lt;br /&gt;
    return raspuns&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;tniain.txt&amp;quot;, &amp;quot;r&amp;quot;) as fisier_intrare, open(&amp;quot;tniaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fisier_iesire:&lt;br /&gt;
        n, m = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        inaltime = [0] + list(map(int, fisier_intrare.readline().split()))&lt;br /&gt;
        sume_partiale = [0] * (n + 1)&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            sume_partiale[i] = sume_partiale[i - 1] + inaltime[i]&lt;br /&gt;
&lt;br /&gt;
        q = int(fisier_intrare.readline())&lt;br /&gt;
        for _ in range(q):&lt;br /&gt;
            x_jos, y_jos, x_sus, y_sus = map(int, fisier_intrare.readline().split())&lt;br /&gt;
            pozitie1 = cautare_binara(x_jos, x_sus, y_jos, inaltime)&lt;br /&gt;
            pozitie2 = cautare_binara(x_jos, x_sus, y_sus, inaltime)&lt;br /&gt;
&lt;br /&gt;
            rezultat = (&lt;br /&gt;
                sume_partiale[pozitie2]&lt;br /&gt;
                - sume_partiale[pozitie1]&lt;br /&gt;
                - (pozitie2 - pozitie1) * (y_jos - 1)&lt;br /&gt;
                + (x_sus - pozitie2) * (y_sus - y_jos + 1)&lt;br /&gt;
            )&lt;br /&gt;
&lt;br /&gt;
            fisier_iesire.write(f&amp;quot;{rezultat}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1498_-_Ciocolata&amp;diff=8918</id>
		<title>1498 - Ciocolata</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1498_-_Ciocolata&amp;diff=8918"/>
		<updated>2024-01-03T20:40:39Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: Pagină nouă: == Enunț == După un rezultat slăbuț la un concurs de informatică, Cristina s-a cam supărat. Dan vrea să-i ridice moralul și știe că cel mai bun mod în care poate face asta este ciocolata. Totuși, Dan nu este dispus să-i ofere Cristinei toată ciocolata pe care o are (și el a avut un rezultat slab la concurs, deci.. și el trebuie să-și ridice moralul).  Astfel, îi propune Cristinei următoarea ofertă: ”Desenează pe o hârtie un caroiaj format din N linii...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
După un rezultat slăbuț la un concurs de informatică, Cristina s-a cam supărat. Dan vrea să-i ridice moralul și știe că cel mai bun mod în care poate face asta este ciocolata. Totuși, Dan nu este dispus să-i ofere Cristinei toată ciocolata pe care o are (și el a avut un rezultat slab la concurs, deci.. și el trebuie să-și ridice moralul).&lt;br /&gt;
&lt;br /&gt;
Astfel, îi propune Cristinei următoarea ofertă: ”Desenează pe o hârtie un caroiaj format din N linii și M coloane pe care îl umple cu valori întregi. Cristina va primi un număr de pătrățele de ciocolată egal cu suma valorilor dintr-un dreptunghi ales de ea.”&lt;br /&gt;
&lt;br /&gt;
Deoarece Cristina este prea bosumflată ca să rezolve această “provocare” și prea obosită ca să-l convingă pe Dan să-i dea ciocolata pur și simplu, vă roagă pe voi să o ajutați. (Poate primiți și voi niște ciocolată dacă rezolvați problema. Poate…)&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscându-se configurația caroiajului, determinați numărul maxim de pătrățele de ciocolată pe care Cristina îl poate obține alegând un dreptunghi din matrice, precum și coordonatele celor patru colțuri ale acestuia&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul ciocolatain.txt conține pe prima linie două numere naturale N și M reprezentând numărul de linii și numărul de coloane ale caroiajului. Pe următoarele N linii se găsesc câte M valori întregi reprezentând valorile din caroiaj.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fisierul ciocolataout.txt va conține pe prima linie numărul maxim de pătrățele de ciocolată care se poate obține. Pe a doua linie se vor afla patru numere naturale reprezentând coordonatele colțurilor stânga- sus și dreapta-sus (în această ordine) a dreptunghiului ales. Pe cea de-a treia linie se vor afla tot patru numere naturale reprezentând coordonatele colțurilor stânga-jos și dreapta-jos (în această ordine) a dreptunghiului ales.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ N, M ≤ 500&lt;br /&gt;
* Valorile din caroiaj aparțin intervalului [ -2.000.000.000 , 2.000.000.000 ]&lt;br /&gt;
* În cazul în care există mai multe dreptunghiuri din care se obține aceeași valoare maximă, se va alege cel cu indicele de linie al colțului stânga-sus minim. În cazul în care există mai multe dreptunghiuri cu această proprietate, se va alege cel ce are și indicele de coloană al colțului stânga-sus minim. Dacă există mai multe soluții cu proprietatea că au colțul stânga-sus cu indicii de linie și de coloană minimi, se va alege cel cu indicele de linie al coltului dreapta-jos minim. Dacă mai rămân soluții multiple, se va alege cel care are și indicele de coloană al colțului dreapta-jos minim.&lt;br /&gt;
* (schematic: valoare maximă → indice linie stânga-sus minim → indice coloană stânga-sus minim → indice linie dreapta-jos minim → indice coloană dreapta-jos minim )&lt;br /&gt;
* Se garantează că nici Cristinei și nici lui Dan nu li se va face rău de la ciocolată.&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;ciocolatain.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
5 9&lt;br /&gt;
&lt;br /&gt;
3 4 -12 4 6 7 -9 5 12&lt;br /&gt;
&lt;br /&gt;
0 4 5 7 9 -5 1 1 5&lt;br /&gt;
&lt;br /&gt;
0 98 34 0 1 7 -7 1 1&lt;br /&gt;
&lt;br /&gt;
6 7 8 -9 0 -2 3 5 22&lt;br /&gt;
&lt;br /&gt;
47 62 -31 55 0 -83 23 77 -10&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;ciocolataout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
362&lt;br /&gt;
&lt;br /&gt;
1 1 1 9&lt;br /&gt;
&lt;br /&gt;
5 1 5 9&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Dreptunghiul determinat de punctele (1, 1), (1, 9), (5, 1), (5, 9).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def is_valid_input(n, m, a):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 500) or not (1 &amp;lt;= m &amp;lt;= 500):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if not (-2_000_000_000 &amp;lt;= a[i][j] &amp;lt;= 2_000_000_000):&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citeste_input(file_name=&amp;quot;ciocolatain.txt&amp;quot;):&lt;br /&gt;
    with open(file_name, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n, m = map(int, file.readline().split())&lt;br /&gt;
        a = [list(map(int, file.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    if not is_valid_input(n, m, a):&lt;br /&gt;
        raise ValueError(&amp;quot;Input invalid&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    return n, m, a&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def scrie_output(smax, x1, y1, lx, ly, file_name=&amp;quot;ciocolataout.txt&amp;quot;):&lt;br /&gt;
    with open(file_name, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(f&amp;quot;{smax}\n&amp;quot;)&lt;br /&gt;
        file.write(f&amp;quot;{x1} {y1} {x1} {y1 + ly}\n&amp;quot;)&lt;br /&gt;
        file.write(f&amp;quot;{x1 + lx} {y1} {x1 + lx} {y1 + ly}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def gaseste_subsir_maxim(n, m, a):&lt;br /&gt;
    s = [[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;
            s[i][j] = a[i - 1][j - 1] + s[i - 1][j]&lt;br /&gt;
&lt;br /&gt;
    smax, x1, y1, lx, ly = 0, 0, 0, 0, 0&lt;br /&gt;
&lt;br /&gt;
    for p in range(1, n + 1):&lt;br /&gt;
        for q in range(p, n + 1):&lt;br /&gt;
            sum_val = 0&lt;br /&gt;
            lasty = 1&lt;br /&gt;
            for j in range(1, m + 1):&lt;br /&gt;
                s1 = s[q][j] - s[p - 1][j]&lt;br /&gt;
                sum_val += s1&lt;br /&gt;
                if sum_val &amp;lt; 0:&lt;br /&gt;
                    sum_val = 0&lt;br /&gt;
                    lasty = j + 1&lt;br /&gt;
                if sum_val &amp;gt; smax or (sum_val == smax and (p &amp;lt; x1 or (p == x1 and lasty &amp;lt; y1))):&lt;br /&gt;
                    smax = sum_val&lt;br /&gt;
                    x1 = p&lt;br /&gt;
                    y1 = lasty&lt;br /&gt;
                    lx = q - p&lt;br /&gt;
                    ly = j - lasty&lt;br /&gt;
&lt;br /&gt;
    return smax, x1, y1, lx, ly&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m, a = citeste_input()&lt;br /&gt;
    smax, x1, y1, lx, ly = gaseste_subsir_maxim(n, m, a)&lt;br /&gt;
    scrie_output(smax, x1, y1, lx, ly)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0957_-_Zana&amp;diff=8910</id>
		<title>0957 - Zana</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0957_-_Zana&amp;diff=8910"/>
		<updated>2024-01-03T20:06:43Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Castelul Zânei Spiriduşilor este construit pe o suprafaţă dreptunghiulară având n*m camere identice, de formă pătratică, dispuse câte m pe direcţia Ox şi câte n pe direcţia Oy ca în desenul de mai jos în care n=3 şi m=6. Din fiecare cameră se poate intra în orice cameră învecinată, cameră care are un perete comun cu acesta. Fiecare cameră este identificată prin coordonatele sale, ca în figură.&lt;br /&gt;
[[Fișier:Zana-enunt-1.png|miniatura|240x240px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
În castel, trăiesc k spiriduşi împreună cu Zâna lor. Fiind în curând aniversarea zilei de naştere a Zânei, fiecare spiriduş a pregătit câte un cadou pe care îl ascunde, nevăzut de ceilalţi, într-una din camerele castelului. Tradiţia acestei sărbătoriri, impune următoarele reguli:&lt;br /&gt;
&lt;br /&gt;
În căutarea cadourilor, Zâna porneşte din camera de coordonate (1,1). Ea se deplasează prin camerele castelului cât timp în aceste camere nu se află niciun cadou.&lt;br /&gt;
&lt;br /&gt;
Căutarea se încheie în momentul în care Zâna intră într-o cameră în care se află cel puţin un cadou. Zână va primi toate cadourile aflate în acestă cameră, restul cadourilor vor dispărea.&lt;br /&gt;
&lt;br /&gt;
== Cerinţă ==&lt;br /&gt;
Scrieţi un program care să citească din fişierul zana.in numerele naturale n, m, k şi cele k coordonatele ale camerelor în care spiriduşii au ascuns cadourile, şi care să determine:&lt;br /&gt;
&lt;br /&gt;
a) numărul n1 maxim de cadouri pe care le poate primi Zâna în urma respectării regulilor;&lt;br /&gt;
&lt;br /&gt;
b) numărului n2 al camerelor în care poate ajunge Zâna respectând regulile, camere ce conţin fiecare câte n1 cadouri.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare zanain.txt conţine pe prima linie cele trei numere naturale: n m k, separate prin câte un spaţiu. Pe fiecare din următoarele k linii, câte una pentru fiecare spiriduş, sunt scrise câte două numere naturale: i j, separate printr-un spaţiu, reprezentând coordonatele camerei în care spiriduşul curent a ascuns cadoul.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire zanaout.txt va conține două linii. Pe prima linie se va scrie numărul natural n1 reprezentând numărul maxim de cadouri pe care le poate primi Zâna. Pe cea de-a doua linie se va scrie numărul natural n2, reprezentând numărul camerelor în care poate ajunge Zâna şi care conţin fiecare câte n1 cadouri.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 180, 1 ≤ m ≤ 180, 1 ≤ k ≤ 30.000&lt;br /&gt;
* 1 ≤ i ≤ n, 1 ≤ j ≤ m&lt;br /&gt;
* toate valorile din fișierul de intrare sunt numere naturale&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;zanain.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 5 11&lt;br /&gt;
&lt;br /&gt;
1 5&lt;br /&gt;
&lt;br /&gt;
1 5&lt;br /&gt;
&lt;br /&gt;
1 3&lt;br /&gt;
&lt;br /&gt;
1 3&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
2 4&lt;br /&gt;
&lt;br /&gt;
2 4&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
3 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zanaout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Castelul are 3*5=15 camere. Coordonatele acestora sunt cele din figura 1, iar cadourile sunt dispuse ca în figura următoare:&lt;br /&gt;
[[Fișier:Zana-enunt-2 (1).png|miniatura|460x460px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zâna porneşte căutarea începând din camera de coordonate (1,1). Camera cu număr maxim de cadouri (3) are coordonatele (1,4), dar zâna nu poate ajunge în acestă cameră, deoarece pentru a ajunge în acesta ea trebuie să treacă prin una din camerele de coordonate (1,3), (2,4), (2,5) în care se află cadouri. Conform regulamentului, căutarea se va încheia în una din aceste camere. Astfel zâna poate parcurge camerele (1,1), (1,2), (1,3) sau (1,1), (1,2), (2,2), (2,3), (2,4), etc pentru a ajunge într-una din cele n2=2 camere cu număr n1=2 maxim de cadouri.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def este_input_valid(n, m, k, i, j):&lt;br /&gt;
    return (1 &amp;lt;= n &amp;lt;= 180 and 1 &amp;lt;= m &amp;lt;= 180 and 1 &amp;lt;= k &amp;lt;= 30000 and&lt;br /&gt;
            1 &amp;lt;= i &amp;lt;= n and 1 &amp;lt;= j &amp;lt;= m)&lt;br /&gt;
def fill(i, j):&lt;br /&gt;
    b[i][j] = 1&lt;br /&gt;
    a[i][j] = -1&lt;br /&gt;
    if a[i + 1][j] == 0 and i + 1 &amp;lt;= n:&lt;br /&gt;
        fill(i + 1, j)&lt;br /&gt;
    if a[i - 1][j] == 0 and i - 1 &amp;gt;= 1:&lt;br /&gt;
        fill(i - 1, j)&lt;br /&gt;
    if a[i][j + 1] == 0 and j + 1 &amp;lt;= m:&lt;br /&gt;
        fill(i, j + 1)&lt;br /&gt;
    if a[i][j - 1] == 0 and j - 1 &amp;gt;= 1:&lt;br /&gt;
        fill(i, j - 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;zanain.txt&amp;quot;, &amp;quot;r&amp;quot;) as f_in, open(&amp;quot;zanaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    n, m, k = map(int, f_in.readline().split())&lt;br /&gt;
    a = [[0] * 101 for _ in range(101)]&lt;br /&gt;
    b = [[0] * 101 for _ in range(101)]&lt;br /&gt;
&lt;br /&gt;
    for _ in range(k):&lt;br /&gt;
        x, y = map(int, f_in.readline().split())&lt;br /&gt;
        a[x][y] += 1&lt;br /&gt;
&lt;br /&gt;
    fill(1, 1)&lt;br /&gt;
&lt;br /&gt;
    max_val, cnt = 0, 0&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;
            if a[i][j] &amp;gt; 0 and (b[i + 1][j] == 1 or b[i - 1][j] == 1 or b[i][j + 1] == 1 or b[i][j - 1] == 1):&lt;br /&gt;
                if a[i][j] &amp;gt; max_val:&lt;br /&gt;
                    max_val = a[i][j]&lt;br /&gt;
                    cnt = 0&lt;br /&gt;
                if a[i][j] == max_val:&lt;br /&gt;
                    cnt += 1&lt;br /&gt;
&lt;br /&gt;
    f_out.write(str(max_val) + &#039;\n&#039; + str(cnt) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fill(i,j)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0957_-_Zana&amp;diff=8909</id>
		<title>0957 - Zana</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0957_-_Zana&amp;diff=8909"/>
		<updated>2024-01-03T20:04:53Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: Pagină nouă: Castelul Zânei Spiriduşilor este construit pe o suprafaţă dreptunghiulară având n*m camere identice, de formă pătratică, dispuse câte m pe direcţia Ox şi câte n pe direcţia Oy ca în desenul de mai jos în care n=3 şi m=6. Din fiecare cameră se poate intra în orice cameră învecinată, cameră care are un perete comun cu acesta. Fiecare cameră este identificată prin coordonatele sale, ca în figură. 240x240px   În c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Castelul Zânei Spiriduşilor este construit pe o suprafaţă dreptunghiulară având n*m camere identice, de formă pătratică, dispuse câte m pe direcţia Ox şi câte n pe direcţia Oy ca în desenul de mai jos în care n=3 şi m=6. Din fiecare cameră se poate intra în orice cameră învecinată, cameră care are un perete comun cu acesta. Fiecare cameră este identificată prin coordonatele sale, ca în figură.&lt;br /&gt;
[[Fișier:Zana-enunt-1.png|miniatura|240x240px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
În castel, trăiesc k spiriduşi împreună cu Zâna lor. Fiind în curând aniversarea zilei de naştere a Zânei, fiecare spiriduş a pregătit câte un cadou pe care îl ascunde, nevăzut de ceilalţi, într-una din camerele castelului. Tradiţia acestei sărbătoriri, impune următoarele reguli:&lt;br /&gt;
&lt;br /&gt;
În căutarea cadourilor, Zâna porneşte din camera de coordonate (1,1). Ea se deplasează prin camerele castelului cât timp în aceste camere nu se află niciun cadou.&lt;br /&gt;
&lt;br /&gt;
Căutarea se încheie în momentul în care Zâna intră într-o cameră în care se află cel puţin un cadou. Zână va primi toate cadourile aflate în acestă cameră, restul cadourilor vor dispărea.&lt;br /&gt;
&lt;br /&gt;
== Cerinţă ==&lt;br /&gt;
Scrieţi un program care să citească din fişierul zana.in numerele naturale n, m, k şi cele k coordonatele ale camerelor în care spiriduşii au ascuns cadourile, şi care să determine:&lt;br /&gt;
&lt;br /&gt;
a) numărul n1 maxim de cadouri pe care le poate primi Zâna în urma respectării regulilor;&lt;br /&gt;
&lt;br /&gt;
b) numărului n2 al camerelor în care poate ajunge Zâna respectând regulile, camere ce conţin fiecare câte n1 cadouri.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare zanain.txt conţine pe prima linie cele trei numere naturale: n m k, separate prin câte un spaţiu. Pe fiecare din următoarele k linii, câte una pentru fiecare spiriduş, sunt scrise câte două numere naturale: i j, separate printr-un spaţiu, reprezentând coordonatele camerei în care spiriduşul curent a ascuns cadoul.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire zanaout.txt va conține două linii. Pe prima linie se va scrie numărul natural n1 reprezentând numărul maxim de cadouri pe care le poate primi Zâna. Pe cea de-a doua linie se va scrie numărul natural n2, reprezentând numărul camerelor în care poate ajunge Zâna şi care conţin fiecare câte n1 cadouri.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ n ≤ 180, 1 ≤ m ≤ 180, 1 ≤ k ≤ 30.000&lt;br /&gt;
* 1 ≤ i ≤ n, 1 ≤ j ≤ m&lt;br /&gt;
* toate valorile din fișierul de intrare sunt numere naturale&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;zanain.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3 5 11&lt;br /&gt;
&lt;br /&gt;
1 5&lt;br /&gt;
&lt;br /&gt;
1 5&lt;br /&gt;
&lt;br /&gt;
1 3&lt;br /&gt;
&lt;br /&gt;
1 3&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
1 4&lt;br /&gt;
&lt;br /&gt;
2 4&lt;br /&gt;
&lt;br /&gt;
2 4&lt;br /&gt;
&lt;br /&gt;
2 5&lt;br /&gt;
&lt;br /&gt;
3 2&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;zanaout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
2&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Castelul are 3*5=15 camere. Coordonatele acestora sunt cele din figura 1, iar cadourile sunt dispuse ca în figura următoare:&lt;br /&gt;
[[Fișier:Zana-enunt-2 (1).png|miniatura|460x460px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Zâna porneşte căutarea începând din camera de coordonate (1,1). Camera cu număr maxim de cadouri (3) are coordonatele (1,4), dar zâna nu poate ajunge în acestă cameră, deoarece pentru a ajunge în acesta ea trebuie să treacă prin una din camerele de coordonate (1,3), (2,4), (2,5) în care se află cadouri. Conform regulamentului, căutarea se va încheia în una din aceste camere. Astfel zâna poate parcurge camerele (1,1), (1,2), (1,3) sau (1,1), (1,2), (2,2), (2,3), (2,4), etc pentru a ajunge într-una din cele n2=2 camere cu număr n1=2 maxim de cadouri.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def este_input_valid(n, m, k, i, j):&lt;br /&gt;
    return (1 &amp;lt;= n &amp;lt;= 180 and 1 &amp;lt;= m &amp;lt;= 180 and 1 &amp;lt;= k &amp;lt;= 30000 and&lt;br /&gt;
            1 &amp;lt;= i &amp;lt;= n and 1 &amp;lt;= j &amp;lt;= m)&lt;br /&gt;
def fill(i, j):&lt;br /&gt;
    b[i][j] = 1&lt;br /&gt;
    a[i][j] = -1&lt;br /&gt;
    if a[i + 1][j] == 0 and i + 1 &amp;lt;= n:&lt;br /&gt;
        fill(i + 1, j)&lt;br /&gt;
    if a[i - 1][j] == 0 and i - 1 &amp;gt;= 1:&lt;br /&gt;
        fill(i - 1, j)&lt;br /&gt;
    if a[i][j + 1] == 0 and j + 1 &amp;lt;= m:&lt;br /&gt;
        fill(i, j + 1)&lt;br /&gt;
    if a[i][j - 1] == 0 and j - 1 &amp;gt;= 1:&lt;br /&gt;
        fill(i, j - 1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;zanain.txt&amp;quot;, &amp;quot;r&amp;quot;) as f_in, open(&amp;quot;zanaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as f_out:&lt;br /&gt;
    n, m, k = map(int, f_in.readline().split())&lt;br /&gt;
    a = [[0] * 101 for _ in range(101)]&lt;br /&gt;
    b = [[0] * 101 for _ in range(101)]&lt;br /&gt;
&lt;br /&gt;
    for _ in range(k):&lt;br /&gt;
        x, y = map(int, f_in.readline().split())&lt;br /&gt;
        a[x][y] += 1&lt;br /&gt;
&lt;br /&gt;
    fill(1, 1)&lt;br /&gt;
&lt;br /&gt;
    max_val, cnt = 0, 0&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;
            if a[i][j] &amp;gt; 0 and (b[i + 1][j] == 1 or b[i - 1][j] == 1 or b[i][j + 1] == 1 or b[i][j - 1] == 1):&lt;br /&gt;
                if a[i][j] &amp;gt; max_val:&lt;br /&gt;
                    max_val = a[i][j]&lt;br /&gt;
                    cnt = 0&lt;br /&gt;
                if a[i][j] == max_val:&lt;br /&gt;
                    cnt += 1&lt;br /&gt;
&lt;br /&gt;
    f_out.write(str(max_val) + &#039;\n&#039; + str(cnt) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fill(i,j)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=File:Zana-enunt-2_(1).png&amp;diff=8908</id>
		<title>File:Zana-enunt-2 (1).png</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=File:Zana-enunt-2_(1).png&amp;diff=8908"/>
		<updated>2024-01-03T20:01:17Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=File:Zana-enunt-1.png&amp;diff=8907</id>
		<title>File:Zana-enunt-1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=File:Zana-enunt-1.png&amp;diff=8907"/>
		<updated>2024-01-03T19:55:02Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;.&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1663_-_Vali&amp;diff=8900</id>
		<title>1663 - Vali</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1663_-_Vali&amp;diff=8900"/>
		<updated>2024-01-03T17:25:08Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
De Ziua Îndrăgostiţilor Vali a hotărât să organizeze o petrecere mare pe stadionul oraşului. La petrecere pot participa numai şi numai îndrăgostiţi care şi-au procurat biletele din timp. Biletele oricărui cuplu sunt aproape identice. Ele au proprietatea că numărul de serie are prima cifră 1 pentru băieţi şi *prima cifră 2 pentru fete, continuarea celor două numere este identică. De exemplu, dacă prietenul are biletul cu numărul 134, atunci prietena lui are biletul 234, iar dacă prietena are biletul 2234567890, atunci prietenul ei are biletul 1234567890.&lt;br /&gt;
&lt;br /&gt;
Bineînțeles, că și Vali are bilet și speră să câștige un cadou. Biletul lui Vali are aceeași proprietate ca celelalte bilete, cu o singură excepție: Vali nu va participa cu pereche la acest eveniment.&lt;br /&gt;
&lt;br /&gt;
Pe parcursul desfășurării petrecerii, biletele de intrare vor avea şi rolul de bilet de tombolă. Acestea vor fi introduse într-o urnă şi câteva dintre ele vor fi extrase, iar norocoşii proprietari ai biletelor vor primi cadouri valoroase. Se mai știe că există probabilitatea ca unii participanți să vină la petrecere cu bilete falsificate, având numere identice cu cele de pe un bilet original. Acest fapt se va depista cu ușurință în momentul extragerii.&lt;br /&gt;
&lt;br /&gt;
== Cerinţă ==&lt;br /&gt;
Cunoscând numerele de serie ale tuturor biletelor de intrare la acest eveniment, aflaţi:&lt;br /&gt;
&lt;br /&gt;
a) dacă pe Vali o cheamă Valentina sau îl cheamă Valentin;&lt;br /&gt;
&lt;br /&gt;
b) numărul biletului lui Vali.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul valiin.txt are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
Pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2.&lt;br /&gt;
&lt;br /&gt;
Pe a doua linie un număr natural n, reprezentând numărul de participanţi. Următoarele n linii conţin câte un număr de bilet.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul valiout.txt are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerinţă. În acest caz, în fişierul de ieşire se va scrie un singur cuvânt: valentin sau valentina (totul cu litere mici!) , în concordanţă cu numele lui Vali din certificatul de naștere.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerinţă. În acest caz, în fişierul de ieșire se va scrie un număr natural, reprezentând numărul de pe biletul lui Vali.&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
* 3 ≤ n ≤ 299999&lt;br /&gt;
* pentru 30% din teste avem p=1, iar pentru 70% din teste avem p=2;&lt;br /&gt;
* pentru 90% din teste numărul biletului nu depășește tipul long (C++) respectiv longint (Pascal), pentru 10% din teste există bilete cu numere până la 17 cifre.&lt;br /&gt;
* pentru 90% din teste biletul lui Vali nu este falsificat, iar pentru 10% din teste numărul biletului lui Vali coincide cu numărul unui alt bilet xeroxat.&lt;br /&gt;
&lt;br /&gt;
== Exemple ==&lt;br /&gt;
&#039;&#039;&#039;valiin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
1345&lt;br /&gt;
&lt;br /&gt;
2649012&lt;br /&gt;
&lt;br /&gt;
15480&lt;br /&gt;
&lt;br /&gt;
2345&lt;br /&gt;
&lt;br /&gt;
1649012&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;valiout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
valentin&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Singurul bilet fără pereche este 15480, deci posesorul este un băiat, îl cheamă Valentin (scris cu ‚v’ mic în fişier).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def valentin_sau_valentina(bilet):&lt;br /&gt;
    if int(bilet[0]) % 2 == 1:&lt;br /&gt;
        return &amp;quot;valentin&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;valentina&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def gaseste_bilet_Vali(bilete):&lt;br /&gt;
    for i in range(len(bilete)):&lt;br /&gt;
        bilet = bilete[i]&lt;br /&gt;
        if bilet not in bilete[:i] and bilet not in bilete[i + 1:]:&lt;br /&gt;
            return bilet&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;valiin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        p = int(file.readline().strip())&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        if not (3 &amp;lt;= n &amp;lt;= 299999):&lt;br /&gt;
            print(&amp;quot;Numarul de participanti nu respecta restrictia.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        bilete = [file.readline().strip() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        with open(&amp;quot;valiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
            file_out.write(valentin_sau_valentina(gaseste_bilet_Vali(bilete)))&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        with open(&amp;quot;valiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
            file_out.write(gaseste_bilet_Vali(bilete))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1663_-_Vali&amp;diff=8898</id>
		<title>1663 - Vali</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1663_-_Vali&amp;diff=8898"/>
		<updated>2024-01-03T17:21:34Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: Pagină nouă: == Enunț == De Ziua Îndrăgostiţilor Vali a hotărât să organizeze o petrecere mare pe stadionul oraşului. La petrecere pot participa numai şi numai îndrăgostiţi care şi-au procurat biletele din timp. Biletele oricărui cuplu sunt aproape identice. Ele au proprietatea că numărul de serie are prima cifră 1 pentru băieţi şi *prima cifră 2 pentru fete, continuarea celor două numere este identică. De exemplu, dacă prietenul are biletul cu numărul 134, atunci...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
De Ziua Îndrăgostiţilor Vali a hotărât să organizeze o petrecere mare pe stadionul oraşului. La petrecere pot participa numai şi numai îndrăgostiţi care şi-au procurat biletele din timp. Biletele oricărui cuplu sunt aproape identice. Ele au proprietatea că numărul de serie are prima cifră 1 pentru băieţi şi *prima cifră 2 pentru fete, continuarea celor două numere este identică. De exemplu, dacă prietenul are biletul cu numărul 134, atunci prietena lui are biletul 234, iar dacă prietena are biletul 2234567890, atunci prietenul ei are biletul 1234567890.&lt;br /&gt;
&lt;br /&gt;
Bineînțeles, că și Vali are bilet și speră să câștige un cadou. Biletul lui Vali are aceeași proprietate ca celelalte bilete, cu o singură excepție: Vali nu va participa cu pereche la acest eveniment.&lt;br /&gt;
&lt;br /&gt;
Pe parcursul desfășurării petrecerii, biletele de intrare vor avea şi rolul de bilet de tombolă. Acestea vor fi introduse într-o urnă şi câteva dintre ele vor fi extrase, iar norocoşii proprietari ai biletelor vor primi cadouri valoroase. Se mai știe că există probabilitatea ca unii participanți să vină la petrecere cu bilete falsificate, având numere identice cu cele de pe un bilet original. Acest fapt se va depista cu ușurință în momentul extragerii.&lt;br /&gt;
&lt;br /&gt;
== Cerinţă ==&lt;br /&gt;
Cunoscând numerele de serie ale tuturor biletelor de intrare la acest eveniment, aflaţi:&lt;br /&gt;
&lt;br /&gt;
a) dacă pe Vali o cheamă Valentina sau îl cheamă Valentin;&lt;br /&gt;
&lt;br /&gt;
b) numărul biletului lui Vali.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul valiin.txt are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
Pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2.&lt;br /&gt;
&lt;br /&gt;
Pe a doua linie un număr natural n, reprezentând numărul de participanţi. Următoarele n linii conţin câte un număr de bilet.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul valiout.txt are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerinţă. În acest caz, în fişierul de ieşire se va scrie un singur cuvânt: valentin sau valentina (totul cu litere mici!) , în concordanţă cu numele lui Vali din certificatul de naștere.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerinţă. În acest caz, în fişierul de ieșire se va scrie un număr natural, reprezentând numărul de pe biletul lui Vali.&lt;br /&gt;
&lt;br /&gt;
Restricţii şi precizări&lt;br /&gt;
&lt;br /&gt;
* 3 ≤ n ≤ 299999&lt;br /&gt;
* pentru 30% din teste avem p=1, iar pentru 70% din teste avem p=2;&lt;br /&gt;
* pentru 90% din teste numărul biletului nu depășește tipul long (C++) respectiv longint (Pascal), pentru 10% din teste există bilete cu numere până la 17 cifre.&lt;br /&gt;
* pentru 90% din teste biletul lui Vali nu este falsificat, iar pentru 10% din teste numărul biletului lui Vali coincide cu numărul unui alt bilet xeroxat.&lt;br /&gt;
&lt;br /&gt;
Exemple&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;valiin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
1&lt;br /&gt;
&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
1345&lt;br /&gt;
&lt;br /&gt;
2649012&lt;br /&gt;
&lt;br /&gt;
15480&lt;br /&gt;
&lt;br /&gt;
2345&lt;br /&gt;
&lt;br /&gt;
1649012&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;valiout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
valentin&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Singurul bilet fără pereche este 15480, deci posesorul este un băiat, îl cheamă Valentin (scris cu ‚v’ mic în fişier).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def valentin_sau_valentina(bilet):&lt;br /&gt;
    if int(bilet[0]) % 2 == 1:&lt;br /&gt;
        return &amp;quot;valentin&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;valentina&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def gaseste_bilet_Vali(bilete):&lt;br /&gt;
    for i in range(len(bilete)):&lt;br /&gt;
        bilet = bilete[i]&lt;br /&gt;
        if bilet not in bilete[:i] and bilet not in bilete[i + 1:]:&lt;br /&gt;
            return bilet&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;valiin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        p = int(file.readline().strip())&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        if not (3 &amp;lt;= n &amp;lt;= 299999):&lt;br /&gt;
            print(&amp;quot;Numarul de participanti nu respecta restrictia.&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
        bilete = [file.readline().strip() for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        with open(&amp;quot;valiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
            file_out.write(valentin_sau_valentina(gaseste_bilet_Vali(bilete)))&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        with open(&amp;quot;valiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
            file_out.write(gaseste_bilet_Vali(bilete))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2931_-_Parap&amp;diff=8892</id>
		<title>2931 - Parap</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2931_-_Parap&amp;diff=8892"/>
		<updated>2024-01-03T16:47:23Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: Pagină nouă: == Cerința == Se dau N numere naturale a1,a2…an  . O pereche (a[j],a[k]) cu 1≤j&amp;lt;k≤N se numește pereche specială dacă are proprietatea că din a[j] și a[k] prin “lipire” se formează un număr X în care cifrele conținute apar de număr par de ori. De exemplu numerele 123 şi 21223 dacă se lipesc produc numărul 12321223 în care 1 apare de 2 ori, 2 apare de 4 ori și 3 apare de 2 ori.  Să se determine numărul perechilor speciale.  == Date de intrare == Pe p...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau N numere naturale a1,a2…an&lt;br /&gt;
&lt;br /&gt;
. O pereche (a[j],a[k]) cu 1≤j&amp;lt;k≤N se numește pereche specială dacă are proprietatea că din a[j] și a[k] prin “lipire” se formează un număr X în care cifrele conținute apar de număr par de ori. De exemplu numerele 123 şi 21223 dacă se lipesc produc numărul 12321223 în care 1 apare de 2 ori, 2 apare de 4 ori și 3 apare de 2 ori.&lt;br /&gt;
&lt;br /&gt;
Să se determine numărul perechilor speciale.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe primul rând al fișierului text parap.in se află numărul natural N reprezentând numărul de elemente ale șirului dat. Pe al doilea rând, separate prin câte un spațiu se află elementele șirului dat.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Pe primul rând în fișierul de ieșire parap.out se va scrie un număr natural reprezentând numărul perechilor speciale.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
&lt;br /&gt;
* 2 ≤ N ≤ 100.000&lt;br /&gt;
* 1 ≤ a[k] ≤ 1018&lt;br /&gt;
&lt;br /&gt;
== Exemplu: ==&lt;br /&gt;
&#039;&#039;&#039;parapin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
10&lt;br /&gt;
&lt;br /&gt;
4 1 13 5 42 2 1 2 112 212&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;parapout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
6&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Perechile speciale sunt (1,1),(1,212),(2,2),(2,112),(1,212),(2,112).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(N, values):&lt;br /&gt;
    if not (2 &amp;lt;= N &amp;lt;= 100000):&lt;br /&gt;
        print(&amp;quot;Eroare: N trebuie să fie între 2 și 100000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for val in values:&lt;br /&gt;
        if not (1 &amp;lt;= val &amp;lt;= 10**18):&lt;br /&gt;
            print(f&amp;quot;Eroare: Valoarea {val} nu este în intervalul permis.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
def trans(x):&lt;br /&gt;
    w = [0] * 12&lt;br /&gt;
    sol = 0&lt;br /&gt;
    p = 1&lt;br /&gt;
&lt;br /&gt;
    while x != 0:&lt;br /&gt;
        w[x % 10] += 1&lt;br /&gt;
        x //= 10&lt;br /&gt;
&lt;br /&gt;
    for i in range(10):&lt;br /&gt;
        sol += p * (w[i] % 2)&lt;br /&gt;
        p *= 2&lt;br /&gt;
        w[i] = 0&lt;br /&gt;
&lt;br /&gt;
    return sol&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;parapin.txt&amp;quot;, &amp;quot;r&amp;quot;) as in_file, open(&amp;quot;parapout.txt&amp;quot;, &amp;quot;w&amp;quot;) as out_file:&lt;br /&gt;
        n = int(in_file.readline().strip())&lt;br /&gt;
        v = [0] * (n + 1)&lt;br /&gt;
        vf = [0] * 10002&lt;br /&gt;
        sol = 0&lt;br /&gt;
&lt;br /&gt;
        numbers = map(int, in_file.readline().split())&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            x = next(numbers)&lt;br /&gt;
            v[i] = trans(x)&lt;br /&gt;
            sol += vf[v[i]]&lt;br /&gt;
            vf[v[i]] += 1&lt;br /&gt;
&lt;br /&gt;
        out_file.write(str(sol))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0152_-_Sir&amp;diff=8888</id>
		<title>0152 - Sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0152_-_Sir&amp;diff=8888"/>
		<updated>2024-01-03T16:23:28Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
GM are un şir de N numere naturale a1 , a2 ,…, aN , cu proprietatea ai ≤ ai+1 ≤ 2*ai pentru orice i, 1 ≤i &amp;lt; N. El doreşte să scrie în faţa fiecărei valori din şir un semn + sau - astfel încât valoarea S a expresiei obţinute să aibă proprietatea 0 ≤ S ≤ a1 .&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Scrieţi un program care să-l ajute pe GM să determine un mod de a scrie cele N semne.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fişierului de intrare sir.in se află numărul natural N reprezentând numărul de valori din şir. Pe următoarea linie se află numerele a1 , a2 ,…, aN , separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire sir.out va avea o singură linie ce va conţine un şir de N caractere + sau -. Al i-lea caracter va reprezenta semnul ce va fi scris în faţa valorii ai .&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ N ≤ 100.000&lt;br /&gt;
* 1 ≤ ai ≤ 109&lt;br /&gt;
* Dacă există mai multe soluţii se va afişa oricare dintre ele&lt;br /&gt;
* Pentru un număr de teste în valoare de 30 de puncte, N ≤ 18&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&#039;&#039;&#039;sirin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
2 3 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sirout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
--+&lt;br /&gt;
&lt;br /&gt;
== Explicaţii ==&lt;br /&gt;
Se obţine expresia S=-2-3+5=0, care respectă proprietatea cerută (0 ≤ S ≤ 2).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(N, values):&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 100000 and (N &amp;lt;= 18 or 1 &amp;lt;= all(1 &amp;lt;= val &amp;lt;= 10**9 for val in values))):&lt;br /&gt;
        print(&amp;quot;Eroare: Date de intrare nevalide.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def solve_signs(N, values):&lt;br /&gt;
    signs = [&#039;&#039;] * N&lt;br /&gt;
    signs[-1] = &#039;+&#039;&lt;br /&gt;
&lt;br /&gt;
    for i in range(N - 2, -1, -1):&lt;br /&gt;
        if values[i] * 2 &amp;gt;= values[i + 1]:&lt;br /&gt;
            signs[i] = &#039;-&#039;&lt;br /&gt;
        else:&lt;br /&gt;
            signs[i] = &#039;+&#039;&lt;br /&gt;
&lt;br /&gt;
    return &#039;&#039;.join(signs)&lt;br /&gt;
&lt;br /&gt;
with open(&#039;sirin.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    N = int(file.readline().strip())&lt;br /&gt;
    values = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if not validate_input(N, values):&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
result = solve_signs(N, values)&lt;br /&gt;
&lt;br /&gt;
with open(&#039;sirout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
    file.write(result + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    solve_signs(N, values)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0152_-_Sir&amp;diff=8887</id>
		<title>0152 - Sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0152_-_Sir&amp;diff=8887"/>
		<updated>2024-01-03T16:21:49Z</updated>

		<summary type="html">&lt;p&gt;Andrada378: Pagină nouă: == Enunț == GM are un şir de N numere naturale a1 , a2 ,…, aN , cu proprietatea ai ≤ ai+1 ≤ 2*ai pentru orice i, 1 ≤i &amp;lt; N. El doreşte să scrie în faţa fiecărei valori din şir un semn + sau - astfel încât valoarea S a expresiei obţinute să aibă proprietatea 0 ≤ S ≤ a1 .  == Cerinţa == Scrieţi un program care să-l ajute pe GM să determine un mod de a scrie cele N semne.  == Date de intrare == Pe prima linie a fişierului de intrare sir.in se află n...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
GM are un şir de N numere naturale a1 , a2 ,…, aN , cu proprietatea ai ≤ ai+1 ≤ 2*ai pentru orice i, 1 ≤i &amp;lt; N. El doreşte să scrie în faţa fiecărei valori din şir un semn + sau - astfel încât valoarea S a expresiei obţinute să aibă proprietatea 0 ≤ S ≤ a1 .&lt;br /&gt;
&lt;br /&gt;
== Cerinţa ==&lt;br /&gt;
Scrieţi un program care să-l ajute pe GM să determine un mod de a scrie cele N semne.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fişierului de intrare sir.in se află numărul natural N reprezentând numărul de valori din şir. Pe următoarea linie se află numerele a1 , a2 ,…, aN , separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Date de ieşire ==&lt;br /&gt;
Fişierul de ieşire sir.out va avea o singură linie ce va conţine un şir de N caractere + sau -. Al i-lea caracter va reprezenta semnul ce va fi scris în faţa valorii ai .&lt;br /&gt;
&lt;br /&gt;
== Restricţii şi precizări ==&lt;br /&gt;
&lt;br /&gt;
* 1 ≤ N ≤ 100.000&lt;br /&gt;
* 1 ≤ ai ≤ 109&lt;br /&gt;
* Dacă există mai multe soluţii se va afişa oricare dintre ele&lt;br /&gt;
* Pentru un număr de teste în valoare de 30 de puncte, N ≤ 18&lt;br /&gt;
&lt;br /&gt;
== Exemplu ==&lt;br /&gt;
&#039;&#039;&#039;sirin.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
3&lt;br /&gt;
&lt;br /&gt;
2 3 5&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;sirout.txt&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
--+&lt;br /&gt;
&lt;br /&gt;
== Explicaţii ==&lt;br /&gt;
Se obţine expresia S=-2-3+5=0, care respectă proprietatea cerută (0 ≤ S ≤ 2).&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
def validate_input(N, values):&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 100000):&lt;br /&gt;
        print(&amp;quot;Eroare: N trebuie să fie între 1 și 100000.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if N &amp;lt;= 18 and not (N &amp;lt;= 18):&lt;br /&gt;
        print(&amp;quot;Eroare:  N trebuie să fie mai mic sau egal cu 18.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(values) != N:&lt;br /&gt;
        print(&amp;quot;Eroare: Numărul de valori nu corespunde cu N.&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for val in values:&lt;br /&gt;
        if not (1 &amp;lt;= val &amp;lt;= 10**9):&lt;br /&gt;
            print(f&amp;quot;Eroare: Valoarea {val} nu este în intervalul permis.&amp;quot;)&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def solve_signs(N, values):&lt;br /&gt;
    signs = [&#039;&#039;] * N&lt;br /&gt;
    signs[-1] = &#039;+&#039;&lt;br /&gt;
&lt;br /&gt;
    for i in range(N - 2, -1, -1):&lt;br /&gt;
        if values[i] * 2 &amp;gt;= values[i + 1]:&lt;br /&gt;
            signs[i] = &#039;-&#039;&lt;br /&gt;
        else:&lt;br /&gt;
            signs[i] = &#039;+&#039;&lt;br /&gt;
&lt;br /&gt;
    return &#039;&#039;.join(signs)&lt;br /&gt;
&lt;br /&gt;
with open(&#039;sirin.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
    N = int(file.readline().strip())&lt;br /&gt;
    values = list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if not validate_input(N, values):&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
result = solve_signs(N, values)&lt;br /&gt;
&lt;br /&gt;
with open(&#039;sirout.txt&#039;, &#039;w&#039;) as file:&lt;br /&gt;
    file.write(result + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    solve_signs(N, values)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Andrada378</name></author>
	</entry>
</feed>