<?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=Raul</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=Raul"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Raul"/>
	<updated>2026-05-01T04:28:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1103_-_Harta&amp;diff=9722</id>
		<title>1103 - Harta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1103_-_Harta&amp;diff=9722"/>
		<updated>2024-03-26T16:45:08Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Pe baza unei imagini preluate din satelit, se realizează harta unei mici localități. Localitatea ocupă o suprafață dreptunghiulară, cu laturile orientate pe direcțiile Nord-Sud, respectiv Est-Vest. Studiind imaginea obținută de la satelit, cartografii au constatat că toate cele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; clădiri au forma unor dreptunghiuri distincte. Imaginea poate fi reprezentată sub forma unui tablou cu &amp;lt;code&amp;gt;n•m&amp;lt;/code&amp;gt; celule așezate pe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii numerotate...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pe baza unei imagini preluate din satelit, se realizează harta unei mici localități. Localitatea ocupă o suprafață dreptunghiulară, cu laturile orientate pe direcțiile Nord-Sud, respectiv Est-Vest. Studiind imaginea obținută de la satelit, cartografii au constatat că toate cele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; clădiri au forma unor dreptunghiuri distincte. Imaginea poate fi reprezentată sub forma unui tablou cu &amp;lt;code&amp;gt;n•m&amp;lt;/code&amp;gt; celule așezate pe &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; coloane numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Numim drum, un dreptunghi al tabloului care străbate întreaga localitate pe direcția Est-Vest și are un număr maxim de linii sau un dreptunghi care străbate întreaga localitate pe direcția Nord-Sud și are un număr maxim de coloane. Drumurile, evident, nu trebuie să treacă prin clădiri.&lt;br /&gt;
&lt;br /&gt;
Cartografii sunt interesați ca pe această hartă să fie reprezentate la scară doar clădirile, nu și drumurile. De aceea, pentru realizarea hărții, lățimile drumurilor au fost reduse la o singură celulă&lt;br /&gt;
&lt;br /&gt;
Tabloul care reprezintă imaginea localității se codifică astfel: &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; pentru o celulă ocupată de o clădire și &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; pentru o celulă neocupată.&lt;br /&gt;
&lt;br /&gt;
= Cerinţe =&lt;br /&gt;
Cunoscând &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, precum și tabloul care codifică imaginea, se cere să se determine:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;1.&#039;&#039;&#039; Numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; de celule ocupate de către clădirea pătratică cu latura maximă și numărul de clădiri &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; alese dintre celelalte &amp;lt;code&amp;gt;k – 1&amp;lt;/code&amp;gt; clădiri, cu proprietatea că fiecare dintre ele “încape” în interiorul clădirii pătratice cu latură maximă, fără să se suprapună peste celulele marginale ale acesteia.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;2.&#039;&#039;&#039; Tabloul care reprezintă harta, în urma prelucrării imaginii inițiale.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;harta.in&amp;lt;/code&amp;gt; conţine pe prima linie un număr natural &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;. Pentru toate testele de intrare, numărul &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; poate avea doar valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau valoarea &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pe linia a doua se găsesc numerele naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; separate prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
Pe fiecare dintre următoarele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; linii, se găsesc câte patru numere naturale &amp;lt;code&amp;gt;i1 j1 i2 j2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
separate prin câte un spațiu, primele două numere reprezentând coordonatele celulei din extremitatea Nord-Vest, iar ultimele două, coordonatele celulei din extremitatea Sud-Est pentru fiecare dintre cele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; clădiri.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
&lt;br /&gt;
* Dacă valoarea lui &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, atunci se va rezolva numai cerința &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. În acest caz, în fişierul de ieşire &amp;lt;code&amp;gt;harta.out&amp;lt;/code&amp;gt; se vor scrie cele două numere &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; având semnificația descrisă la cerința &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, separate printr-un singur spațiu.&lt;br /&gt;
* Dacă valoarea lui &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, atunci se va rezolva numai cerința &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;harta.out&amp;lt;/code&amp;gt; va conține tabloul care reprezintă harta obținută pe baza imaginii din satelit. Fișierul va avea &amp;lt;code&amp;gt;n1&amp;lt;/code&amp;gt; linii. Pe fiecare linie se vor găsi câte &amp;lt;code&amp;gt;m1&amp;lt;/code&amp;gt; valori &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; separate prin câte un singur spațiu. Celulele situate pe marginile clădirilor vor avea valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Celulele din interiorul clădirilor, ca și cele din exterior, vor avea valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ n, m ≤ 1500&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ i1 ≤ i2 ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ j1 ≤ j2 ≤ m&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ k ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ Lmax ≤ 50&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;Lmax&amp;lt;/code&amp;gt; – latura maximă a unui dreptunghi)&lt;br /&gt;
* Se garantează că există soluție pentru ambele cerințe, pentru toate datele de test.&lt;br /&gt;
* Pentru rezolvarea corectă a primei cerinţe se acordă 20 de puncte, iar pentru cerința a doua se acordă 80 de puncte.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;harta.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 7 7 4&lt;br /&gt;
 1 1 4 4&lt;br /&gt;
 6 2 6 4&lt;br /&gt;
 3 6 3 6&lt;br /&gt;
 6 6 7 7&lt;br /&gt;
&amp;lt;code&amp;gt;harta.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 16 2&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#define pb push_back&lt;br /&gt;
#define DIM 1501&lt;br /&gt;
typedef vector&amp;lt;int&amp;gt; VI;&lt;br /&gt;
&lt;br /&gt;
d = []&lt;br /&gt;
xa = []&lt;br /&gt;
ya = []&lt;br /&gt;
x = [0]&lt;br /&gt;
y = [0]&lt;br /&gt;
s1 = [True]&lt;br /&gt;
s2 = [True]&lt;br /&gt;
c1 = []&lt;br /&gt;
c2 = []&lt;br /&gt;
b1 = []&lt;br /&gt;
b2 = []&lt;br /&gt;
k = 0&lt;br /&gt;
N = 0&lt;br /&gt;
M = 0&lt;br /&gt;
n = 0&lt;br /&gt;
m = 0&lt;br /&gt;
Lmax = 0&lt;br /&gt;
L = 0&lt;br /&gt;
H = 0&lt;br /&gt;
T = 0&lt;br /&gt;
nr_dr = 0&lt;br /&gt;
A = np.zeros((1501, 1501), dtype=bool)&lt;br /&gt;
&lt;br /&gt;
def GetPos(v, val):&lt;br /&gt;
    n = len(v)&lt;br /&gt;
    lo = 0&lt;br /&gt;
    hi = n&lt;br /&gt;
    while lo &amp;lt;= hi:&lt;br /&gt;
        mid = lo + (hi - lo) // 2&lt;br /&gt;
        if v[mid] == val:&lt;br /&gt;
            return mid&lt;br /&gt;
        if val &amp;lt; v[mid]:&lt;br /&gt;
            hi = mid - 1&lt;br /&gt;
        else:&lt;br /&gt;
            lo = mid + 1&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
def WriteMatr(a, N, M):&lt;br /&gt;
    for i in range(1, N+1):&lt;br /&gt;
        for j in range(1, M+1):&lt;br /&gt;
            fout.write(str(int(a[i][j])) + &#039; &#039;)&lt;br /&gt;
        fout.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;harta.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
    lines = fin.readlines()&lt;br /&gt;
    T, N, M, k = map(int, lines[0].split())&lt;br /&gt;
    imax = 0&lt;br /&gt;
    jmax = 0&lt;br /&gt;
    for i in range(k):&lt;br /&gt;
        i1, j1, i2, j2 = map(int, lines[i+1].split())&lt;br /&gt;
        d.append((i1, j1, i2, j2))&lt;br /&gt;
        L = i2 - i1 + 1&lt;br /&gt;
        H = j2 - j1 + 1&lt;br /&gt;
        if L == H and L &amp;gt; Lmax:&lt;br /&gt;
            Lmax = L&lt;br /&gt;
        for i in range(i1, i2+1):&lt;br /&gt;
            xa.extend([i, i])&lt;br /&gt;
            ya.extend([j1, j2])&lt;br /&gt;
            if not s1[i]:&lt;br /&gt;
                x.append(i)&lt;br /&gt;
                s1[i] = True&lt;br /&gt;
        for j in range(j1, j2+1):&lt;br /&gt;
            xa.extend([i1, i2])&lt;br /&gt;
            ya.extend([j, j])&lt;br /&gt;
            if not s2[j]:&lt;br /&gt;
                y.append(j)&lt;br /&gt;
                s2[j] = True&lt;br /&gt;
        if not s1[i1 - 1]:&lt;br /&gt;
            x.append(i1 - 1)&lt;br /&gt;
            s1[i1 - 1] = True&lt;br /&gt;
        if not s2[j1 - 1]:&lt;br /&gt;
            y.append(j1 - 1)&lt;br /&gt;
            s2[j1 - 1] = True&lt;br /&gt;
        imax = max(imax, i2)&lt;br /&gt;
        jmax = max(jmax, j2)&lt;br /&gt;
    if T == 1:&lt;br /&gt;
        for i in range(k):&lt;br /&gt;
            L = d[i][2] - d[i][0] + 1&lt;br /&gt;
            H = d[i][3] - d[i][1] + 1&lt;br /&gt;
            if L &amp;lt; Lmax - 1 and H &amp;lt; Lmax - 1:&lt;br /&gt;
                nr_dr += 1&lt;br /&gt;
        fout.write(str(Lmax * Lmax) + &#039; &#039; + str(nr_dr) + &#039;\n&#039;)&lt;br /&gt;
    else:&lt;br /&gt;
        c1 = [0] * (imax + 1)&lt;br /&gt;
        c2 = [0] * (jmax + 1)&lt;br /&gt;
        for i in range(len(x)):&lt;br /&gt;
            c1[x[i]] += 1&lt;br /&gt;
        for i in range(len(y)):&lt;br /&gt;
            c2[y[i]] += 1&lt;br /&gt;
        for i in range(1, imax+1):&lt;br /&gt;
            c1[i] += c1[i - 1]&lt;br /&gt;
        for i in range(1, jmax+1):&lt;br /&gt;
            c2[i] += c2[i - 1]&lt;br /&gt;
        b1 = [0] * len(x)&lt;br /&gt;
        b2 = [0] * len(y)&lt;br /&gt;
        for i in range(len(x)):&lt;br /&gt;
            b1[c1[x[i]] - 1] = x[i]&lt;br /&gt;
            c1[x[i]] -= 1&lt;br /&gt;
        for i in range(len(y)):&lt;br /&gt;
            b2[c2[y[i]] - 1] = y[i]&lt;br /&gt;
            c2[y[i]] -= 1&lt;br /&gt;
        n = 0&lt;br /&gt;
        m = 0&lt;br /&gt;
        for k in range(len(xa)):&lt;br /&gt;
            i = GetPos(b1, xa[k])&lt;br /&gt;
            j = GetPos(b2, ya[k])&lt;br /&gt;
            n = max(n, i)&lt;br /&gt;
            m = max(m, j)&lt;br /&gt;
            A[i][j] = True&lt;br /&gt;
        if n &amp;lt; M:&lt;br /&gt;
            n += 1&lt;br /&gt;
        if m &amp;lt; M:&lt;br /&gt;
            m += 1&lt;br /&gt;
        WriteMatr(A, n, m)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1674_-_Livada1&amp;diff=9721</id>
		<title>1674 - Livada1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1674_-_Livada1&amp;diff=9721"/>
		<updated>2024-03-26T16:24:31Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Fermierul Quinto are o livadă plină cu pomi fructiferi. Livada are &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; rânduri, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pe fiecare rând  aflându-se câte &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; pomi fructiferi, numerotaţi de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;. Livada lui Quinto este una specială, aşa că pentru unii pomi se cunoaşte cantitatea de fructe (exprimată în kg) care poate fi culeasă, iar pentru alţii aceasta poate fi determinată pe baza unei formule. Qui...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fermierul Quinto are o livadă plină cu pomi fructiferi. Livada are &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; rânduri, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pe fiecare rând  aflându-se câte &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; pomi fructiferi, numerotaţi de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;. Livada lui Quinto este una specială, aşa că pentru unii pomi se cunoaşte cantitatea de fructe (exprimată în kg) care poate fi culeasă, iar pentru alţii aceasta poate fi determinată pe baza unei formule. Quinto şi-a propus să recolteze &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; kg de fructe din pomii aflaţi în livada lui. Acesta foloseşte un utilaj modern pentru culesul fructelor. Utilajul poate fi folosit pe oricare din rândurile livezii, dar poate aduna doar fructele dintr-un şir consecutiv de pomi, începând cu primul pom de pe rândul respectiv, neavând posibilitatea de a culege parţial fructele dintr-un pom. Preocupat de  frumuseţea livezii sale, Quinto s-a gândit la restricţii suplimentare pentru recoltarea cantităţii &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; de fructe. Astfel, el doreşte să adune fructele din pomi de pe maximum &amp;lt;code&amp;gt;R&amp;lt;/code&amp;gt; rânduri diferite, pentru ca &amp;lt;code&amp;gt;N-R&amp;lt;/code&amp;gt; rânduri să rămână complete. De asemenea, el doreşte să culeagă cu prioritate pomii care au o cantitate cât mai mică de fructe, pentru ca în livadă să rămână cei mai roditori pomi. Quinto şi-a dat seama că este dificil să culeagă fix &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; kg de fructe, prin urmare este mulţumit şi cu o cantitate mai mare, care respectă celelalte condiţii impuse de el.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Determinaţi cea mai mică valoare &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; posibilă astfel încât să se poată culege, în condițiile de mai sus, o cantitate de cel puțin &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; kg de fructe și orice pom din care se culeg fructe să conțină cel mult &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; kg de fructe.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
&lt;br /&gt;
* Pe prima linie a fişierului &amp;lt;code&amp;gt;livada1.in&amp;lt;/code&amp;gt; se află &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;N M C R&amp;lt;/code&amp;gt; cu semnificaţia din enunţ.&lt;br /&gt;
* Pe a doua linie din fişierul de intrare se află &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;x y z w u&amp;lt;/code&amp;gt;, separate printr-un spaţiu.&lt;br /&gt;
* Dacă notăm cu &amp;lt;code&amp;gt;A[i][j]&amp;lt;/code&amp;gt; cantitatea de fructe (exprimată în kg) din cel de-al &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt;-lea pom de pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, atunci:&lt;br /&gt;
** Linia a treia din fişierul de intrare conţine &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; valori &amp;lt;code&amp;gt;A[1][i]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1≤i≤M&amp;lt;/code&amp;gt;, separate printr-un spaţiu&lt;br /&gt;
** Linia a patra din fişierul de intrare conţine &amp;lt;code&amp;gt;N-1&amp;lt;/code&amp;gt; valori &amp;lt;code&amp;gt;A[i][1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2≤i≤N&amp;lt;/code&amp;gt;, separate printr-un spaţiu&lt;br /&gt;
** Celelalte valori &amp;lt;code&amp;gt;A[i][j]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2≤i≤N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2≤j≤M&amp;lt;/code&amp;gt;, se calculează conform formulei: &amp;lt;code&amp;gt;A[i][j] = (x*A[i-1][j] + y*A[i][j-1] + z*A[i-1][j-1] + w) % u&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;livada1.out&amp;lt;/code&amp;gt; va conține o singură valoare scrisă pe prima linie, care reprezintă cea mai mică valoare a cantităţii de fructe (exprimată în kg) dintr-un pom cules, astfel încât să fie respectate toate restricţiile problemei.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ R ≤ N ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ M ≤ 25000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ x,y,z,w,u ≤ 10^9&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ A[i][j] ≤ 10^9&amp;lt;/code&amp;gt;&lt;br /&gt;
* Atenție la determinarea fiecărei valori &amp;lt;code&amp;gt;A[i][j]&amp;lt;/code&amp;gt; pentru că în formulă sunt produse care pot să furnizeze valori mai mari decât &amp;lt;code&amp;gt;2^32-1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ C ≤ 10^18&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează că pentru toate testele problema are soluție&lt;br /&gt;
* Pentru 30% din teste se garantează faptul că &amp;lt;code&amp;gt;1 ≤ M ≤ 100&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;1 ≤ A[i][j] ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru 70% din teste se garantează faptul că &amp;lt;code&amp;gt;1 ≤ M ≤ 4000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;livada1.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 6 18 4&lt;br /&gt;
 3 6 5 2 7&lt;br /&gt;
 4 1 3 5 1 2&lt;br /&gt;
 5 2 6 3&lt;br /&gt;
&amp;lt;code&amp;gt;livada1.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
NMax = 100&lt;br /&gt;
MMax = 25000&lt;br /&gt;
A = np.zeros((NMax+5, MMax+5), dtype=int)&lt;br /&gt;
Max = np.zeros((NMax+5, MMax+5), dtype=int)&lt;br /&gt;
Sum = np.zeros((NMax+5, MMax+5), dtype=int)&lt;br /&gt;
N = 0&lt;br /&gt;
M = 0&lt;br /&gt;
R = 0&lt;br /&gt;
Sol = 0&lt;br /&gt;
C = 0&lt;br /&gt;
&lt;br /&gt;
def Read():&lt;br /&gt;
    global N, M, C, R&lt;br /&gt;
    global A&lt;br /&gt;
    x = 0&lt;br /&gt;
    y = 0&lt;br /&gt;
    z = 0&lt;br /&gt;
    w = 0&lt;br /&gt;
    u = 0&lt;br /&gt;
    with open(&amp;quot;livada1.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        lines = fin.readlines()&lt;br /&gt;
        N, M, C, R = map(int, lines[0].split())&lt;br /&gt;
        x, y, z, w, u = map(int, lines[1].split())&lt;br /&gt;
        A[1, :] = list(map(int, lines[2].split()))&lt;br /&gt;
        for i in range(2, N+1):&lt;br /&gt;
            A[i, 1] = int(lines[i+1])&lt;br /&gt;
            for j in range(2, M+1):&lt;br /&gt;
                A[i, j] = (x * A[i - 1, j] + y * A[i, j - 1] + z * A[i - 1, j - 1] + w) % u&lt;br /&gt;
&lt;br /&gt;
def Precalculate():&lt;br /&gt;
    global N, M&lt;br /&gt;
    global A, Max, Sum&lt;br /&gt;
    for i in range(1, N+1):&lt;br /&gt;
        for j in range(1, M+1):&lt;br /&gt;
            Sum[i, j] = A[i, j] + Sum[i, j-1]&lt;br /&gt;
            Max[i, j] = max(Max[i, j-1], A[i, j])&lt;br /&gt;
&lt;br /&gt;
def Find(i, Value):&lt;br /&gt;
    global M&lt;br /&gt;
    global A, Sum, Max&lt;br /&gt;
    Crop = 0&lt;br /&gt;
    Left = 1&lt;br /&gt;
    Right = M&lt;br /&gt;
    while Left &amp;lt;= Right:&lt;br /&gt;
        Mid = (Left+Right) // 2&lt;br /&gt;
        if Max[i, Mid] &amp;lt;= Value:&lt;br /&gt;
            Crop = Sum[i, Mid]&lt;br /&gt;
            Left = Mid + 1&lt;br /&gt;
        else:&lt;br /&gt;
            Right = Mid - 1&lt;br /&gt;
    return Crop&lt;br /&gt;
&lt;br /&gt;
def Check(Value):&lt;br /&gt;
    global N, R, C&lt;br /&gt;
    V = np.zeros(NMax, dtype=int)&lt;br /&gt;
    k = 0&lt;br /&gt;
    for i in range(1, N+1):&lt;br /&gt;
        V[k] = Find(i, Value)&lt;br /&gt;
        k += 1&lt;br /&gt;
    V = np.sort(V[:k])[::-1]&lt;br /&gt;
    Total = 0&lt;br /&gt;
    for i in range(1, R+1):&lt;br /&gt;
        if i &amp;lt;= k:&lt;br /&gt;
            Total += V[i-1]&lt;br /&gt;
    return Total &amp;gt;= C&lt;br /&gt;
&lt;br /&gt;
def Solve():&lt;br /&gt;
    global Sol&lt;br /&gt;
    Left = 1&lt;br /&gt;
    Right = 1000000000&lt;br /&gt;
    while Left &amp;lt;= Right:&lt;br /&gt;
        Mid = (Left + Right) // 2&lt;br /&gt;
        if Check(Mid):&lt;br /&gt;
            Sol = Mid&lt;br /&gt;
            Right = Mid - 1&lt;br /&gt;
        else:&lt;br /&gt;
            Left = Mid + 1&lt;br /&gt;
&lt;br /&gt;
def Print():&lt;br /&gt;
    global Sol&lt;br /&gt;
    with open(&amp;quot;livada1.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(Sol) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&amp;quot;:&lt;br /&gt;
Read()&lt;br /&gt;
Precalculate()&lt;br /&gt;
Solve()&lt;br /&gt;
Print()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2977_-_Poarta_1&amp;diff=9720</id>
		<title>2977 - Poarta 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2977_-_Poarta_1&amp;diff=9720"/>
		<updated>2024-03-26T16:19:34Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  Sindbad a descoperit un recipient care conține o poțiune magică și o inscripție care descrie cum se poate deschide poarta unui templu. Urmând instrucțiunile din inscripție, Sindbad a ajuns la un tunel acoperit cu dale pătrate, aliniate astfel încât formează linii și coloane. Tunelul are mai multe linii, iar pe fiecare linie sunt câte &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; dale. Dalele din tunel sunt numerotate începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, astfel încât, parcurgându-le linie cu lini...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Sindbad a descoperit un recipient care conține o poțiune magică și o inscripție care descrie cum se poate deschide poarta unui templu. Urmând instrucțiunile din inscripție, Sindbad a ajuns la un tunel acoperit cu dale pătrate, aliniate astfel încât formează linii și coloane. Tunelul are mai multe linii, iar pe fiecare linie sunt câte &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; dale. Dalele din tunel sunt numerotate începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, astfel încât, parcurgându-le linie cu linie și fiecare linie de la stânga la dreapta, se obține un șir strict crescător de numere naturale consecutive. Sindbad se află la intrare, înaintea primei linii. Pentru a deschide poarta templului, el trebuie să ajungă pe dala numerotată cu &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;, călcând pe un număr minim de dale. Dacă există mai multe astfel de soluții, o va alege pe cea pentru care consumul total de picături de poțiune magică este minim. Pe parcursul deplasării el trebuie să respecte următoarele reguli:&lt;br /&gt;
&lt;br /&gt;
* de la intrare, poate sări pe orice dală aflată pe prima line, fără a consuma poțiune magică;&lt;br /&gt;
* de pe o dală numerotată cu &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, Sindbad poate sări fie pe dala numerotată cu &amp;lt;code&amp;gt;X + 1&amp;lt;/code&amp;gt;, consumând o picătură de poțiune magică, fie pe dala numerotată cu &amp;lt;code&amp;gt;2 * X&amp;lt;/code&amp;gt;, consumând două picături de poțiune magică.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieți un program care citește valorile &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; cu semnificația din enunț și rezolvă următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
1. afișează numărul minim de dale pe care trebuie să calce pentru a deschide poarta;&lt;br /&gt;
&lt;br /&gt;
2. afișează numărul natural &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, reprezentând numărul minim de picături de poțiune magică necesare pentru deschiderea porții.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;poarta.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; reprezentând cerința din problemă care trebuie rezolvată (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;). Pe a doua linie se află numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a treia linie se află numărul natural &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; cu semnificația din enunț.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;poarta.out&amp;lt;/code&amp;gt; va conține o singură linie pe care va fi scris un număr natural reprezentând răspunsul la cerința &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ N &amp;lt; 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este număr natural nenul cu cel mult &amp;lt;code&amp;gt;1000&amp;lt;/code&amp;gt; de cifre; pentru o parte dintre teste, valorând în total 60 de puncte, &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; are cel mult &amp;lt;code&amp;gt;18&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
* Recipientul conține o cantitate suficientă de poțiune magică.&lt;br /&gt;
* Pentru rezolvarea &#039;&#039;&#039;cerinței 1&#039;&#039;&#039; se acordă maximum &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; de puncte, iar pentru rezolvarea &#039;&#039;&#039;cerinței 2&#039;&#039;&#039; se acordă maximum &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte.&lt;br /&gt;
* În concurs s-au acordat &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte din oficiu. Aici se acordă pentru exemplele din enunț.&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Tunelul are &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; dale pe fiecare linie. Sindbad trebuie să ajungă pe dala numerotată cu &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;. Numărul minim de dale pe care trebuie să calce pentru a ajunge pe dala &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; pentru a deschide poarta este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. De pe margine poate sări:&lt;br /&gt;
&lt;br /&gt;
– pe dala numerotată cu &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; (consumă &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; picături de poțiune magică);&lt;br /&gt;
&lt;br /&gt;
– de pe dala numerotată cu &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; pe cea numerotată cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; (consumă &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; picături de poțiune magică);&lt;br /&gt;
&lt;br /&gt;
– de pe dala numerotată cu &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; pe cea numerotată cu &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; (consumă &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; picătură de poțiune magică).&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    i = 0&lt;br /&gt;
    k = 1&lt;br /&gt;
    ck = 0&lt;br /&gt;
    nv = 0&lt;br /&gt;
    j = 0&lt;br /&gt;
    v = [0] * 1001&lt;br /&gt;
    nk = 0&lt;br /&gt;
    gata = False&lt;br /&gt;
    cer = 0&lt;br /&gt;
    pas = 0&lt;br /&gt;
    n = 0&lt;br /&gt;
    ok = 0&lt;br /&gt;
    T = 0&lt;br /&gt;
    c = &#039;&#039;&lt;br /&gt;
    f = open(&amp;quot;poarta.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    g = open(&amp;quot;poarta.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    cer, n = map(int, f.readline().split())&lt;br /&gt;
    nv = 0&lt;br /&gt;
    ok = 0&lt;br /&gt;
    while True:&lt;br /&gt;
        c = f.read(1)&lt;br /&gt;
        if not c:&lt;br /&gt;
            break&lt;br /&gt;
        if c &amp;gt;= &#039;0&#039; and c &amp;lt;= &#039;9&#039;:&lt;br /&gt;
            nv += 1&lt;br /&gt;
            v[nv] = int(c)&lt;br /&gt;
    f.close()&lt;br /&gt;
    ck = n&lt;br /&gt;
    while ck:&lt;br /&gt;
        nk += 1&lt;br /&gt;
        ck = ck // 10&lt;br /&gt;
    while not gata:&lt;br /&gt;
        j = 0&lt;br /&gt;
        k += 1&lt;br /&gt;
        if v[nv] % 2 == 0:&lt;br /&gt;
            T += 2&lt;br /&gt;
            pas = 2&lt;br /&gt;
            for i in range(1, nv + 1):&lt;br /&gt;
                j = j * 10 + v[i]&lt;br /&gt;
                v[i] = j // 2&lt;br /&gt;
                j = j % 2&lt;br /&gt;
        else:&lt;br /&gt;
            T += 1&lt;br /&gt;
            pas = 1&lt;br /&gt;
            v[nv] -= 1&lt;br /&gt;
        if v[1] == 0:&lt;br /&gt;
            i = 1&lt;br /&gt;
            j = 1&lt;br /&gt;
            while v[i] == 0:&lt;br /&gt;
                i += 1&lt;br /&gt;
            nv = nv - i + 1&lt;br /&gt;
            while j &amp;lt;= nv:&lt;br /&gt;
                v[j] = v[i]&lt;br /&gt;
                j += 1&lt;br /&gt;
                i += 1&lt;br /&gt;
        if nv &amp;lt;= nk:&lt;br /&gt;
            ck = 0&lt;br /&gt;
            for i in range(1, nv + 1):&lt;br /&gt;
                ck = ck * 10 + v[i]&lt;br /&gt;
            if ck &amp;lt;= n:&lt;br /&gt;
                gata = True&lt;br /&gt;
    if pas == 2 and ck * 2 == n + 1:&lt;br /&gt;
        ck = n&lt;br /&gt;
        T = T - 1&lt;br /&gt;
    if cer == 1:&lt;br /&gt;
        g.write(str(k) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        g.write(str(T) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    g.close()&lt;br /&gt;
    return 0&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2383_-_Plaja1&amp;diff=9661</id>
		<title>2383 - Plaja1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2383_-_Plaja1&amp;diff=9661"/>
		<updated>2024-02-18T17:17:31Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Primăria orașului Constanța reamenajează plaja din stațiunea Mamaia. Aceasta este reprezentată ca o zonă dreptunghiulară cu lățimea de &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; unități și lungimea de &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; unități. Pe plajă sunt trasate linii paralele cu laturile dreptunghiului astfel încât să formeze pătrate cu latura de o unitate, numite zone. Pe plajă se vor pune obiecte: umbrele și prosoape. Se consideră că dacă un obiect intră în interiorul unei zone, o ocupă...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Primăria orașului Constanța reamenajează plaja din stațiunea Mamaia. Aceasta este reprezentată ca o zonă dreptunghiulară cu lățimea de &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt; unități și lungimea de &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; unități. Pe plajă sunt trasate linii paralele cu laturile dreptunghiului astfel încât să formeze pătrate cu latura de o unitate, numite zone. Pe plajă se vor pune obiecte: umbrele și prosoape. Se consideră că dacă un obiect intră în interiorul unei zone, o ocupă în întregime. Se poziționează &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt; umbrele de soare. Într-o zonă se poate așeza cel mult o umbrelă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turişti vin şi îşi aşează prosoapele pe plajă. Un prosop are formă dreptunghiulară şi va fi aşezat paralel cu laturile dreptunghiului. Turiştii îşi pot aşeza prosoapele pe zone libere sau peste prosoape deja aşezate. Un turist nu îşi poate aşeza însă prosopul pe plajă dacă suprafaţa acoperită de acesta include cel puţin o zonă în care se află o umbrelă.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; localnici au suprafeţe favorite pentru aşezarea prosoapelor. O suprafaţă favorită are forma unui dreptunghi cu laturile paralele cu laturile dreptunghiului care marchează plaja. După ce turiştii termină aşezarea prosoapelor, localnicii  verifică dacă zonele din suprafaţa favorită sunt libere (neacoperite de prosoape aşezate de turişti sau de umbrele).&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care să determine numărul de turişti care au reuşit să îşi aşeze prosoapele pe plajă, precum și numărul de localnici ale căror zone favorite sunt libere.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;plaja1.in&amp;lt;/code&amp;gt; conține pe prima linie trei numere naturale, separate prin câte un spațiu, &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt;, având semnificația din enunț. Fiecare din următoarele &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt; linii conține o pereche de numere naturale &amp;lt;code&amp;gt;x y&amp;lt;/code&amp;gt;, reprezentând o zonă în care se găsește o umbrelă. Următoarea linie din fișier conține un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de turiști. Următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii descriu prosoapele turiștilor. Fiecare linie conține patru numere naturale &amp;lt;code&amp;gt;x1 y1 x2 y2&amp;lt;/code&amp;gt;, ce reprezintă colțurile unui prosop. Linia următoare conține o singură valoare, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, reprezentând numărul de localnici. Pe următoarele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; linii se află câte patru numere, separate prin câte un spațiu, &amp;lt;code&amp;gt;x1’ y1’ x2’ y2’&amp;lt;/code&amp;gt;, ce reprezintă colțurile unei suprafețe favorite.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;plaja1.out&amp;lt;/code&amp;gt; conţine pe prima linie două numere naturale separate printr-un spaţiu. Primul număr reprezintă numărul de turişti care şi-au aşezat prosoapele pe plajă, iar cel de-al doilea număr reprezintă numărul de localnici ale căror zone favorite sunt libere.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* Colţul din stânga sus al zonei dreptunghiulare are coordonatele &amp;lt;code&amp;gt;(1,1)&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ a, b ≤ 2.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ u ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ m, n ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Un prosop descris de &amp;lt;code&amp;gt;(x1, y1, x2, y2)&amp;lt;/code&amp;gt; va avea &amp;lt;code&amp;gt;1 ≤ x1 ≤ x2 ≤ a&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;1 ≤ y1 ≤ y2 ≤ b&amp;lt;/code&amp;gt;&lt;br /&gt;
* O suprafaţă favorită descrisă de &amp;lt;code&amp;gt;(x1’, y1’, x2’, y2’)&amp;lt;/code&amp;gt; va avea &amp;lt;code&amp;gt;1 ≤ x1’ ≤ x2’ ≤ a&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;1 ≤ y1’ ≤ y2’ ≤ b&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;plaja1.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 12 13 1&lt;br /&gt;
 6 11&lt;br /&gt;
 4&lt;br /&gt;
 3 4 7 7&lt;br /&gt;
 5 6 8 8&lt;br /&gt;
 9 2 10 3&lt;br /&gt;
 5 10 8 12&lt;br /&gt;
 3&lt;br /&gt;
 1 8 3 13&lt;br /&gt;
 10 3 12 4&lt;br /&gt;
 2 10 5 12&lt;br /&gt;
&amp;lt;code&amp;gt;plaja1.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 3 2&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
NMax = 2004&lt;br /&gt;
&lt;br /&gt;
M, N, A, B, U = 0, 0, 0, 0, 0&lt;br /&gt;
X = [0] * 128&lt;br /&gt;
Y = [0] * 128&lt;br /&gt;
S = [[0 for _ in range(NMax)] for _ in range(NMax)]&lt;br /&gt;
Res = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global M, N, A, B, U, X, Y, S, Res&lt;br /&gt;
&lt;br /&gt;
    i, j, x1, y1, x2, y2 = 0, 0, 0, 0, 0, 0&lt;br /&gt;
    ok = False&lt;br /&gt;
&lt;br /&gt;
    sys.stdin = open(&#039;plaja1.intxt&#039;, &#039;r&#039;)&lt;br /&gt;
    sys.stdout = open(&#039;plaja1.outtxt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
    A, B, U = map(int, input().split())&lt;br /&gt;
    for i in range(1, U + 1):&lt;br /&gt;
        X[i], Y[i] = map(int, input().split())&lt;br /&gt;
    N = int(input())&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        x1, y1, x2, y2 = map(int, input().split())&lt;br /&gt;
        &lt;br /&gt;
        for j in range(1, U + 1):&lt;br /&gt;
            if x1 &amp;lt;= X[j] &amp;lt;= x2 and y1 &amp;lt;= Y[j] &amp;lt;= y2:&lt;br /&gt;
                ok = False&lt;br /&gt;
                break&lt;br /&gt;
            ok = True&lt;br /&gt;
&lt;br /&gt;
        if not ok:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        Res += 1&lt;br /&gt;
        S[x1][y1] += 1&lt;br /&gt;
        S[x2 + 1][y2 + 1] += 1&lt;br /&gt;
        S[x1][y2 + 1] -= 1&lt;br /&gt;
        S[x2 + 1][y1] -= 1&lt;br /&gt;
&lt;br /&gt;
    print(Res)&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, A + 1):&lt;br /&gt;
        for j in range(1, B + 1):&lt;br /&gt;
            S[i][j] += S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1]&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, U + 1):&lt;br /&gt;
        S[X[i]][Y[i]] = 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, A + 1):&lt;br /&gt;
        for j in range(1, B + 1):&lt;br /&gt;
            S[i][j] = S[i - 1][j] + S[i][j - 1] - S[i - 1][j - 1] + (S[i][j] != 0)&lt;br /&gt;
&lt;br /&gt;
    Res = 0&lt;br /&gt;
    M = int(input())&lt;br /&gt;
    for _ in range(M):&lt;br /&gt;
        x1, y1, x2, y2 = map(int, input().split())&lt;br /&gt;
        if S[x2][y2] - S[x2][y1 - 1] - S[x1 - 1][y2] + S[x1 - 1][y1 - 1] == 0:&lt;br /&gt;
            Res += 1&lt;br /&gt;
&lt;br /&gt;
    print(Res)&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1584_-_Spirala2&amp;diff=9660</id>
		<title>1584 - Spirala2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1584_-_Spirala2&amp;diff=9660"/>
		<updated>2024-02-18T17:12:55Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  = Cerința = Se consideră un tablou bidimensional format din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane, completat cu elemente de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Completarea acestuia se face pornind din colțul din stânga sus la cel din dreapta sus, de la cel din dreapta sus la cel din dreapta jos ș.a. (exemplu mai jos).  Scrieți un program care citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și determină:  # Suma resturilor împărțirii la &amp;lt;code&amp;gt;10000...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Se consideră un tablou bidimensional format din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii și &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane, completat cu elemente de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;. Completarea acestuia se face pornind din colțul din stânga sus la cel din dreapta sus, de la cel din dreapta sus la cel din dreapta jos ș.a. (exemplu mai jos).&lt;br /&gt;
&lt;br /&gt;
Scrieți un program care citește un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și determină:&lt;br /&gt;
&lt;br /&gt;
# Suma resturilor împărțirii la &amp;lt;code&amp;gt;100003&amp;lt;/code&amp;gt; a elementelor de pe linia &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; și de pe coloana &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;; elementul care se află la intersecția acestora nu se va adăuga în sumă.&lt;br /&gt;
# Matricea formată prin inversarea coloanei &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; cu linia &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;spirala2.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;. Pentru toate testele de intrare, numărul &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; poate avea doar valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. A doua linie a fișierul conține două numere naturale &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; cu semnificațiile din enunț.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
&lt;br /&gt;
* Dacă valoarea lui &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, se va rezolva numai punctul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; din cerință. În acest caz, în fişierul de ieşire &amp;lt;code&amp;gt;spirala2.out&amp;lt;/code&amp;gt; se va scrie un singur număr natural, reprezentând suma elementelor.&lt;br /&gt;
* Dacă valoarea lui &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, se va rezolva numai punctul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; din cerință. În acest caz, în fişierul de ieşire &amp;lt;code&amp;gt;spirala2.out&amp;lt;/code&amp;gt; se va scrie noua matrice cu proprietatea din cerință.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 500&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ k ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru rezolvarea corectă a primei cerinţe se acordă &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte, iar pentru cerința a doua se acordă &amp;lt;code&amp;gt;70&amp;lt;/code&amp;gt; de puncte.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;spirala2.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 3 2&lt;br /&gt;
&amp;lt;code&amp;gt;spirala2.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 20&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
sys.stdin = open(&#039;spirala2.intxt&#039;, &#039;r&#039;)&lt;br /&gt;
sys.stdout = open(&#039;spirala2.outtxt&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
n, k, i, j, p, nr, v = 501, 501, 0, 0, 0, 0, [[0]*501 for _ in range(501)]&lt;br /&gt;
s, w, a, b, x, y = 0, [[0]*501 for _ in range(501)], 0, 0, 0, 0&lt;br /&gt;
&lt;br /&gt;
p, n, k = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
for a in range(1, n+1):&lt;br /&gt;
    x = a&lt;br /&gt;
    y = n - a + 1&lt;br /&gt;
    for i in range(x, y+1):&lt;br /&gt;
        nr += 1&lt;br /&gt;
        v[x][i] = nr&lt;br /&gt;
    for i in range(x+1, y+1):&lt;br /&gt;
        nr += 1&lt;br /&gt;
        v[i][y] = nr&lt;br /&gt;
    for i in range(y-1, x-1, -1):&lt;br /&gt;
        nr += 1&lt;br /&gt;
        v[y][i] = nr&lt;br /&gt;
    for i in range(y-1, x, -1):&lt;br /&gt;
        nr += 1&lt;br /&gt;
        v[i][x] = nr&lt;br /&gt;
&lt;br /&gt;
if p == 1:&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        if i != k:&lt;br /&gt;
            s += v[i][k] % 100003 + v[k][i] % 100003&lt;br /&gt;
    print(s)&lt;br /&gt;
else:&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        w[i][k] = v[k][i]&lt;br /&gt;
        w[k][i] = v[i][k]&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        for j in range(1, n+1):&lt;br /&gt;
            if not w[i][j]:&lt;br /&gt;
                print(v[i][j], end=&#039; &#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(w[i][j], end=&#039; &#039;)&lt;br /&gt;
        print()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2564_-_Macara&amp;diff=9659</id>
		<title>2564 - Macara</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2564_-_Macara&amp;diff=9659"/>
		<updated>2024-02-18T17:10:19Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: O macara industrială automatizată execută operații de mutare a unor containere aflate într-un depozit de materiale. Acest depozit poate fi reprezentat ca o matrice dreptunghiulară cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii şi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane, fiecare element al matricei reprezentând un container. Mai exact, elementul situat pe linia &amp;lt;code&amp;gt;i(1 ≤ i ≤ m)&amp;lt;/code&amp;gt; şi coloana &amp;lt;code&amp;gt;j (1 ≤ j ≤ n)&amp;lt;/code&amp;gt; din matrice reprezintă numărul de dale de granit aflate în containerul si...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O macara industrială automatizată execută operații de mutare a unor containere aflate într-un depozit de materiale. Acest depozit poate fi reprezentat ca o matrice dreptunghiulară cu &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii şi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; coloane, fiecare element al matricei reprezentând un container. Mai exact, elementul situat pe linia &amp;lt;code&amp;gt;i(1 ≤ i ≤ m)&amp;lt;/code&amp;gt; şi coloana &amp;lt;code&amp;gt;j (1 ≤ j ≤ n)&amp;lt;/code&amp;gt; din matrice reprezintă numărul de dale de granit aflate în containerul situat în depozit pe poziția corespunzătoare. Toate dalele aflate în acelaşi container au aceeaşi culoare. În containerele cu dale negre, numărul de dale conținute este prim, în timp ce în containerele cu dale albe, numărul de dale conținute nu este prim. Primul container cu dale negre situat pe fiecare linie a matricei (dacă un astfel de container există) are un senzor special. Dalele din containere trebuie să fie transportate de către macara spre un terminal. Macaraua poate executa cel mult &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; comenzi. La o comandă, macaraua va colecta toate dalele aflate în containerele situate într-o zonă dreptunghiulară din depozit. Mai exact, o comandă are forma &amp;lt;code&amp;gt;i1 j1 i2 j2&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;(i1, j1)&amp;lt;/code&amp;gt; reprezintă coordonatele containerului aflat în colțul din stânga-sus (linia, respectiv coloana), iar &amp;lt;code&amp;gt;(i2, j2)&amp;lt;/code&amp;gt; coordonatele containerului aflat în colțul din dreapta-jos ale zonei dreptunghiulare. Macaraua ar trebui să care la un terminal toate dalele conținute în containere situate în pozițiile &amp;lt;code&amp;gt;(i, j)&amp;lt;/code&amp;gt; pentru care &amp;lt;code&amp;gt;i1 ≤ i ≤ i2&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;j1 ≤ j ≤ j2&amp;lt;/code&amp;gt;. Însă, macaraua are un defect de funcționare. Pentru fiecare comandă, atunci când ajunge la un container cu dale negre, dacă acest container nu are senzor special nu va transporta la terminal dalele conținute de acesta. După executarea unei comenzi, un robot va umple din nou containerele golite cu acelaşi număr de dale pe care le avea inițial, aceste dale având exact aceeaşi culoare cu cea inițială.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Calculați și afișați:&lt;br /&gt;
&lt;br /&gt;
a) &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; – Suma dalelor negre din containerele cu senzor special de pe fiecare linie.&lt;br /&gt;
&lt;br /&gt;
b) &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; – numărul maxim de dale pe care le poate transporta macaraua la terminal din cele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; comenzi diferite.&lt;br /&gt;
&lt;br /&gt;
c) Comanda optimă de forma: &amp;lt;code&amp;gt;i1 j1 i2 j2&amp;lt;/code&amp;gt; din cele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, pentru care macaraua transportă un număr maxim de dale &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; aduse la terminal. Dacă sunt mai multe comenzi optime afișați-le pe fiecare în ordinea apariției lor, urmate de numărul de ordine al comenzii din cele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; comenzi date.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Din fișierul de intrare &amp;lt;code&amp;gt;macara.in&amp;lt;/code&amp;gt; se citesc pe prima linie &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; reprezentând dimensiunile matricei. Se citesc apoi elementele matricei ce reprezintă numărul de dale din fiecare container. Citim apoi pe o linie separată numărul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; iar pe următoarele &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; linii câte o comandă cu cele patru poziții : &amp;lt;code&amp;gt;i1 j1 i2 j2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
a) Pe prima linie a fișierului &amp;lt;code&amp;gt;macara.out&amp;lt;/code&amp;gt; se afișează numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; conform cerinței a).&lt;br /&gt;
&lt;br /&gt;
b) Pe a doua linie numărul &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; conform cerinței b).&lt;br /&gt;
&lt;br /&gt;
c) Pe următoarea linie/linii, comanda/comenzile optime de forma: &amp;lt;code&amp;gt;i1 j1 i2 j2&amp;lt;/code&amp;gt; urmate de numărul de ordine conform cerinței c).&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ i1 ≤ i2 ≤ m, 1 ≤ j1 ≤ j2 ≤ n, 1 ≤ m ≤ 1000, 1 ≤ n ≤ 1000, 1 ≤ k ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* numărul de dale aflate într-un container &amp;lt;code&amp;gt;≤ 5000&amp;lt;/code&amp;gt;&lt;br /&gt;
* comenzile nu sunt unice, orice comandă se poate repeta&lt;br /&gt;
* se asigură &amp;lt;code&amp;gt;20%&amp;lt;/code&amp;gt; din punctaj pentru rezolvarea corectă a cerinței a)&lt;br /&gt;
* pentru &amp;lt;code&amp;gt;30%&amp;lt;/code&amp;gt; din teste &amp;lt;code&amp;gt;1 ≤ n ≤ 250, 1 ≤ m ≤ 250, 1 ≤ k ≤ 250&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;macara.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 6&lt;br /&gt;
 6 2 5 7 12 13&lt;br /&gt;
 3 9 15 11 4 3&lt;br /&gt;
 18 7 9 3 31 9&lt;br /&gt;
 15 5 5 13 4 6&lt;br /&gt;
 8 6 11 10 23 7&lt;br /&gt;
 5&lt;br /&gt;
 1 2 4 4&lt;br /&gt;
 2 1 3 5&lt;br /&gt;
 2 2 4 5&lt;br /&gt;
 2 1 3 5 &lt;br /&gt;
 1 3 5 5&lt;br /&gt;
&amp;lt;code&amp;gt;macara.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 28&lt;br /&gt;
 65&lt;br /&gt;
 2 1 3 5 2&lt;br /&gt;
 2 1 3 5 4&lt;br /&gt;
 1 3 5 5 5&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
a) Calculăm de pe fiecare linie suma dalelor din primul container cu dale negre astfel: &amp;lt;code&amp;gt;2+3+7+5+11=28&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) Maximul obținut din suma dalelor care ajung la terminal este &amp;lt;code&amp;gt;65&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c) Acest maxim este obținut din trei comenzi : primele două sunt identice pe pozițiile &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;2 1 3 5 2&amp;lt;/code&amp;gt;  și  &amp;lt;code&amp;gt;2 1 3 5 4&amp;lt;/code&amp;gt; cu suma &amp;lt;code&amp;gt;3 + 9 + 15 + 4 + 18 + 7 + 9 = 65&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;1 3 5 5 5&amp;lt;/code&amp;gt; – cu suma &amp;lt;code&amp;gt;12 + 15 + 4 + 9 + 4 + 11 + 10 = 65&amp;lt;/code&amp;gt; și este comanda de pe poziția &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; din &amp;lt;code&amp;gt;k = 5&amp;lt;/code&amp;gt; comenzi inițiale date.    &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Numerele subliniate reprezintă dale negre care aparțin containerelor care nu pot ajunge la terminal&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
NMax = 5005&lt;br /&gt;
Nk = 1001&lt;br /&gt;
a = np.zeros((Nk, Nk))&lt;br /&gt;
ti1 = np.zeros(Nk)&lt;br /&gt;
ti2 = np.zeros(Nk)&lt;br /&gt;
tj1 = np.zeros(Nk)&lt;br /&gt;
tj2 = np.zeros(Nk)&lt;br /&gt;
Poz = np.zeros(Nk)&lt;br /&gt;
i1 = 0&lt;br /&gt;
i2 = 0&lt;br /&gt;
j1 = 0&lt;br /&gt;
j2 = 0&lt;br /&gt;
n = 0&lt;br /&gt;
t = 0&lt;br /&gt;
m = 0&lt;br /&gt;
k = 0&lt;br /&gt;
nr = 0&lt;br /&gt;
sp = 0&lt;br /&gt;
b = np.zeros((Nk, Nk))&lt;br /&gt;
w = np.zeros(NMax)&lt;br /&gt;
ok = False&lt;br /&gt;
&lt;br /&gt;
def sieve_of_eratosthenes():&lt;br /&gt;
    for i in range(2, NMax):&lt;br /&gt;
        if w[i] == 0:&lt;br /&gt;
            for j in range(i*i, NMax, i):&lt;br /&gt;
                w[j] = 1&lt;br /&gt;
    w[1] = 1&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;macara.in&amp;quot;, &amp;quot;r&amp;quot;) as f, open(&amp;quot;macara.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
        m, n = map(int, f.readline().split())&lt;br /&gt;
        sieve_of_eratosthenes()&lt;br /&gt;
        &lt;br /&gt;
        for i in range(1, m+1):&lt;br /&gt;
            s = 0&lt;br /&gt;
            ok = True&lt;br /&gt;
            for j in range(1, n+1):&lt;br /&gt;
                a[i][j] = int(f.readline())&lt;br /&gt;
                if ok and w[a[i][j]] == 0:&lt;br /&gt;
                    ok = False&lt;br /&gt;
                    sp += a[i][j]&lt;br /&gt;
                    s += a[i][j]&lt;br /&gt;
                    b[i][j] = s&lt;br /&gt;
                if w[a[i][j]] == 1:&lt;br /&gt;
                    s += a[i][j]&lt;br /&gt;
                    b[i][j] = s&lt;br /&gt;
                else:&lt;br /&gt;
                    b[i][j] = s&lt;br /&gt;
        &lt;br /&gt;
        k = int(f.readline())&lt;br /&gt;
        &lt;br /&gt;
        maxx = 0&lt;br /&gt;
        for t in range(1, k+1):&lt;br /&gt;
            i1, j1, i2, j2 = map(int, f.readline().split())&lt;br /&gt;
            s = 0&lt;br /&gt;
            for i in range(i1, i2+1):&lt;br /&gt;
                s += b[i][j2] - b[i][j1-1]&lt;br /&gt;
            if s &amp;gt; maxx:&lt;br /&gt;
                maxx = s&lt;br /&gt;
                nr = 1&lt;br /&gt;
                ti1[nr] = i1&lt;br /&gt;
                tj1[nr] = j1&lt;br /&gt;
                ti2[nr] = i2&lt;br /&gt;
                tj2[nr] = j2&lt;br /&gt;
                Poz[nr] = t&lt;br /&gt;
            elif s == maxx:&lt;br /&gt;
                nr += 1&lt;br /&gt;
                ti1[nr] = i1&lt;br /&gt;
                tj1[nr] = j1&lt;br /&gt;
                ti2[nr] = i2&lt;br /&gt;
                tj2[nr] = j2&lt;br /&gt;
                Poz[nr] = t&lt;br /&gt;
        &lt;br /&gt;
        g.write(str(sp) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        g.write(str(maxx) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        for i in range(1, nr+1):&lt;br /&gt;
            g.write(f&amp;quot;{ti1[i]} {tj1[i]} {ti2[i]} {tj2[i]} {Poz[i]}\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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3434_-_Furnica_1&amp;diff=9658</id>
		<title>3434 - Furnica 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3434_-_Furnica_1&amp;diff=9658"/>
		<updated>2024-02-18T17:06:52Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Cercetătorii au descoperit că activitatea miriapodelor este stimulată de culoarea galben și de aceea o furnică este supusă unui experiment. Pe marginea mesei pe care se realizează experimentul s-au lipit una lângă alta, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; foi dreptunghiulare, de culoare galbenă, numerotate în ordine, de la stânga la dreapta, de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Furnica se află pe masă, în fața primei foi și urmează un traseu deplasându-se doar pe laturile li...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Cercetătorii au descoperit că activitatea miriapodelor este stimulată de culoarea galben și de aceea o furnică este supusă unui experiment. Pe marginea mesei pe care se realizează experimentul s-au lipit una lângă alta, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; foi dreptunghiulare, de culoare galbenă, numerotate în ordine, de la stânga la dreapta, de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Furnica se află pe masă, în fața primei foi și urmează un traseu deplasându-se doar pe laturile libere ale foilor (care nu sunt lipite de alte foi sau de masă), pe verticală sau orizontală, (așa cum indică săgețile din imaginea de mai jos), ajungând din nou pe masă. Știind că în urcare furnica parcurge un centimetru în &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; secunde, în coborâre parcurge un centimetru în &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; secunde, iar dacă se deplasează pe orizontală parcurge un centimetru în &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; secunde, ajutați-i pe cercetători să obțină unele date.&lt;br /&gt;
&lt;br /&gt;
= Cerințe =&lt;br /&gt;
Scrieţi un program care să rezolve următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
# determină timpul (exprimat în secunde) necesar furnicii pentru a parcurge tot traseul menționat;&lt;br /&gt;
# determină lungimea maximă (exprimată în centimetri) a unei porțiuni de traseu în care furnica NU coboară deloc;&lt;br /&gt;
# determină ce număr de ordine are foaia pe care se află furnica după &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; secunde.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;furnica.in&amp;lt;/code&amp;gt; conţine:&lt;br /&gt;
&lt;br /&gt;
* pe prima linie un număr natural &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; care reprezintă numărul cerinţei şi poate avea valorile &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
* pe cea de-a doua linie un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; ce reprezintă numărul foilor galbene dacă cerința este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, respectiv două numere naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, dacă cerința este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
* pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii, câte două numere naturale, ce reprezintă laturile foilor (exprimate în centimetri), în ordinea numerotării acestora. Primul număr reprezintă dimensiunea laturii orizontale, iar cel de-al doilea număr reprezintă dimensiunea laturii verticale a foii galbene.&lt;br /&gt;
* numerele aflate pe aceeași linie a fișierului sunt 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 &amp;lt;code&amp;gt;furnica.out&amp;lt;/code&amp;gt; va conține o singură linie pe care va fi scris un număr natural ce reprezintă rezultatul determinat pentru cerința &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N,T ≤ 10 000&amp;lt;/code&amp;gt;; laturile foilor sunt numere naturale nenule cu cel mult nouă cifre fiecare;&lt;br /&gt;
* dacă furnica ajunge într-un punct aflat la îmbinarea a două foi, se consideră că se află pe foaia din stânga;&lt;br /&gt;
* pentru orice &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; furnica se va afla pe una din foi;&lt;br /&gt;
* în concurs, pentru fiecare cerință s-au acordat 30 de puncte. Pe site se acordă 10 puncte pentru exemple.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;furnica.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 5&lt;br /&gt;
 3 9&lt;br /&gt;
 5 9&lt;br /&gt;
 2 6&lt;br /&gt;
 2 13&lt;br /&gt;
 1 4&lt;br /&gt;
&amp;lt;code&amp;gt;furnica.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 151&lt;br /&gt;
&lt;br /&gt;
= Explicații =&lt;br /&gt;
În primul exemplu, cerința este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Sunt 5 foi galbene iar traseul parcurs de furnică este pe modelul din imaginea de mai sus. Traseul are o lungime de &amp;lt;code&amp;gt;45&amp;lt;/code&amp;gt; de centimetri și furnica îl va termina în &amp;lt;code&amp;gt;151&amp;lt;/code&amp;gt; de secunde.&lt;br /&gt;
&lt;br /&gt;
În al doilea exemplu cerința este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. Cea mai lungă porțiune de traseu, în care furnica nu coboară are &amp;lt;code&amp;gt;9+3+5=17&amp;lt;/code&amp;gt; cm.&lt;br /&gt;
&lt;br /&gt;
În al treilea exemplu cerința este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. După &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt; de secunde furnica se va afla pe foaia &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
f = open(&amp;quot;furnica.intxt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
g = open(&amp;quot;furnica.outtxt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
dist_coborare = 0&lt;br /&gt;
dist_urcare = 0&lt;br /&gt;
dist_oriz = 0&lt;br /&gt;
lungime = 0&lt;br /&gt;
maxi = 0&lt;br /&gt;
TIMP = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global dist_coborare, dist_urcare, dist_oriz, lungime, maxi, TIMP&lt;br /&gt;
    H = 0&lt;br /&gt;
    L = 0&lt;br /&gt;
    H1 = 0&lt;br /&gt;
    L1 = 0&lt;br /&gt;
    n = 0&lt;br /&gt;
    i = 0&lt;br /&gt;
    cerinta = 0&lt;br /&gt;
    t_oriz = 3&lt;br /&gt;
    t_urcare = 5&lt;br /&gt;
    t_coborare = 2&lt;br /&gt;
    cladire = 0&lt;br /&gt;
&lt;br /&gt;
    cerinta, n = map(int, f.readline().split())&lt;br /&gt;
    if cerinta == 3:&lt;br /&gt;
        TIMP = int(f.readline())&lt;br /&gt;
    L1, H1 = map(int, f.readline().split())&lt;br /&gt;
    H = H1&lt;br /&gt;
    dist_urcare = H1&lt;br /&gt;
    dist_oriz = L1&lt;br /&gt;
    dist_coborare = 0&lt;br /&gt;
    lungime = H1 + L1&lt;br /&gt;
    maxi = lungime&lt;br /&gt;
    i = 1&lt;br /&gt;
    TIMP = TIMP - (dist_urcare * t_urcare + dist_oriz * t_oriz)&lt;br /&gt;
    if TIMP &amp;lt;= 0:&lt;br /&gt;
        cladire = 1&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        L, H = map(int, f.readline().split())&lt;br /&gt;
        dist_oriz += L&lt;br /&gt;
        if H &amp;gt;= H1:  # URCARE&lt;br /&gt;
            lungime = lungime + H - H1 + L&lt;br /&gt;
            dist_urcare = dist_urcare + H - H1&lt;br /&gt;
            if TIMP &amp;gt; 0:&lt;br /&gt;
                TIMP = TIMP - (H - H1) * t_urcare&lt;br /&gt;
                if TIMP &amp;lt;= 0:&lt;br /&gt;
                    cladire = i&lt;br /&gt;
        else:  # COBORARE&lt;br /&gt;
            dist_coborare = dist_coborare + H1 - H&lt;br /&gt;
            lungime = L&lt;br /&gt;
            if TIMP &amp;gt; 0:&lt;br /&gt;
                TIMP = TIMP - (H1 - H) * t_coborare&lt;br /&gt;
                if TIMP &amp;lt;= 0:&lt;br /&gt;
                    cladire = i - 1&lt;br /&gt;
        if TIMP &amp;gt; 0:&lt;br /&gt;
            TIMP = TIMP - L * t_oriz&lt;br /&gt;
            if TIMP &amp;lt;= 0:&lt;br /&gt;
                cladire = i&lt;br /&gt;
        if lungime &amp;gt; maxi:&lt;br /&gt;
            maxi = lungime&lt;br /&gt;
        H1 = H&lt;br /&gt;
        L1 = L&lt;br /&gt;
    if TIMP &amp;gt; 0:&lt;br /&gt;
        if TIMP - H * t_coborare &amp;lt;= 0:&lt;br /&gt;
            cladire = n&lt;br /&gt;
        else:&lt;br /&gt;
            cladire = -1&lt;br /&gt;
&lt;br /&gt;
    if cerinta == 1:&lt;br /&gt;
        g.write(str(dist_oriz * t_oriz + dist_urcare * t_urcare + (dist_coborare + H) * t_coborare) + &#039;\n&#039;)&lt;br /&gt;
    elif cerinta == 2:&lt;br /&gt;
        g.write(str(maxi) + &#039;\n&#039;)&lt;br /&gt;
    elif cerinta == 3:&lt;br /&gt;
        g.write(str(cladire) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    f.close()&lt;br /&gt;
    g.close()&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1967_-_CMMDC_0&amp;diff=9657</id>
		<title>1967 - CMMDC 0</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1967_-_CMMDC_0&amp;diff=9657"/>
		<updated>2024-02-17T17:49:05Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  = Cerința = Andreea a primit de ziua ei un joc cu cifre de plastic, din fiecare cifră nenulă având &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de exemplare. Cifrele se aflau într-un săculeţ, iar Andreea s-a gândit să scoată la întâmplare un număr oarecare de cifre din săculeţ, să efectueze produsul lor, şi dacă obţinea un număr mai mic decât &amp;lt;code&amp;gt;1.000.000.001&amp;lt;/code&amp;gt; pe care nu-l mai obţinu-se până atunci, îl scria pe un cartonaş,  punând apoi cifrele înapoi în săculeţ....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Andreea a primit de ziua ei un joc cu cifre de plastic, din fiecare cifră nenulă având &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de exemplare. Cifrele se aflau într-un săculeţ, iar Andreea s-a gândit să scoată la întâmplare un număr oarecare de cifre din săculeţ, să efectueze produsul lor, şi dacă obţinea un număr mai mic decât &amp;lt;code&amp;gt;1.000.000.001&amp;lt;/code&amp;gt; pe care nu-l mai obţinu-se până atunci, îl scria pe un cartonaş,  punând apoi cifrele înapoi în săculeţ. Astfel, după o muncă asiduă, a scris toate numerele posibile pe cartonaşe.    Prietena ei, Ana, făcându-i o vizită, a văzut cartonaşele, a luat la întâmplare unul dintre ele şi a calculat cel mai mare divizor comun al numărului de pe cartonaşul luat cu fiecare număr de pe cartonaşele rămase, scriind pe fiecare dintre cartonaşele rămase rezultatul obţinut. Dacă se cunosc numerele aflate pe &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cartonaşe dintre cele scrise de Andreea şi Ana, aflaţi  numărul de pe cartonaşul luat de Ana.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;cmmdc0.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; de cartonaşe care se dau, iar pe fiecare din următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii câte o pereche de numere naturale &amp;lt;code&amp;gt;x,d&amp;lt;/code&amp;gt; reprezentând numărul scris de Andreea pe cartonaş, respectiv cel mai mare divizor comun calculat de Ana.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;cmmdc0.out&amp;lt;/code&amp;gt; va conţine numărul de pe cartonaşul luat de Ana. Dacă există mai multe numere care verifică datele de intrare, se va afişa cel mai mic dintre ele.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤  N ≤ 5.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ d ≤ x ≤ 1.000.000.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Valorile lui &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; de pe cartonaşe sunt distincte&lt;br /&gt;
* Pentru orice test există soluţie&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;cmmdc0.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
 8 2&lt;br /&gt;
 45 3&lt;br /&gt;
 14 2&lt;br /&gt;
&amp;lt;code&amp;gt;cmmdc0.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Numărul de pe cartonaşul luat de Ana este &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;. El verifică relaţiile &amp;lt;code&amp;gt;c.m.m.d.c.(8,6)=2&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;c.m.m.d.c.(45,6)=3&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;c.m.m.d.c.(14,6)=2&amp;lt;/code&amp;gt;, şi este singurul dintre numerele scrise de Andreea pe cartonaşe care verifică relaţiile cerute.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
n = 0&lt;br /&gt;
i = 0&lt;br /&gt;
ok = 0&lt;br /&gt;
m = 0&lt;br /&gt;
i2 = 0&lt;br /&gt;
i3 = 0&lt;br /&gt;
i5 = 0&lt;br /&gt;
i7 = 0&lt;br /&gt;
x = 0&lt;br /&gt;
y = 0&lt;br /&gt;
r = 0&lt;br /&gt;
minim = 0&lt;br /&gt;
a = [0]*6000&lt;br /&gt;
b = [0]*6000&lt;br /&gt;
d = [0]*6000&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;cmmdc0.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        line = f.readline().split()&lt;br /&gt;
        a[i] = int(line[0])&lt;br /&gt;
        d[i] = int(line[1])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
ok = 1&lt;br /&gt;
b[1] = 1&lt;br /&gt;
m = 1&lt;br /&gt;
i2 = 1&lt;br /&gt;
i3 = 1&lt;br /&gt;
i5 = 1&lt;br /&gt;
i7 = 1&lt;br /&gt;
&lt;br /&gt;
while ok:&lt;br /&gt;
    ok = 0&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        x = a[i]&lt;br /&gt;
        y = b[m]&lt;br /&gt;
        r = x % y&lt;br /&gt;
        while r != 0:&lt;br /&gt;
            x = y&lt;br /&gt;
            y = r&lt;br /&gt;
            r = x % y&lt;br /&gt;
        if y != d[i]:&lt;br /&gt;
            ok = 1&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    if ok:&lt;br /&gt;
        minim = b[i2] * 2&lt;br /&gt;
        if b[i3] * 3 &amp;lt; minim:&lt;br /&gt;
            minim = b[i3] * 3&lt;br /&gt;
        if b[i5] * 5 &amp;lt; minim:&lt;br /&gt;
            minim = b[i5] * 5&lt;br /&gt;
        if b[i7] * 7 &amp;lt; minim:&lt;br /&gt;
            minim = b[i7] * 7&lt;br /&gt;
        m += 1&lt;br /&gt;
        b[m] = minim&lt;br /&gt;
        if b[i2] * 2 == minim:&lt;br /&gt;
            i2 += 1&lt;br /&gt;
        if b[i3] * 3 == minim:&lt;br /&gt;
            i3 += 1&lt;br /&gt;
        if b[i5] * 5 == minim:&lt;br /&gt;
            i5 += 1&lt;br /&gt;
        if b[i7] * 7 == minim:&lt;br /&gt;
            i7 += 1&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;cmmdc0.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    g.write(str(b[m]))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1823_-_P_Prim&amp;diff=9656</id>
		<title>1823 - P Prim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1823_-_P_Prim&amp;diff=9656"/>
		<updated>2024-02-17T17:45:52Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  = Cerința = Un număr natural nenul se numeste &amp;lt;code&amp;gt;“p-prim”&amp;lt;/code&amp;gt; dacă el se descompune în &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; moduri ca produs de doi factori primi între ei. De exemplu, numărul &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;-prim deoarece &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; se decompune în &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; moduri ca produs de doi factori primi între ei &amp;lt;code&amp;gt;60=1*60=4*15=5*12=20*3&amp;lt;/code&amp;gt;, iar numărul &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;-prim. Pentru un interval închis &amp;lt;code&amp;gt;[a,b]&amp;lt;/code&amp;gt; să se det...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Un număr natural nenul se numeste &amp;lt;code&amp;gt;“p-prim”&amp;lt;/code&amp;gt; dacă el se descompune în &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; moduri ca produs de doi factori primi între ei. De exemplu, numărul &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;-prim deoarece &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; se decompune în &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; moduri ca produs de doi factori primi între ei &amp;lt;code&amp;gt;60=1*60=4*15=5*12=20*3&amp;lt;/code&amp;gt;, iar numărul &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;-prim. Pentru un interval închis &amp;lt;code&amp;gt;[a,b]&amp;lt;/code&amp;gt; să se determine câte numere &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;-prime aparţin intervalului. De exemplu intervalul &amp;lt;code&amp;gt;[7, 20]&amp;lt;/code&amp;gt; conţine numerele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-prime: &amp;lt;code&amp;gt;10,12, 14,18,20&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Din fişierul de intrare &amp;lt;code&amp;gt;pprim.in&amp;lt;/code&amp;gt; se citesc de pe prima linie două numere naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; şi de pe urmatoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii câte două numere ce reprezintă capetele unui interval.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fişierul de ieşire &amp;lt;code&amp;gt;pprim.out&amp;lt;/code&amp;gt; se va scrie pe prima linie intervalul cu cele mai multe numere &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;-prime. Extremitatile intervalului se vor afisa in ordine crecatoare. Dacă există mai multe intervale cu același număr se va afișa ultimul interval citit. Dacă &amp;lt;code&amp;gt;NU&amp;lt;/code&amp;gt; există niciun interval se va afișa mesajul &amp;lt;code&amp;gt;nu exista&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 ≤ N ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ P ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ a[i],b[i] ≤ 33000&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;b[i]&amp;lt;/code&amp;gt; sunt capetele intervalelor, &amp;lt;code&amp;gt;i=1,2,..N&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;pprim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 2&lt;br /&gt;
 20 7&lt;br /&gt;
 5 10&lt;br /&gt;
 35 39&lt;br /&gt;
 3 4&lt;br /&gt;
&amp;lt;code&amp;gt;pprim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 7 20&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&lt;br /&gt;
* Intervalul &amp;lt;code&amp;gt;[7, 20]&amp;lt;/code&amp;gt; conţine numerele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-prime: &amp;lt;code&amp;gt;10,12,14,15,18,20&amp;lt;/code&amp;gt;;&lt;br /&gt;
* intervalul &amp;lt;code&amp;gt;[5, 10]&amp;lt;/code&amp;gt; conţine numerele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-prim &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; si &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;;&lt;br /&gt;
* intervalul &amp;lt;code&amp;gt;[35, 39]&amp;lt;/code&amp;gt; conţine numere &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-prime &amp;lt;code&amp;gt;35, 36, 38, 39&amp;lt;/code&amp;gt;;&lt;br /&gt;
* intervalul &amp;lt;code&amp;gt;[3, 4]&amp;lt;/code&amp;gt; nu conţine niciun număr &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-prim.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
a = 0&lt;br /&gt;
v = 0&lt;br /&gt;
i = 0&lt;br /&gt;
n = 0&lt;br /&gt;
p = 0&lt;br /&gt;
b = 0&lt;br /&gt;
a1 = 0&lt;br /&gt;
b1 = 0&lt;br /&gt;
x = 0&lt;br /&gt;
y = 0&lt;br /&gt;
nr = 0&lt;br /&gt;
j = 0&lt;br /&gt;
k = 0&lt;br /&gt;
l = 0&lt;br /&gt;
r = 0&lt;br /&gt;
nr1 = 0&lt;br /&gt;
aux = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    max_val = 0&lt;br /&gt;
    with open(&amp;quot;pprim.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        with open(&amp;quot;pprim.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            n, p = map(int, f.readline().split())&lt;br /&gt;
            max_val = 0&lt;br /&gt;
            for i in range(1, n+1):&lt;br /&gt;
                a, b = map(int, f.readline().split())&lt;br /&gt;
                if a &amp;gt; b:&lt;br /&gt;
                    aux = a&lt;br /&gt;
                    a = b&lt;br /&gt;
                    b = aux&lt;br /&gt;
                nr1 = 0&lt;br /&gt;
                for j in range(a, b+1):&lt;br /&gt;
                    nr = 0&lt;br /&gt;
                    for k in range(1, j//2):&lt;br /&gt;
                        if j % k == 0:&lt;br /&gt;
                            x = k&lt;br /&gt;
                            y = j // k&lt;br /&gt;
                            if x &amp;lt; y:&lt;br /&gt;
                                while y:&lt;br /&gt;
                                    r = x % y&lt;br /&gt;
                                    x = y&lt;br /&gt;
                                    y = r&lt;br /&gt;
                                if x == 1:&lt;br /&gt;
                                    nr += 1&lt;br /&gt;
                    if nr == p:&lt;br /&gt;
                        nr1 += 1&lt;br /&gt;
                if nr1 &amp;gt;= max_val:&lt;br /&gt;
                    max_val = nr1&lt;br /&gt;
                    a1 = a&lt;br /&gt;
                    b1 = b&lt;br /&gt;
            if max_val == 0:&lt;br /&gt;
                g.write(&amp;quot;nu exista&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                g.write(str(a1) + &amp;quot; &amp;quot; + str(b1))&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1483_-_Coronite&amp;diff=9655</id>
		<title>1483 - Coronite</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1483_-_Coronite&amp;diff=9655"/>
		<updated>2024-02-17T17:43:29Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: În vederea premierii la un concurs de informatică &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; candidați sunt rugați să se așeze pe un cerc. Elevii sunt identificați în ordine prin numerele de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Comisia pleacă din dreptul primului elev, face &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; pași pe cerc și pune coronița elevului respectiv. Mai departe, comisia merge în continuare pe cerc &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; pași și pune o a doua coroniță elevului curent. Daca elevul cur...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;În vederea premierii la un concurs de informatică &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; candidați sunt rugați să se așeze pe un cerc. Elevii sunt identificați în ordine prin numerele de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Comisia pleacă din dreptul primului elev, face &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; pași pe cerc și pune coronița elevului respectiv. Mai departe, comisia merge în continuare pe cerc &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; pași și pune o a doua coroniță elevului curent. Daca elevul curent are deja o coroniță atunci se numără și acea poziție și trece mai departe. După &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; astfel de acțiuni premierea se încheie. Premierea se consideră a fi validă dacă toți candidații au primit câte o coroniță.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Aflați dacă premierea a fost validă și de asemenea, aflați a câta coroniță a fost pusă elevului cu numărul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;coronite.in&amp;lt;/code&amp;gt; conține :&lt;br /&gt;
&lt;br /&gt;
* Pe prima linie numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; de elevi.&lt;br /&gt;
* Pe a doua linie, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, … , &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; numere naturale nenule, reprezentând, în ordine, numărul de pași pe cerc pe care îl efectuează comisia pentru premierea următorului elev.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;coronite.out&amp;lt;/code&amp;gt; va conține:&lt;br /&gt;
&lt;br /&gt;
* Pe prima linie se va scrie numărul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; dacă premierea a fost validă sau &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; în caz contrar -Pe a doua linie o valoare &amp;lt;code&amp;gt;NR&amp;lt;/code&amp;gt; reprezentând a câta coroniță i-a fost acordată elevului cu numărul de concurs &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Dacă elevul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; nu a fost premiat valoarea lui &amp;lt;code&amp;gt;NR&amp;lt;/code&amp;gt; va fi &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ x&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 2*N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Dacă primul copil primește mai multe coronițe, se va afișa numărul de ordine al primei coronițe primite de el.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;coronite.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 3 1 9 4 1 2&lt;br /&gt;
&amp;lt;code&amp;gt;coronite.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se pun coronite, in ordine, elevilor: &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Toți elevii au coronițe. Elevului &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; i se pune a &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;-a coroniță.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;coronite.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 1 3 4 1&lt;br /&gt;
&amp;lt;code&amp;gt;coronite.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 0&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se pun coronițe elevilor: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Elevul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; primește a &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-a coroniță.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
with open(&amp;quot;coronite.in&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;coronite.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    x = [0] * 101&lt;br /&gt;
    sel = [0] * 101&lt;br /&gt;
    n = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(fin.readline())&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        x[i] = int(fin.readline())&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        for j in range(1, x[i]+1):&lt;br /&gt;
            poz += 1&lt;br /&gt;
            if poz &amp;gt; n:&lt;br /&gt;
                poz = 1&lt;br /&gt;
        if poz == 1 and sel[1] == 0:&lt;br /&gt;
            nr = i&lt;br /&gt;
        sel[poz] = 1&lt;br /&gt;
&lt;br /&gt;
    ok = 1&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        if sel[i] == 0:&lt;br /&gt;
            ok = 0&lt;br /&gt;
&lt;br /&gt;
    if ok:&lt;br /&gt;
        fout.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        fout.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
    fout.write(str(nr) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1784_-_Flori_3&amp;diff=9654</id>
		<title>1784 - Flori 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1784_-_Flori_3&amp;diff=9654"/>
		<updated>2024-02-17T17:38:26Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  = Cerința = După o amorţeală care durase mai bine de 3 luni, Mama Natură îşi dădu seama că primăvara stătea să vină şi florile cu care trebuia curând să umple câmpiile nu erau încă pregătite. Înainte de începerea iernii, a lucrat să combine nuanţe din care să creeze flori pline de culoare, iar acum are camera plină de discuri de diferite culori, care aşteaptă să fie asamblate în flori viu colorate, fie pe post de mijloc, fie ca şi petale.   Pen...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
După o amorţeală care durase mai bine de 3 luni, Mama Natură îşi dădu seama că primăvara stătea să vină şi florile cu care trebuia curând să umple câmpiile nu erau încă pregătite. Înainte de începerea iernii, a lucrat să combine nuanţe din care să creeze flori pline de culoare, iar acum are camera plină de discuri de diferite culori, care aşteaptă să fie asamblate în flori viu colorate, fie pe post de mijloc, fie ca şi petale. &lt;br /&gt;
&lt;br /&gt;
Pentru a forma o floare, Mama Natură alege un mijloc de orice culoare şi cel puţin &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; petale. Totodată, ea nu îşi doreşte să strice ordinea firească a lucrurilor şi de aceea nu va folosi niciodată două culori diferite de petale pentru aceeaşi floare. Ea admite, în schimb, flori cu petalele și mijlocul de aceeași culoare.&lt;br /&gt;
&lt;br /&gt;
Deoarece timpul e scurt şi Mama Natură are lucruri mai importante de făcut decât să stea să asambleze flori, ea îşi cheamă în ajutor toate prietenele şi doreşte să îi dea fiecăreia ceva de lucru. Pentru aceasta, ea are la dispoziţie un şir &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere, unde numărul de pe poziţia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; din șir reprezintă câte discuri de culoarea &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; a pregătit. Apoi, Mama Natură îşi pune &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; întrebări de forma &amp;lt;code&amp;gt;x y&amp;lt;/code&amp;gt;, prin care doreşte să afle care este numărul maxim de flori care se pot forma folosind doar discuri de culori din intervalul &amp;lt;code&amp;gt;[x, y]&amp;lt;/code&amp;gt; din şirul &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;flori3.in&amp;lt;/code&amp;gt; conține pe prima linie două numere naturale, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, separate prin spaţiu, cu semnificaţia din enunţ. Pe următoarea linie se vor afla &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale (elementele șirului &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;). Următoarea linie a fişierului va conţine numărul &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; şi va fi urmată de &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; linii conţinând perechi de numere întregi &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;, cu semnificaţia din enunţ. &lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;flori3.out&amp;lt;/code&amp;gt; va conține, pe rânduri separate, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; numere naturale, reprezentând răspunsul la fiecare dintre cele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; întrebări.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 10&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ D[i] ≤ 10&amp;lt;sup&amp;gt;9&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Ɐ i = 1,..,N&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ M ≤ 10&amp;lt;sup&amp;gt;5&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ x ≤ y ≤ N&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;flori3.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 4 &lt;br /&gt;
 4 2 1 10 &lt;br /&gt;
 2 &lt;br /&gt;
 1 3 &lt;br /&gt;
 1 4 &lt;br /&gt;
&amp;lt;code&amp;gt;flori3.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 &lt;br /&gt;
 3 &lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Pentru prima întrebare, Mama Natură poate alege o singură floare, cu petale de culoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și mijloc de culoarea &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
Pentru a doua întrebare, putem forma 3 flori: &lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;3 4 4 4 4&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;2 4 4 4 4 4 4&amp;lt;/code&amp;gt; &lt;br /&gt;
* &amp;lt;code&amp;gt;2 1 1 1 1&amp;lt;/code&amp;gt; &lt;br /&gt;
&lt;br /&gt;
O alternativă: pentru a doua floare folosim mai puţine petale, rămânând in final două flori nefolosite de culoare &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;. &lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
nmax = 1000006&lt;br /&gt;
SP = np.zeros(nmax, dtype=np.int64)&lt;br /&gt;
CP = np.zeros(nmax, dtype=np.int64)&lt;br /&gt;
sol = 0&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;flori3.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n, k = map(int, f.readline().split())&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        x = int(f.readline())&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= 1000000000&lt;br /&gt;
        SP[i] = SP[i - 1] + x // k&lt;br /&gt;
        CP[i] = CP[i - 1] + x % k&lt;br /&gt;
    m = int(f.readline())&lt;br /&gt;
    assert 1 &amp;lt;= n &amp;lt;= 100000&lt;br /&gt;
    assert 1 &amp;lt;= m &amp;lt;= 100000&lt;br /&gt;
    assert 1 &amp;lt;= k &amp;lt;= 1000&lt;br /&gt;
    for _ in range(m):&lt;br /&gt;
        x, y = map(int, f.readline().split())&lt;br /&gt;
        S = SP[y]&lt;br /&gt;
        C = CP[y]&lt;br /&gt;
        if x - 1 &amp;gt;= 0:&lt;br /&gt;
            S -= SP[x - 1]&lt;br /&gt;
            C -= CP[x - 1]&lt;br /&gt;
        if S &amp;lt;= C:&lt;br /&gt;
            sol = S&lt;br /&gt;
        else:&lt;br /&gt;
            x = (S - C) // (k + 1)&lt;br /&gt;
            sol = min(S - x, C + k * x)&lt;br /&gt;
            x += 1&lt;br /&gt;
            sol = max(sol, min(S - x, C + k * x))&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;flori3.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    g.write(f&amp;quot;{sol}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
   main()&lt;br /&gt;
   &lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1755_-_Democratie&amp;diff=9653</id>
		<title>1755 - Democratie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1755_-_Democratie&amp;diff=9653"/>
		<updated>2024-02-17T17:34:28Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Arpsod are în curtea sa &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci foarte bătrâni, așezați în linie și numerotați de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Fiecare copac are o înălțime cunoscută, &amp;lt;code&amp;gt;H&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Există riscul ca la un vânt mai puternic aceștia să cadă, provocând stricăciuni.  Astfel Arpsod a angajat doi muncitori pentru a-i tăia copacii. Primul muncitor va începe să taie copacii în ordinea &amp;lt;code&amp;gt;1, 2, 3, ... ,N&amp;lt;/code&amp;gt; iar cel de-al doilea în ordi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Arpsod are în curtea sa &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci foarte bătrâni, așezați în linie și numerotați de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Fiecare copac are o înălțime cunoscută, &amp;lt;code&amp;gt;H&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Există riscul ca la un vânt mai puternic aceștia să cadă, provocând stricăciuni.&lt;br /&gt;
&lt;br /&gt;
Astfel Arpsod a angajat doi muncitori pentru a-i tăia copacii. Primul muncitor va începe să taie copacii în ordinea &amp;lt;code&amp;gt;1, 2, 3, ... ,N&amp;lt;/code&amp;gt; iar cel de-al doilea în ordinea &amp;lt;code&amp;gt;N, N-1, N-2, ... 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fiind un tărâm democratic, fiecare muncitor dorește să fie plătit pentru fiecare metru pe care îl taie. Muncitorul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; are un tarif de &amp;lt;code&amp;gt;T1&amp;lt;/code&amp;gt; pe metru iar muncitorul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; un tarif de &amp;lt;code&amp;gt;T2&amp;lt;/code&amp;gt; pe metru. Dacă un muncitor a început să taie un copac, acesta îl va tăia integral. Din motive de protecție a muncii, muncitorilor nu le este permis să lucreze simultan. De aici apare următoarea pretenție: dacă după tăierea unui copac, muncitorul nu este înlocuit de colegul său, acesta va cere un cost suplimentar &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; pentru a rămâne să taie în continuare.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă avem &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; copaci: &amp;lt;code&amp;gt;1, 2, 3&amp;lt;/code&amp;gt; și muncitorul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; taie singur toți copacii, acesta va cere un cost suplimentar de &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ori (pentru copacul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și copacul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Arpsod vă cere să determinați costul minim pe care îl poate plăti astfel încât toți cei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci să fie tăiați.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fișierului &amp;lt;code&amp;gt;democratie.in&amp;lt;/code&amp;gt; se va afla numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul de copaci. &lt;br /&gt;
&lt;br /&gt;
Pe cea de-a doua linie vor exista &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule reprezentând înălțimile celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copaci.&lt;br /&gt;
&lt;br /&gt;
Pe cea de-a treia linie se vor afla două numere naturale &amp;lt;code&amp;gt;T1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;T2&amp;lt;/code&amp;gt; reprezentând tariful pe metru al muncitorului &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; respectiv al muncitorului &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pe ultima linie se vor afla două numere naturale &amp;lt;code&amp;gt;C1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;C2&amp;lt;/code&amp;gt; reprezentând costul suplimentar cerut de muncitorul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; respectiv muncitorul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul &amp;lt;code&amp;gt;democratie.out&amp;lt;/code&amp;gt; se va scrie, pe prima și singura linie din fișier, costul minim pe care Arpsod trebuie să-l plătească.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 100.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ T1, T2 ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ C1, C2 ≤ 10.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ H&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează că pentru &amp;lt;code&amp;gt;20%&amp;lt;/code&amp;gt; din teste &amp;lt;code&amp;gt;1 ≤ N ≤ 10&amp;lt;/code&amp;gt;&lt;br /&gt;
* Costul suplimentar este același indiferent de înălțimea copacului ce va fi tăiat.&lt;br /&gt;
* Este posibil ca un muncitor să taie singur toți copacii.&lt;br /&gt;
* Un muncitor va tăia complet un copac.&lt;br /&gt;
* Cam scumpă democrația asta!&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;democratie.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 1 2 3 4&lt;br /&gt;
 7 2&lt;br /&gt;
 3 9&lt;br /&gt;
&amp;lt;code&amp;gt;democratie.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 34&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Ordinea muncitorilor:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;M2 -&amp;gt; M1 -&amp;gt; M2 -&amp;gt; M2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Costul: &amp;lt;code&amp;gt;(2*4) + (7*1) + (2*3) + (2*2 + 9)&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
Nmax = 100002&lt;br /&gt;
inf = 2000000000&lt;br /&gt;
&lt;br /&gt;
N, T1, T2, C1, C2 = 0, 0, 0, 0, 0&lt;br /&gt;
v = [0] * Nmax&lt;br /&gt;
Sol = inf&lt;br /&gt;
config = [0] * Nmax&lt;br /&gt;
&lt;br /&gt;
def bkt(poz):&lt;br /&gt;
    global N, T1, T2, C1, C2, Sol, v, config&lt;br /&gt;
&lt;br /&gt;
    if poz &amp;gt; N:&lt;br /&gt;
        st, dr = 1, N&lt;br /&gt;
        Total = 0&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, N + 1):&lt;br /&gt;
            if config[i] == 1:&lt;br /&gt;
                Total += v[st] * T1&lt;br /&gt;
                st += 1&lt;br /&gt;
&lt;br /&gt;
                if config[i - 1] == config[i]:&lt;br /&gt;
                    Total += C1&lt;br /&gt;
            else:&lt;br /&gt;
                Total += v[dr] * T2&lt;br /&gt;
                dr -= 1&lt;br /&gt;
&lt;br /&gt;
                if config[i - 1] == config[i]:&lt;br /&gt;
                    Total += C2&lt;br /&gt;
&lt;br /&gt;
        Sol = min(Sol, Total)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, 3):&lt;br /&gt;
        config[poz] = i&lt;br /&gt;
        bkt(poz + 1)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global N, T1, T2, C1, C2, Sol, v, config&lt;br /&gt;
&lt;br /&gt;
    lines = sys.stdin.readlines()&lt;br /&gt;
    N = int(lines[0])&lt;br /&gt;
&lt;br /&gt;
    v = list(map(int, lines[1].split()))&lt;br /&gt;
&lt;br /&gt;
    T1, T2, C1, C2 = map(int, lines[2].split())&lt;br /&gt;
&lt;br /&gt;
    bkt(1)&lt;br /&gt;
&lt;br /&gt;
    print(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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1618_-_Cifre_12&amp;diff=9652</id>
		<title>1618 - Cifre 12</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1618_-_Cifre_12&amp;diff=9652"/>
		<updated>2024-02-16T17:05:46Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  Un indicator numeric este un dispozitiv de afişaj electronic destinat afişării unei cifre zecimale.   Acesta conține &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; segmente notate cu &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt;, ca în figura de mai jos.  Afişarea unei cifre se face prin aprinderea unei combinații de segmente conform tabelului: {| class=&amp;quot;wikitable&amp;quot; !Cifră !0 !1 !2 !3 !4 !5 !6 !7 !8 !9 |- |Segmente aprinse |a,b,c,d,e,f...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Un indicator numeric este un dispozitiv de afişaj electronic destinat afişării unei cifre zecimale. &lt;br /&gt;
&lt;br /&gt;
Acesta conține &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; segmente notate cu &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;b&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;c&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;e&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;f&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt;, ca în figura de mai jos.&lt;br /&gt;
&lt;br /&gt;
Afişarea unei cifre se face prin aprinderea unei combinații de segmente conform tabelului:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Cifră&lt;br /&gt;
!0&lt;br /&gt;
!1&lt;br /&gt;
!2&lt;br /&gt;
!3&lt;br /&gt;
!4&lt;br /&gt;
!5&lt;br /&gt;
!6&lt;br /&gt;
!7&lt;br /&gt;
!8&lt;br /&gt;
!9&lt;br /&gt;
|-&lt;br /&gt;
|Segmente aprinse&lt;br /&gt;
|a,b,c,d,e,f&lt;br /&gt;
|b,c&lt;br /&gt;
|a,b,d,e,g&lt;br /&gt;
|a,b,c,d,g&lt;br /&gt;
|b,c,f,g&lt;br /&gt;
|a,c,d,f,g&lt;br /&gt;
|a,c,d,e,f,g&lt;br /&gt;
|a,b,c&lt;br /&gt;
|a,b,c,d,e,f,g&lt;br /&gt;
|a,b,c,d,f,g&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; afișat cu ajutorul mai multor indicatoare numerice, să se scrie un program care determină:&lt;br /&gt;
&lt;br /&gt;
# Numărul de segmente aprinse pentru afișarea numărului &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
# Numărul de numere distincte mai mari decât &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;,ce se pot forma prin aprinderea a cel puțin unui segment în plus, față de cele utilizate pentru afișarea numărului &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, fără a folosi alte indicatoare numerice, și fără a stinge niciun segment dintre cele deja aprinse.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;cifre12.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; a cărui valoare poate fi doar &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, iar pe a doua linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire este &amp;lt;code&amp;gt;cifre12.out&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; atunci fişierul de ieşire va conţine pe prima linie un singur număr natural ce reprezintă numărul de segmente aprinse pentru afișarea numărului &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; atunci fişierul de ieşire va conține pe prima linie un singur număr natural reprezentând numărul de numere distincte mai mari decât &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, ce se pot forma prin aprinderea a cel puțin unui segment în plus, față de cele utilizate pentru afișarea numărului &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, fără a folosi alte indicatoare numerice.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;10 ≤ N ≤ 10&amp;lt;sup&amp;gt;19&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;&lt;br /&gt;
* 20% din teste vor avea valoarea &amp;lt;code&amp;gt;V = 1&amp;lt;/code&amp;gt;, iar 80% din teste vor avea valoarea &amp;lt;code&amp;gt;V = 2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;cifre12.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 &lt;br /&gt;
 823&lt;br /&gt;
&amp;lt;code&amp;gt;cifre12.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 17&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&amp;lt;code&amp;gt;V = 1&amp;lt;/code&amp;gt;, deci se rezolvă NUMAI prima cerință. &amp;lt;code&amp;gt;N = 823&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Pentru afișarea cifrei &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; s-au aprins &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; segmente, pentru cifra &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; s-au aprins &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; segmente și pentru cifra &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; tot &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; segmente. În total s-au aprins &amp;lt;code&amp;gt;17&amp;lt;/code&amp;gt; segmente.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;cifre12.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 823&lt;br /&gt;
&amp;lt;code&amp;gt;cifre12.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&amp;lt;code&amp;gt;V = 2&amp;lt;/code&amp;gt;, deci se rezolvă NUMAI a doua cerință. &amp;lt;code&amp;gt;N = 823&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Din cifra &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; nu se mai pot obține alte cifre prin aprinderea de noi segmente.&lt;br /&gt;
&lt;br /&gt;
Din cifra &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; se poate obține cifra &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; iar din cifra &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; se pot obține cifrele &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; prin aprinderea de noi segmente. Așadar, se pot obține &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; numere mai mari ca &amp;lt;code&amp;gt;823&amp;lt;/code&amp;gt;: &amp;lt;code&amp;gt;828&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;829&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;883&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;888&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;889&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# Technology stack: C++&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = 0&lt;br /&gt;
    N = 0&lt;br /&gt;
    S = 0&lt;br /&gt;
    P = 0&lt;br /&gt;
&lt;br /&gt;
    # cate segmente are fiecare cifra&lt;br /&gt;
    s = [6, 2, 5, 5, 4, 5, 6, 3, 7, 6]&lt;br /&gt;
&lt;br /&gt;
    # cate cifre strict mai mari se pot obtine din cifra curenta prin adaugare&lt;br /&gt;
    a = [1, 5, 1, 2, 2, 3, 1, 2, 0, 0]&lt;br /&gt;
&lt;br /&gt;
    # cate cifre se pot obtine din cifra curenta prin adaugare, inclusiv cifra curenta&lt;br /&gt;
    b = [2, 7, 2, 3, 3, 4, 2, 5, 1, 2]&lt;br /&gt;
&lt;br /&gt;
    c = 0&lt;br /&gt;
    k = 0&lt;br /&gt;
    i = 0&lt;br /&gt;
    j = 0&lt;br /&gt;
    w = [25]&lt;br /&gt;
    aux = 0&lt;br /&gt;
    v = 0&lt;br /&gt;
&lt;br /&gt;
    f = open(&amp;quot;cifre12.in&amp;quot;)&lt;br /&gt;
    g = open(&amp;quot;cifre12.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    v, n = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
    if v == 1:&lt;br /&gt;
        N = n&lt;br /&gt;
        S = 0&lt;br /&gt;
        while N &amp;gt; 0:&lt;br /&gt;
            c = N % 10&lt;br /&gt;
            S += s[c]&lt;br /&gt;
            N //= 10&lt;br /&gt;
        g.write(str(S) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if v == 2:&lt;br /&gt;
        # duc cifrele intr-un vector&lt;br /&gt;
        N = n&lt;br /&gt;
        k = 0&lt;br /&gt;
        while N &amp;gt; 0:&lt;br /&gt;
            w[k] = N % 10&lt;br /&gt;
            k += 1&lt;br /&gt;
            N //= 10&lt;br /&gt;
&lt;br /&gt;
        # reversez vectorul&lt;br /&gt;
        i = 0&lt;br /&gt;
        j = k - 1&lt;br /&gt;
        while i &amp;lt; j:&lt;br /&gt;
            aux = w[i]&lt;br /&gt;
            w[i] = w[j]&lt;br /&gt;
            w[j] = aux&lt;br /&gt;
            i += 1&lt;br /&gt;
            j -= 1&lt;br /&gt;
&lt;br /&gt;
        S = 0&lt;br /&gt;
        i = 0&lt;br /&gt;
        while i &amp;lt; k:&lt;br /&gt;
            if a[w[i]]:&lt;br /&gt;
                P = a[w[i]]&lt;br /&gt;
                j = i + 1&lt;br /&gt;
                while j &amp;lt; k:&lt;br /&gt;
                    P *= b[w[j]]&lt;br /&gt;
                    j += 1&lt;br /&gt;
                S += P&lt;br /&gt;
            i += 1&lt;br /&gt;
        g.write(str(S) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    f.close()&lt;br /&gt;
    g.close()&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1143_-_Dominant&amp;diff=9651</id>
		<title>1143 - Dominant</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1143_-_Dominant&amp;diff=9651"/>
		<updated>2024-02-16T17:03:25Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Considerând un șir de valori binare, numim secvență dominantă un set de elemente aflate pe poziții consecutive în șir care are proprietatea că numărul valorilor egale cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; este strict mai mare decât numărul valorilor de &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. De exemplu, în șirul &amp;lt;code&amp;gt;1,0,0,0,1,1,0,1,1,1,0,0&amp;lt;/code&amp;gt; o secvență dominantă este &amp;lt;code&amp;gt;0,1,1&amp;lt;/code&amp;gt; și o alta, de lungime mai mare, este &amp;lt;code&amp;gt;0,1,1,0,1,1,1&amp;lt;/code&amp;gt;. Secvența dominantă maximală este secvența...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Considerând un șir de valori binare, numim secvență dominantă un set de elemente aflate pe poziții consecutive în șir care are proprietatea că numărul valorilor egale cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; este strict mai mare decât numărul valorilor de &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. De exemplu, în șirul &amp;lt;code&amp;gt;1,0,0,0,1,1,0,1,1,1,0,0&amp;lt;/code&amp;gt; o secvență dominantă este &amp;lt;code&amp;gt;0,1,1&amp;lt;/code&amp;gt; și o alta, de lungime mai mare, este &amp;lt;code&amp;gt;0,1,1,0,1,1,1&amp;lt;/code&amp;gt;. Secvența dominantă maximală este secvența dominantă de lungime maximă. În șirul din exemplu secvența dominantă maximală este &amp;lt;code&amp;gt;1,0,0,0,1,1,0,1,1,1,0&amp;lt;/code&amp;gt; (adică întreg șirul, fără ultimul zero).&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Dat fiind un șir de valori binare, să se determine lungimea unei secvențe dominante maximale precum și numărul acestor secvențe.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;dominant.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt;, iar pe linia a doua șirul de valori binare, fără spații.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;dominant.out&amp;lt;/code&amp;gt; va conține:&lt;br /&gt;
&lt;br /&gt;
* varianta 1: dacă &amp;lt;code&amp;gt;V=1&amp;lt;/code&amp;gt;, atunci pe prima linie a fișierului de ieșire va fi un singur număr natural reprezentând lungimea unei secvențe dominante maximale.&lt;br /&gt;
* varianta 2: dacă &amp;lt;code&amp;gt;V=2&amp;lt;/code&amp;gt;, atunci pe prima linie a fișierului de ieșire va fi un singur număr natural reprezentând numărul secvențelor dominante maximale.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;V&amp;lt;/code&amp;gt; poate fi &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;&lt;br /&gt;
* Lungimea șirului de valori binare este de cel mult &amp;lt;code&amp;gt;300 000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru toate testele șirul binar va conține cel puțin o valoare de &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru 60% din punctaj &amp;lt;code&amp;gt;V = 1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;dominant.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 100011011100&lt;br /&gt;
&amp;lt;code&amp;gt;dominant.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 11&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Secvența dominantă maximală este &amp;lt;code&amp;gt;10001101110&amp;lt;/code&amp;gt; și are lungimea &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;dominant.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 100011011100&lt;br /&gt;
&amp;lt;code&amp;gt;dominant.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Secvența dominantă maximală este &amp;lt;code&amp;gt;10001101110&amp;lt;/code&amp;gt; și are lungimea &amp;lt;code&amp;gt;11&amp;lt;/code&amp;gt;. Este o singură secvență dominantă maximală.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
Nmax = 300005&lt;br /&gt;
inFile = &amp;quot;dominant.intxt&amp;quot;&lt;br /&gt;
outFile = &amp;quot;dominant.outtxt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
s = [&#039;&#039;] * Nmax&lt;br /&gt;
x = [0] * (2*Nmax)&lt;br /&gt;
y = [0] * (2*Nmax)&lt;br /&gt;
st = None&lt;br /&gt;
dr = None&lt;br /&gt;
optiune = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global s, optiune, st, dr&lt;br /&gt;
    i = 0&lt;br /&gt;
    n = 0&lt;br /&gt;
    suma = 0&lt;br /&gt;
    vmin = 0&lt;br /&gt;
    vmax = 0&lt;br /&gt;
    lgMax = 0&lt;br /&gt;
&lt;br /&gt;
    # citire&lt;br /&gt;
    fin = open(inFile, &#039;r&#039;)&lt;br /&gt;
    fout = open(outFile, &#039;w&#039;)&lt;br /&gt;
    optiune = int(fin.readline())&lt;br /&gt;
    s = &#039;*&#039; + fin.readline().strip()&lt;br /&gt;
&lt;br /&gt;
    s[0] = &#039;*&#039;&lt;br /&gt;
    n = len(s[1:])&lt;br /&gt;
&lt;br /&gt;
    suma = 0&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        if s[i] == &#039;1&#039;:&lt;br /&gt;
            suma += 1&lt;br /&gt;
        else:&lt;br /&gt;
            suma -= 1&lt;br /&gt;
    if suma &amp;gt; 0:&lt;br /&gt;
        if optiune == 1:&lt;br /&gt;
            fout.write(str(n) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            fout.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
        fout.close()&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
    st = x[Nmax:]&lt;br /&gt;
    dr = y[Nmax:]&lt;br /&gt;
&lt;br /&gt;
    # initializare st si dr&lt;br /&gt;
    for i in range(-n, n+1):&lt;br /&gt;
        st[i] = 10000000&lt;br /&gt;
        dr[i] = -10000000&lt;br /&gt;
&lt;br /&gt;
    # calcul st si dr&lt;br /&gt;
    # st[i] = cea mai din stanga pozitie unde apare valoarea i&lt;br /&gt;
    # dr[i] = cea mai din dreapta pozitie unde apare valoarea i&lt;br /&gt;
    st[0] = dr[0] = 0&lt;br /&gt;
    suma = 0&lt;br /&gt;
    vmin = 10000000&lt;br /&gt;
    vmax = -10000000&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        if s[i] == &#039;0&#039;:&lt;br /&gt;
            suma -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            suma += 1&lt;br /&gt;
        st[suma] = min(st[suma], i)&lt;br /&gt;
        dr[suma] = max(dr[suma], i)&lt;br /&gt;
        vmin = min(vmin, suma)&lt;br /&gt;
        vmax = max(vmax, suma)&lt;br /&gt;
&lt;br /&gt;
    # lungimea maxima a secventei&lt;br /&gt;
    lgMax = 0&lt;br /&gt;
    for i in range(vmin, vmax):&lt;br /&gt;
        lgMax = max(lgMax, dr[i+1] - st[i])&lt;br /&gt;
&lt;br /&gt;
    # numarul de aparitii ale secventei maximale&lt;br /&gt;
    s0 = 0&lt;br /&gt;
    s1 = 0&lt;br /&gt;
    suma = 0&lt;br /&gt;
    for i in range(1, lgMax+1):&lt;br /&gt;
        if s[i] == &#039;0&#039;:&lt;br /&gt;
            s0 += 1&lt;br /&gt;
        else:&lt;br /&gt;
            s1 += 1&lt;br /&gt;
    if s1 &amp;gt; s0:&lt;br /&gt;
        suma += 1&lt;br /&gt;
    for i in range(lgMax+1, n):&lt;br /&gt;
        if s[i-lgMax] == &#039;0&#039;:&lt;br /&gt;
            s0 -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            s1 -= 1&lt;br /&gt;
        if s[i] == &#039;0&#039;:&lt;br /&gt;
            s0 += 1&lt;br /&gt;
        else:&lt;br /&gt;
            s1 += 1&lt;br /&gt;
        if s1 &amp;gt; s0:&lt;br /&gt;
            suma += 1&lt;br /&gt;
&lt;br /&gt;
    if optiune == 1:&lt;br /&gt;
        fout.write(str(lgMax) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        fout.write(str(suma) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    fout.close()&lt;br /&gt;
    fin.close()&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1057_-_Max_P&amp;diff=9650</id>
		<title>1057 - Max P</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1057_-_Max_P&amp;diff=9650"/>
		<updated>2024-02-16T17:00:42Z</updated>

		<summary type="html">&lt;p&gt;Raul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Considerăm un şir de numere  &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. O secvenţă nevidă în acest şir este de forma &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;i ≤ j&amp;lt;/code&amp;gt;. De exemplu, pentru &amp;lt;code&amp;gt;N=4&amp;lt;/code&amp;gt; şi şirul &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, secvenţele nevide sunt: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Definim puterea unui element &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; ca fiind numărul de secvenţe care-l conţin pe &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; şi în care &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este strict mai mare decât celelalte elemente ale fiecăreia dintre respectivele secvenţe. Astfel în şirul &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt; puterea elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (fiind maxim doar în secvenţa formată din el însuşi), a elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; fiind maxim în secvenţele &amp;lt;code&amp;gt;2 3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;), a elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; (fiind maxim în secvenţele &amp;lt;code&amp;gt;2 3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4 3&amp;lt;/code&amp;gt;), iar a elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerinţe =&lt;br /&gt;
Scrieţi un program care determină puterea cea mai mare a unui element din şirul dat, precum şi numărul de elemente din şir care au cea mai mare putere.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;maxp.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a doua linie, în ordine, numerele naturale &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;maxp.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural ce reprezintă puterea cea mai mare a unui element din şirul dat şi pe a doua linie va conţine un număr natural ce reprezintă numărul de elemente din şir care au cea mai mare putere.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 &amp;lt;= N &amp;lt;= 200.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elementele şirului sunt numere naturale şi au cel mult &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 7&lt;br /&gt;
 9 3 4 5 1 2 2&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 12 &lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Elementul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; de pe poziţia &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; este maxim în &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt; secvenţe: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;3 4 5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 5 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 5 1 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 5 1 2 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 5&amp;lt;/code&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;4 5 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 5 1 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 5 1 2 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5 1 2&amp;lt;/code&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;5 1 2 2&amp;lt;/code&amp;gt;, deci puterea lui este &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;. Este singurul element care are această putere, celelalte elemente având puteri mai mici.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 1 0 7 7 2 6&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 3 &lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Elementele din poziţiile &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; sunt maxime în &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; secvenţe, deci puterea lor este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Celelalte elemente au puteri mai mici.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python2&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
inFile = &amp;quot;maxp.intxt&amp;quot;&lt;br /&gt;
outFile = &amp;quot;maxp.outtxt&amp;quot;&lt;br /&gt;
dim = 200001&lt;br /&gt;
&lt;br /&gt;
a = [0] * dim&lt;br /&gt;
st = [0] * dim&lt;br /&gt;
dr = [0] * dim&lt;br /&gt;
q = [0] * dim&lt;br /&gt;
poz = [0] * dim&lt;br /&gt;
n = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global n&lt;br /&gt;
    i, k, x, nrsol, p, pmax = 0, 0, 0, 0, 0, 0&lt;br /&gt;
    &lt;br /&gt;
    #citire&lt;br /&gt;
    with open(inFile, &#039;r&#039;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        for i in range(1, n+1):&lt;br /&gt;
            a[i] = int(fin.readline())&lt;br /&gt;
    &lt;br /&gt;
    # constructie st&lt;br /&gt;
    k = 0&lt;br /&gt;
    q[k] = dim + 2&lt;br /&gt;
    poz[k] = 0&lt;br /&gt;
    st[k] = 0&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        x = a[i]&lt;br /&gt;
        while q[k] &amp;lt; x:&lt;br /&gt;
            k -= 1&lt;br /&gt;
        st[i] = i - poz[k] - 1&lt;br /&gt;
        k += 1&lt;br /&gt;
        q[k] = x&lt;br /&gt;
        poz[k] = i&lt;br /&gt;
    &lt;br /&gt;
    # constructie dr&lt;br /&gt;
    k = 0&lt;br /&gt;
    q[k] = dim + 2&lt;br /&gt;
    poz[k] = n + 1&lt;br /&gt;
    dr[k] = 0&lt;br /&gt;
    for i in range(n, 0, -1):&lt;br /&gt;
        x = a[i]&lt;br /&gt;
        while q[k] &amp;lt; x:&lt;br /&gt;
            k -= 1&lt;br /&gt;
        dr[i] = poz[k] - i - 1&lt;br /&gt;
        k += 1&lt;br /&gt;
        q[k] = x&lt;br /&gt;
        poz[k] = i&lt;br /&gt;
&lt;br /&gt;
    # calcul&lt;br /&gt;
    nrsol = 1&lt;br /&gt;
    pmax = (st[1] + 1)&lt;br /&gt;
    pmax *= (dr[1] + 1)&lt;br /&gt;
    for i in range(2, n+1):&lt;br /&gt;
        p = (st[i] + 1)&lt;br /&gt;
        p = (p * (dr[i] + 1))&lt;br /&gt;
        if p &amp;gt; pmax:&lt;br /&gt;
            pmax = p&lt;br /&gt;
            nrsol = 1&lt;br /&gt;
        elif p == pmax:&lt;br /&gt;
            nrsol += 1&lt;br /&gt;
    &lt;br /&gt;
    with open(outFile, &#039;w&#039;) as fout:&lt;br /&gt;
        fout.write(str(pmax) + &amp;quot;\n&amp;quot; + str(nrsol) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1057_-_Max_P&amp;diff=9649</id>
		<title>1057 - Max P</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1057_-_Max_P&amp;diff=9649"/>
		<updated>2024-02-16T16:59:34Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Considerăm un şir de numere  &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. O secvenţă nevidă în acest şir este de forma &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;i ≤ j&amp;lt;/code&amp;gt;. De exemplu, pentru &amp;lt;code&amp;gt;N=4&amp;lt;/code&amp;gt; şi şirul &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, secvenţele nevide sunt: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Considerăm un şir de numere  &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. O secvenţă nevidă în acest şir este de forma &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;j&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;i ≤ j&amp;lt;/code&amp;gt;. De exemplu, pentru &amp;lt;code&amp;gt;N=4&amp;lt;/code&amp;gt; şi şirul &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, secvenţele nevide sunt: &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Definim puterea unui element &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; ca fiind numărul de secvenţe care-l conţin pe &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; şi în care &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este strict mai mare decât celelalte elemente ale fiecăreia dintre respectivele secvenţe. Astfel în şirul &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt; puterea elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (fiind maxim doar în secvenţa formată din el însuşi), a elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; fiind maxim în secvenţele &amp;lt;code&amp;gt;2 3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;), a elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; (fiind maxim în secvenţele &amp;lt;code&amp;gt;2 3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2 3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4 3&amp;lt;/code&amp;gt;), iar a elementului &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;4&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerinţe =&lt;br /&gt;
Scrieţi un program care determină puterea cea mai mare a unui element din şirul dat, precum şi numărul de elemente din şir care au cea mai mare putere.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;maxp.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a doua linie, în ordine, numerele naturale &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; 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 &amp;lt;code&amp;gt;maxp.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural ce reprezintă puterea cea mai mare a unui element din şirul dat şi pe a doua linie va conţine un număr natural ce reprezintă numărul de elemente din şir care au cea mai mare putere.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 &amp;lt;= N &amp;lt;= 200.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Elementele şirului sunt numere naturale şi au cel mult &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 7&lt;br /&gt;
 9 3 4 5 1 2 2&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 12 &lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Elementul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; de pe poziţia &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; este maxim în &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt; secvenţe: &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;3 4 5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 5 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 5 1 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3 4 5 1 2 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 5&amp;lt;/code&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;4 5 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 5 1 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4 5 1 2 2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5 1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5 1 2&amp;lt;/code&amp;gt;, &lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;5 1 2 2&amp;lt;/code&amp;gt;, deci puterea lui este &amp;lt;code&amp;gt;12&amp;lt;/code&amp;gt;. Este singurul element care are această putere, celelalte elemente având puteri mai mici.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 1 0 7 7 2 6&lt;br /&gt;
&amp;lt;code&amp;gt;maxp.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 3 &lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Elementele din poziţiile &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; sunt maxime în &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; secvenţe, deci puterea lor este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Celelalte elemente au puteri mai mici.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
inFile = &amp;quot;maxp.intxt&amp;quot;&lt;br /&gt;
outFile = &amp;quot;maxp.outtxt&amp;quot;&lt;br /&gt;
dim = 200001&lt;br /&gt;
&lt;br /&gt;
a = [0] * dim&lt;br /&gt;
st = [0] * dim&lt;br /&gt;
dr = [0] * dim&lt;br /&gt;
q = [0] * dim&lt;br /&gt;
poz = [0] * dim&lt;br /&gt;
n = 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global n&lt;br /&gt;
    i, k, x, nrsol, p, pmax = 0, 0, 0, 0, 0, 0&lt;br /&gt;
    &lt;br /&gt;
    #citire&lt;br /&gt;
    with open(inFile, &#039;r&#039;) as fin:&lt;br /&gt;
        n = int(fin.readline())&lt;br /&gt;
        for i in range(1, n+1):&lt;br /&gt;
            a[i] = int(fin.readline())&lt;br /&gt;
    &lt;br /&gt;
    # constructie st&lt;br /&gt;
    k = 0&lt;br /&gt;
    q[k] = dim + 2&lt;br /&gt;
    poz[k] = 0&lt;br /&gt;
    st[k] = 0&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        x = a[i]&lt;br /&gt;
        while q[k] &amp;lt; x:&lt;br /&gt;
            k -= 1&lt;br /&gt;
        st[i] = i - poz[k] - 1&lt;br /&gt;
        k += 1&lt;br /&gt;
        q[k] = x&lt;br /&gt;
        poz[k] = i&lt;br /&gt;
    &lt;br /&gt;
    # constructie dr&lt;br /&gt;
    k = 0&lt;br /&gt;
    q[k] = dim + 2&lt;br /&gt;
    poz[k] = n + 1&lt;br /&gt;
    dr[k] = 0&lt;br /&gt;
    for i in range(n, 0, -1):&lt;br /&gt;
        x = a[i]&lt;br /&gt;
        while q[k] &amp;lt; x:&lt;br /&gt;
            k -= 1&lt;br /&gt;
        dr[i] = poz[k] - i - 1&lt;br /&gt;
        k += 1&lt;br /&gt;
        q[k] = x&lt;br /&gt;
        poz[k] = i&lt;br /&gt;
&lt;br /&gt;
    # calcul&lt;br /&gt;
    nrsol = 1&lt;br /&gt;
    pmax = (st[1] + 1)&lt;br /&gt;
    pmax *= (dr[1] + 1)&lt;br /&gt;
    for i in range(2, n+1):&lt;br /&gt;
        p = (st[i] + 1)&lt;br /&gt;
        p = (p * (dr[i] + 1))&lt;br /&gt;
        if p &amp;gt; pmax:&lt;br /&gt;
            pmax = p&lt;br /&gt;
            nrsol = 1&lt;br /&gt;
        elif p == pmax:&lt;br /&gt;
            nrsol += 1&lt;br /&gt;
    &lt;br /&gt;
    with open(outFile, &#039;w&#039;) as fout:&lt;br /&gt;
        fout.write(str(pmax) + &amp;quot;\n&amp;quot; + str(nrsol) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1055_-_Compar&amp;diff=9648</id>
		<title>1055 - Compar</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1055_-_Compar&amp;diff=9648"/>
		<updated>2024-02-16T16:55:27Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Ana şi Bogdan au inventat jocul &amp;#039;&amp;#039;“Compar”&amp;#039;&amp;#039;. Ana scrie pe tablă o secvenţă formată din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale distincte cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, apoi compară fiecare două numere învecinate din secvenţă scriind între ele semnul &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; sau semnul &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, după caz.  De exemplu, dacă secvenţa de pe tablă este &amp;lt;code&amp;gt;6 4 2 1 3 5&amp;lt;/code&amp;gt;, după compararea elementelor învecinate şi inserarea semnelor în secvenţ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ana şi Bogdan au inventat jocul &#039;&#039;“Compar”&#039;&#039;. Ana scrie pe tablă o secvenţă formată din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale distincte cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, apoi compară fiecare două numere învecinate din secvenţă scriind între ele semnul &amp;lt;code&amp;gt;&amp;lt;&amp;lt;/code&amp;gt; sau semnul &amp;lt;code&amp;gt;&amp;gt;&amp;lt;/code&amp;gt;, după caz.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă secvenţa de pe tablă este &amp;lt;code&amp;gt;6 4 2 1 3 5&amp;lt;/code&amp;gt;, după compararea elementelor învecinate şi inserarea semnelor în secvenţă, Ana obţine:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;6&amp;gt;4&amp;gt;2&amp;gt;1&amp;lt;3&amp;lt;5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După aceea Ana şterge cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; elemente ale secvenţei şi păstrează numai semnele, astfel:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;lt;&amp;lt;&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
La final, Ana îi arată lui Bogdan şirul semnelor şi îi cere să reconstituie secvenţa de numere naturale scrisă iniţial pe tablă.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Cunoscând şirul semnelor construit de Ana, scrieţi un program care să îl ajute pe Bogdan să reconstituie secvenţa de numere naturale distincte scrisă iniţial pe tablă.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;compar.in&amp;lt;/code&amp;gt; conține pe prima linie o secvenţă de caractere din mulţimea &amp;lt;code&amp;gt;{&#039;&amp;lt;&#039;, &#039;&amp;gt;&#039;}&amp;lt;/code&amp;gt;, reprezentând şirul semnelor obţinut de Ana după compararea elementelor vecine din secvenţa iniţială.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;compar.out&amp;lt;/code&amp;gt; va conține pe prima linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând lungimea secvenţei iniţiale. Pe a doua linie vor fi scrise &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale distincte cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând elementele secvenţei iniţiale, reconstituită pe baza semnelor din fişierul de intrare.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 &amp;lt; N ≤ 100000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Dacă există mai multe soluţii, afişaţi oricare dintre acestea.&lt;br /&gt;
* Pentru determinarea corectă a lungimii secvenţei se acordă 10% din punctajul pe test.&lt;br /&gt;
*&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;compar.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 &amp;gt;&amp;gt;&amp;gt;&amp;lt;&amp;lt;&lt;br /&gt;
&amp;lt;code&amp;gt;compar.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 6 4 2 1 3 &lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
&amp;lt;code&amp;gt;6&amp;gt;4&amp;gt;2&amp;gt;1&amp;lt;3&amp;lt;5&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Există şi alte soluţii posibile, aceasta este doar una dintre ele.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import os&lt;br /&gt;
&lt;br /&gt;
s = [&#039;&#039; for i in range(100000)]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    fin = open(&amp;quot;compar.intxt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fout = open(&amp;quot;compar.outtxt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    s = fin.readline().strip()&lt;br /&gt;
    N = len(s) + 1&lt;br /&gt;
    fout.write(str(N) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    maxx = N&lt;br /&gt;
    minn = 1&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        if s[i] == &#039;&amp;lt;&#039;:&lt;br /&gt;
            fout.write(str(minn) + &amp;quot; &amp;quot;)&lt;br /&gt;
            minn += 1&lt;br /&gt;
        else:&lt;br /&gt;
            fout.write(str(maxx) + &amp;quot; &amp;quot;)&lt;br /&gt;
            maxx -= 1&lt;br /&gt;
    fout.close()&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1048_-_Schi&amp;diff=9647</id>
		<title>1048 - Schi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1048_-_Schi&amp;diff=9647"/>
		<updated>2024-02-15T10:34:59Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: La proba de sărituri cu schiurile din cadrul jocurilor olimpice de iarnă participă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; concurenți, numerotați cu numere de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.  Regulile de desfășurare a probei sunt următoarele:  * concurenții evoluează pe rând, în ordine de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;; * fiecare concurent va efectua o singură săritură; * după efectuarea săriturii fiecare concurent primește un anumit punctaj; * pe tot parcursul concursului...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La proba de sărituri cu schiurile din cadrul jocurilor olimpice de iarnă participă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; concurenți, numerotați cu numere de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Regulile de desfășurare a probei sunt următoarele:&lt;br /&gt;
&lt;br /&gt;
* concurenții evoluează pe rând, în ordine de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;;&lt;br /&gt;
* fiecare concurent va efectua o singură săritură;&lt;br /&gt;
* după efectuarea săriturii fiecare concurent primește un anumit punctaj;&lt;br /&gt;
* pe tot parcursul concursului, comisia de arbitri are obligația să alcătuiască o listă cu punctajele obținute de concurenți, în ordinea evoluției lor;&lt;br /&gt;
* evoluția unui concurent durează exact un minut;&lt;br /&gt;
* nu se face pauză între evoluțiile a doi concurenți care au numere de ordine consecutive;&lt;br /&gt;
* afișarea punctajului nu necesită timp suplimentar după efectuarea săriturii;&lt;br /&gt;
* proba se încheie la un minut după evoluția ultimului concurent.&lt;br /&gt;
&lt;br /&gt;
Pe tot parcursul concursului se ține în mod neoficial și un clasament parțial, pe baza rezultatelor obținute de concurenții care au evoluat până în acel moment. Asta pentru că șeful comisiei de arbitri are o curiozitate aparte și pune &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; întrebări sub forma următoare: &#039;&#039;Câte minute s-a ocupat primul loc din clasament cu un punctaj egal cu &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; puncte?&#039;&#039; Dacă nici un concurent nu s-a clasat pe primul loc cu &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; puncte atunci primește ca răspuns valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieți un program care determină răspunsul pentru fiecare dintre cele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; întrebări puse de șeful comisiei de arbitri.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;schi.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; reprezentând numărul de concurenți. Pe a doua linie a fișierului sunt scrise cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale separate prin câte un spațiu, reprezentând punctajele obținute de fiecare dintre cei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; concurenți, în ordinea în care aceștia au evoluat. Pe a treia linie a fișierului este scris numărul natural &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; ce reprezintă numărul de întrebări puse de șef. Pe a patra linie a fișierului sunt scrise &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere naturale separate prin câte un spațiu, reprezentând valorile &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; ale punctajelor alese de șeful comisiei de arbitri.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;schi.out&amp;lt;/code&amp;gt; va conține pe prima linie &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere, separate prin câte un spațiu, reprezentând, în ordine, răspunsurile la cele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; întrebări.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤&amp;lt;/code&amp;gt; punctajele obținute de concurenți &amp;lt;code&amp;gt;≤ 1 000 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤&amp;lt;/code&amp;gt; valorile &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt; alese de șeful arbitrilor &amp;lt;code&amp;gt;≤ 1 000 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;schi.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 10&lt;br /&gt;
 1 6 5 3 6 8 8 6 1 9&lt;br /&gt;
 6&lt;br /&gt;
 5 1 6 8 2 9&lt;br /&gt;
&amp;lt;code&amp;gt;schi.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 0 1 4 4 0 1&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Cu punctajul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; nu s-a ocupat niciodată locul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, cu punctajul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; s-a ocupat primul loc un singur minut, cu punctajele &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; s-a ocupat locul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; câte &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; minute.  Cu punctajul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; nu s-a ocupat locul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. El nici nu a fost obținut de vreun concurent. Cu punctajul &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; s-a ocupat locul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; un minut.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
DIM = 100010&lt;br /&gt;
v = [0] * DIM&lt;br /&gt;
n = 0&lt;br /&gt;
i = 0&lt;br /&gt;
T = 0&lt;br /&gt;
st = 0&lt;br /&gt;
dr = 0&lt;br /&gt;
x = 0&lt;br /&gt;
q = 0&lt;br /&gt;
maxim = 0&lt;br /&gt;
&lt;br /&gt;
def cautMinim(x):&lt;br /&gt;
    p = 1&lt;br /&gt;
    u = n&lt;br /&gt;
    mid = 0&lt;br /&gt;
    while p &amp;lt;= u:&lt;br /&gt;
        mid = (p + u) // 2&lt;br /&gt;
        if x &amp;lt;= v[mid]:&lt;br /&gt;
            u = mid - 1&lt;br /&gt;
        else:&lt;br /&gt;
            p = mid + 1&lt;br /&gt;
    if v[p] == x:&lt;br /&gt;
        return p&lt;br /&gt;
    else:&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
def cautMaxim(x):&lt;br /&gt;
    p = 1&lt;br /&gt;
    u = n&lt;br /&gt;
    mid = 0&lt;br /&gt;
    while p &amp;lt;= u:&lt;br /&gt;
        mid = (p + u) // 2&lt;br /&gt;
        if x &amp;gt;= v[mid]:&lt;br /&gt;
            p = mid + 1&lt;br /&gt;
        else:&lt;br /&gt;
            u = mid - 1&lt;br /&gt;
    if v[u] == x:&lt;br /&gt;
        return u&lt;br /&gt;
    else:&lt;br /&gt;
        return -1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    fin = open(&amp;quot;schi.intxt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    fout = open(&amp;quot;schi.outtxt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    n = int(fin.readline())&lt;br /&gt;
    maxim = -1&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        x = int(fin.readline())&lt;br /&gt;
        if x &amp;gt; maxim:&lt;br /&gt;
            maxim = x&lt;br /&gt;
        v[i] = maxim&lt;br /&gt;
    q = int(fin.readline())&lt;br /&gt;
    for i in range(1, q+1):&lt;br /&gt;
        x = int(fin.readline())&lt;br /&gt;
        st = cautMinim(x)&lt;br /&gt;
        if st == -1:&lt;br /&gt;
            fout.write(&amp;quot;0 &amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            dr = cautMaxim(x)&lt;br /&gt;
            fout.write(str(dr - st + 1) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    fin.close()&lt;br /&gt;
    fout.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1071_-_OZN&amp;diff=9646</id>
		<title>1071 - OZN</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1071_-_OZN&amp;diff=9646"/>
		<updated>2024-02-15T10:28:59Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: O invazie de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; farfurii zburătoare (denumite uzual OZN) dă bătăi de cap autorităţilor. În fiecare astfel de OZN se află extratereştri care au ca misiune distrugerea planetei noastre. Radarul care a detectat invazia are un ecran similar cu planul &amp;lt;code&amp;gt;XOY&amp;lt;/code&amp;gt;. Fiecare OZN este reprezentat pe ecran printr-un segment de dreaptă.  Pentru anihilarea OZN-urilor, autorităţile dispun de &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; arme laser. Armele sunt poziţionate pe sol (ilustrat...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;O invazie de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; farfurii zburătoare (denumite uzual OZN) dă bătăi de cap autorităţilor. În fiecare astfel de OZN se află extratereştri care au ca misiune distrugerea planetei noastre. Radarul care a detectat invazia are un ecran similar cu planul &amp;lt;code&amp;gt;XOY&amp;lt;/code&amp;gt;. Fiecare OZN este reprezentat pe ecran printr-un segment de dreaptă.&lt;br /&gt;
&lt;br /&gt;
Pentru anihilarea OZN-urilor, autorităţile dispun de &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; arme laser. Armele sunt poziţionate pe sol (ilustrat pe ecranul radarului prin axa &amp;lt;code&amp;gt;OX&amp;lt;/code&amp;gt;). Fiecare armă emite o rază laser, ilustrată pe ecran printr-o paralelă cu axa &amp;lt;code&amp;gt;OY&amp;lt;/code&amp;gt;. Dacă o rază laser intersectează segmentul de pe ecranul radarului corespunzător unui OZN, raza va omorî toţi extratereştrii aflaţi în OZN-ul respectiv.&lt;br /&gt;
&lt;br /&gt;
Din păcate, în preajmă se află doar un militar specializat în arme laser, aşa că autorităţile doresc să ştie exact ce armă trebuie să folosească acesta pentru a distruge cât mai mulţi extratereştri.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Ajutaţi autorităţile să determine numărul de extratereştri care pot fi anihilaţi cu fiecare armă din dotare.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;ozn.in&amp;lt;/code&amp;gt; conține pe prima linie două numere naturale separate prin spaţiu &amp;lt;code&amp;gt;N K&amp;lt;/code&amp;gt; reprezentând numărul de OZN-uri şi respectiv numărul de arme laser. Pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii sunt descrise cele N OZN-uri, câte unul pe linie. Un OZN este descris prin &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; numere naturale separate prin câte un spaţiu &amp;lt;code&amp;gt;x1 y1 x2 y2 nr&amp;lt;/code&amp;gt;, reprezentând în ordine coordonatele capetelor segmentului corespunzător &amp;lt;code&amp;gt;(x1, y1)&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;(x2, y2)&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;nr&amp;lt;/code&amp;gt; – numărul de extratereştri din el. Pe ultima linie se găsesc &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; … &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;K&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând coordonatele pe axa &amp;lt;code&amp;gt;OX&amp;lt;/code&amp;gt; (abscisele) unde sunt amplasate armele laser.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;ozn.out&amp;lt;/code&amp;gt; va conține &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; linii. Pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; va fi scris numărul total de extratereştri care pot fi distruşi cu arma &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, considerând armele numerotate în ordinea în care acestea apar în fişierul de intrare.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 20 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 20 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤&amp;lt;/code&amp;gt; orice coordonată din fişierul de intrare &amp;lt;code&amp;gt;≤ 2 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ nr ≤ 100&amp;lt;/code&amp;gt;, pentru orice OZN&lt;br /&gt;
* &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1 &amp;lt; x2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;sub&amp;gt;, pentru orice OZN&amp;lt;/sub&amp;gt;&lt;br /&gt;
* Pe ecranul radarului segmentele ce descriu navele se pot intersecta.&lt;br /&gt;
* Dacă raza laser trece prin unul dintre capetele unui OZN atunci acesta este distrus.&lt;br /&gt;
* Pentru 50% dintre testele de intrare &amp;lt;code&amp;gt;1 ≤ N*K ≤ 10 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;ozn.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 3&lt;br /&gt;
 1 1 3 2 2&lt;br /&gt;
 2 3 4 1 3&lt;br /&gt;
 6 5 8 5 8&lt;br /&gt;
 5 1 7 1 6&lt;br /&gt;
 6 2 7 4 1&lt;br /&gt;
 3 7 5&lt;br /&gt;
&amp;lt;code&amp;gt;ozn.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
 15&lt;br /&gt;
 6&lt;br /&gt;
Explicație&lt;br /&gt;
&lt;br /&gt;
Arma care emite din punctul &amp;lt;code&amp;gt;(3,0)&amp;lt;/code&amp;gt; doboară farfuriile reprezentate de segmentele &amp;lt;code&amp;gt;{(1,1)(3,2)}&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;{(2,3)(4,1)}&amp;lt;/code&amp;gt; distrugând în total &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; extratereştri.&lt;br /&gt;
&lt;br /&gt;
Arma care emite din punctul &amp;lt;code&amp;gt;(7,0)&amp;lt;/code&amp;gt; doboară farfuriile reprezentate de segmentele &amp;lt;code&amp;gt;{(5,1)(7,1)}, {(6,2)(7,4)}&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;{(6,5)(8,5)}&amp;lt;/code&amp;gt; distrugând în total &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt; extratereştri.&lt;br /&gt;
&lt;br /&gt;
Arma care emite din punctul &amp;lt;code&amp;gt;(5,0)&amp;lt;/code&amp;gt; doboară farfuria reprezentată de segmentul &amp;lt;code&amp;gt;{(5,1)(7,1)}&amp;lt;/code&amp;gt; şi distruge &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; extratereştri.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
MAXX = 2000010&lt;br /&gt;
MAXN = 100010&lt;br /&gt;
&lt;br /&gt;
f = open(&amp;quot;ozn.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
g = open(&amp;quot;ozn.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
A = [0] * MAXX&lt;br /&gt;
N, K = map(int, f.readline().split())&lt;br /&gt;
X1, Y1, X2, Y2, nr, i = 0, 0, 0, 0, 0, 0&lt;br /&gt;
&lt;br /&gt;
for i in range(1, N + 1):&lt;br /&gt;
    X1, Y1, X2, Y2, nr = map(int, f.readline().split())&lt;br /&gt;
    A[X1] += nr&lt;br /&gt;
    A[X2 + 1] -= nr&lt;br /&gt;
&lt;br /&gt;
for i in range(1, MAXX):&lt;br /&gt;
    A[i] += A[i - 1]&lt;br /&gt;
&lt;br /&gt;
for i in range(1, K + 1):&lt;br /&gt;
    X1 = int(f.readline())&lt;br /&gt;
    g.write(str(A[X1]) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
g.close()&lt;br /&gt;
f.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1070_-_Deal&amp;diff=9645</id>
		<title>1070 - Deal</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1070_-_Deal&amp;diff=9645"/>
		<updated>2024-02-15T10:26:21Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  Vasilică are la grădiniţă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turnuri cu înălţimile &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Când aşază în linie nişte turnuri, cel puţin două, astfel încât înălţimile lor să fie în ordine crescătoare, Vasilică spune că a construit un &amp;#039;&amp;#039;deal&amp;#039;&amp;#039;. Înălţimea dealului este egală cu înălţimea celui mai înalt turn folosit. Iată, de exemplu, că aşezând în ordine turnurile cu înălţimile...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Vasilică are la grădiniţă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turnuri cu înălţimile &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;. Când aşază în linie nişte turnuri, cel puţin două, astfel încât înălţimile lor să fie în ordine crescătoare, Vasilică spune că a construit un &#039;&#039;deal&#039;&#039;. Înălţimea dealului este egală cu înălţimea celui mai înalt turn folosit. Iată, de exemplu, că aşezând în ordine turnurile cu înălţimile &amp;lt;code&amp;gt;2 4 4 7 9&amp;lt;/code&amp;gt; a format un deal cu înălţimea &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Vasilică şi-ar dori să aşeze în linie cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turnuri, formând o succesiune de dealuri astfel încât suma înălţimilor dealurilor formate să fie maximă.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Scrieţi un program care, cunoscând înălţimile celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turnuri, va determina suma înălţimilor dealurilor ce se pot forma aşezând în linie cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turnuri, maximă posibil.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;deal.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Pe cea de a doua linie se află &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale separate prin spaţii, reprezentând înălţimile celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; turnuri.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;deal.out&amp;lt;/code&amp;gt; va conține o singură linie pe care va fi scris un număr natural reprezentând cerinţa problemei.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ N ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤&amp;lt;/code&amp;gt; Înălţimile turnurilor &amp;lt;code&amp;gt;≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Dacă după aranjarea turnurilor &amp;lt;code&amp;gt;h&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ h&amp;lt;sub&amp;gt;i+1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; atunci turnurile &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;i+1&amp;lt;/code&amp;gt; fac parte din acelaşi deal.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;deal.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 7&lt;br /&gt;
 10 2 2 2 7 5 2&lt;br /&gt;
&amp;lt;code&amp;gt;deal.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 22&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
O soluţie posibilă cu suma înălţimilor &amp;lt;code&amp;gt;22&amp;lt;/code&amp;gt; ar fi: &amp;lt;code&amp;gt;2 10 2 5 2 2 7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
S-au format trei dealuri: &amp;lt;code&amp;gt;2 10&amp;lt;/code&amp;gt; (cu înălţimea &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;) şi &amp;lt;code&amp;gt;2 5&amp;lt;/code&amp;gt; (cu înălţimea &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;) şi &amp;lt;code&amp;gt;2 2 7&amp;lt;/code&amp;gt; cu înălțimea &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import numpy as np&lt;br /&gt;
&lt;br /&gt;
nmax = 100001&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;deal.intxt&amp;quot;, &#039;r&#039;) as f, open(&amp;quot;deal.outtxt&amp;quot;, &#039;w&#039;) as g:&lt;br /&gt;
        n = int(f.readline())&lt;br /&gt;
        w = np.zeros(nmax)&lt;br /&gt;
        v = np.zeros(nmax)&lt;br /&gt;
        i = 1&lt;br /&gt;
        x = 0&lt;br /&gt;
        st = 0&lt;br /&gt;
        dr = 0&lt;br /&gt;
        pdp = 0&lt;br /&gt;
        s = 0&lt;br /&gt;
&lt;br /&gt;
        for i in range(1, nmax):&lt;br /&gt;
            w[i] = 0&lt;br /&gt;
        &lt;br /&gt;
        for i in range(1, n+1):&lt;br /&gt;
            x = int(f.readline())&lt;br /&gt;
            w[x] += 1&lt;br /&gt;
        &lt;br /&gt;
        for i in range(1, n+1):&lt;br /&gt;
            v[i] = w[i]&lt;br /&gt;
        &lt;br /&gt;
        st = 1&lt;br /&gt;
        dr = nmax - 1&lt;br /&gt;
        &lt;br /&gt;
        while w[st] == 0:&lt;br /&gt;
            st += 1&lt;br /&gt;
        &lt;br /&gt;
        while w[dr] == 0:&lt;br /&gt;
            dr -= 1&lt;br /&gt;
        &lt;br /&gt;
        while st != dr:&lt;br /&gt;
            if w[st] == 0:&lt;br /&gt;
                st += 1&lt;br /&gt;
            else:&lt;br /&gt;
                if w[dr] == 0:&lt;br /&gt;
                    dr -= 1&lt;br /&gt;
                else:&lt;br /&gt;
                    s += dr&lt;br /&gt;
                    w[st] -= 1&lt;br /&gt;
                    w[dr] -= 1&lt;br /&gt;
        &lt;br /&gt;
        pdp = (n - w[dr]) // 2 + 1 - (v[dr] - w[dr])&lt;br /&gt;
        &lt;br /&gt;
        if w[dr] // 2 &amp;lt;= pdp:&lt;br /&gt;
            s += dr * (w[dr] // 2)&lt;br /&gt;
        else:&lt;br /&gt;
            s += dr * pdp&lt;br /&gt;
        &lt;br /&gt;
        g.write(str(s))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1034_-_Roata&amp;diff=9644</id>
		<title>1034 - Roata</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1034_-_Roata&amp;diff=9644"/>
		<updated>2024-02-15T10:22:38Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Una dintre atracţiile celebrului parc de distracţii Prater din Viena este Marea Roată Vieneză. Din ea se poate admira priveliştea întregii Viene.  Roata are &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cabine, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; în sens orar şi dispuse simetric pe circumferinţa roţii. Îmbarcarea clienţilor se face în cabina în care roata este tangentă cu solul, iar rotirea începe cu cabina &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; aflată în poziţia de îmbarcare şi se face în sens...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Una dintre atracţiile celebrului parc de distracţii Prater din Viena este Marea Roată Vieneză. Din ea se poate admira priveliştea întregii Viene.&lt;br /&gt;
&lt;br /&gt;
Roata are &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cabine, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; în sens orar şi dispuse simetric pe circumferinţa roţii. Îmbarcarea clienţilor se face în cabina în care roata este tangentă cu solul, iar rotirea începe cu cabina &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; aflată în poziţia de îmbarcare şi se face în sens antiorar. Un client plăteşte pentru o rotire &amp;lt;code&amp;gt;1 EUR&amp;lt;/code&amp;gt; şi poate cumpăra un număr oarecare de rotiri.&lt;br /&gt;
&lt;br /&gt;
Cei &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; clienţi care doresc utilizarea roţii trebuie să respecte următoarea procedură: clientul cu numărul de ordine &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; îşi cumpără un bilet pe care sunt înscrise numărul său de ordine şi numărul de rotiri &amp;lt;code&amp;gt;c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1≤ i ≤ p&amp;lt;/code&amp;gt;, apoi se aşează la rând. Când în poziţia de îmbarcare este o cabină liberă sau se eliberează o cabină, roata se opreşte şi urcă următorul clientul. Un client coboară după ce se efectuează numărul de rotiri înscris pe bilet.&lt;br /&gt;
&lt;br /&gt;
= Cerinţa =&lt;br /&gt;
Să se scrie un program care, cunoscând numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; de cabine al roţii, numărul &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; de clienţi, precum şi numărul de  rotiri cumpărate de fiecare client, &amp;lt;code&amp;gt;c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1≤ i ≤ p&amp;lt;/code&amp;gt;, să calculeze:&lt;br /&gt;
&lt;br /&gt;
* suma totală încasată de administratorul roţii de la clienţi;&lt;br /&gt;
* ordinea în care coboară clienţii din roată;&lt;br /&gt;
* numărul cabinei din care coboară ultimul client.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;roata.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, pe al doilea rând numărul natural &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; iar pe al treilea rând numerele naturale &amp;lt;code&amp;gt;c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 ≤ i ≤ p&amp;lt;/code&amp;gt;, separate printr-un spaţiu, cu semnificaţiile de mai sus.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;roata.out&amp;lt;/code&amp;gt; va conține pe prima linie suma totală încasată, pe a doua linie numerele de ordine ale clienţilor, în ordinea coborârii, separate printr-un spaţiu, iar pe a treia linie numărul cabinei din care va coborî ultimul client.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ n ≤ 360&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ p ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ c&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;roata.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
 7&lt;br /&gt;
 6 4 1 5 2 8 3&lt;br /&gt;
&amp;lt;code&amp;gt;roata.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 29&lt;br /&gt;
 3 5 2 4 1 7 6 &lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Roata are &amp;lt;code&amp;gt;n=4&amp;lt;/code&amp;gt; cabine şi numărul de clienţi este &amp;lt;code&amp;gt;p=7&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Primul client cumpără &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; rotiri, al doilea &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; rotiri, … , iar al şaptelea client cumpără &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; rotiri. Suma totală încasată este de &amp;lt;code&amp;gt;29 EUR&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
După ce primii &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; clienţi se urcă în roată şi se efectuează o rotire completă, primul care coboară este clientul al &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;-lea şi imediat se urcă clientul al &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;-lea. După încă &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; rotiri, clientul al &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;-lea coboară şi se urcă clientul al &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;-lea. După încă o rotire coboară clientul al &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-lea şi se urcă al &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;-lea client. Ultimii &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; clienţi coboară  în ordinea &amp;lt;code&amp;gt;4,1,7,6&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cabina din care coboară ultimul client este cabina cu numărul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
nmax = 361&lt;br /&gt;
pmax = 100001&lt;br /&gt;
&lt;br /&gt;
f = open(&amp;quot;roata.intxt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
g = open(&amp;quot;roata.outtxt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
# n = numarul de cabine, p = numarul de persoane&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # o - ordinea la urcare, c - costul biletului&lt;br /&gt;
    n, p = map(int, f.readline().split())&lt;br /&gt;
    o = [0] * nmax&lt;br /&gt;
    c = [0] * pmax&lt;br /&gt;
    s = 0&lt;br /&gt;
&lt;br /&gt;
    # initializez numerele de ordine ale primilor n clienti&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        o[i] = i&lt;br /&gt;
&lt;br /&gt;
    # citesc numarul de rotiri si calculez suma totala incasata&lt;br /&gt;
    for i in range(1, p+1):&lt;br /&gt;
        c[i] = int(f.readline())&lt;br /&gt;
        s += c[i]&lt;br /&gt;
&lt;br /&gt;
    # afisez suma totala incasata&lt;br /&gt;
    g.write(str(s) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if n &amp;lt; p:&lt;br /&gt;
        for k in range(n+1, p+1):&lt;br /&gt;
            # determin clientul care urmeaza sa coboare&lt;br /&gt;
            pozmin = 1&lt;br /&gt;
            for i in range(2, n+1):&lt;br /&gt;
                if c[i] &amp;lt; c[pozmin]:&lt;br /&gt;
                    pozmin = i&lt;br /&gt;
&lt;br /&gt;
            # afisez ordinea la coborare&lt;br /&gt;
            g.write(str(o[pozmin]) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            # resetez toate valorile lui c[i] pentru ca sunt prea mari&lt;br /&gt;
            if c[pozmin] &amp;gt; 10000000:&lt;br /&gt;
                for i in range(1, n+1):&lt;br /&gt;
                    c[i] -= 10000000&lt;br /&gt;
&lt;br /&gt;
            c[pozmin] += c[k]  # o mica smecherie - in loc sa scad din toate minimul, am adunat&lt;br /&gt;
            o[pozmin] = k&lt;br /&gt;
    else:&lt;br /&gt;
        n = p&lt;br /&gt;
&lt;br /&gt;
    # determin numarul cabinei din care va cobora ultimul client&lt;br /&gt;
    pozmax = 1&lt;br /&gt;
    for i in range(2, n+1):&lt;br /&gt;
        if c[i] &amp;gt;= c[pozmax]:&lt;br /&gt;
            pozmax = i&lt;br /&gt;
&lt;br /&gt;
    for k in range(1, n+1):&lt;br /&gt;
        # determin clientul care urmeaza sa coboare&lt;br /&gt;
        pozmin = 1&lt;br /&gt;
        for i in range(2, n+1):&lt;br /&gt;
            if c[i] &amp;lt; c[pozmin]:&lt;br /&gt;
                pozmin = i&lt;br /&gt;
&lt;br /&gt;
        # afisez ordinea la coborare&lt;br /&gt;
        g.write(str(o[pozmin]) + &amp;quot; &amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        c[pozmin] += 100001&lt;br /&gt;
&lt;br /&gt;
    # afisez numarul cabinei din care va cobora ultimul client&lt;br /&gt;
    g.write(&amp;quot;\n&amp;quot; + str(pozmax) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    f.close()&lt;br /&gt;
    g.close()&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    sys.exit(main())&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1065_-_Vase_1&amp;diff=9643</id>
		<title>1065 - Vase 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1065_-_Vase_1&amp;diff=9643"/>
		<updated>2024-02-15T10:18:20Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Specialiştii chimişti au reuşit crearea în laborator a unei game diversificate de substanţe lichide nemiscibile (care nu se amestecă între ele), de aceeaşi densitate şi de culori diferite.  Acest rezultat a fost utilizat de către specialiştii fizicieni pentru studiul principiului vaselor comunicante. Conform acestui principiu „într-un sistem de vase comunicante nivelul lichidului este acelaşi, indiferent de forma vaselor.“  Experimentele fizicienilor se desf...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Specialiştii chimişti au reuşit crearea în laborator a unei game diversificate de substanţe lichide nemiscibile (care nu se amestecă între ele), de aceeaşi densitate şi de culori diferite.&lt;br /&gt;
&lt;br /&gt;
Acest rezultat a fost utilizat de către specialiştii fizicieni pentru studiul principiului vaselor comunicante. Conform acestui principiu „într-un sistem de vase comunicante nivelul lichidului este acelaşi, indiferent de forma vaselor.“&lt;br /&gt;
&lt;br /&gt;
Experimentele fizicienilor se desfăşoară astfel:&lt;br /&gt;
&lt;br /&gt;
Într-un sistem cu &#039;&#039;&#039;două&#039;&#039;&#039; vase comunicante, gradat identic pe fiecare ramură cu &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;,…, fizicienii introduc un număr de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; lichide, pe ramura din stânga sau pe ramura din dreapta. Volumele introduse din fiecare lichid, notate cu &amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;), sunt numere naturale nenule pare astfel încât, la echilibru, orice lichid se va aşeza între două gradaţii de aceeaşi parte a unei ramuri sau pe cele două ramuri ale sistemului de vase comunicante. Lichidele sunt identificate prin intermediul culorii acestora, culori numerotate cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, … , &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Introducerea lichidelor în sistemul cu două  vase comunicante se face în ordinea crescătoare a numerelor culorilor, începând cu lichidul de culoare &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Scopul experimentului este de a determina gradaţia maximă la care se ridică lichidele în sistemul cu două vase comunicante, precum şi între ce gradaţii se găseşte un lichid de culoare &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, dintre cele introduse.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă în sistemul cu două vase comunicante se introduc &amp;lt;code&amp;gt;n=3&amp;lt;/code&amp;gt; lichide în ordinea: &amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;=4&amp;lt;/code&amp;gt; lichid de culoare &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; introdus prin ramura din dreapta (operaţie codificată &amp;lt;code&amp;gt;4 D&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;=4&amp;lt;/code&amp;gt; lichid de culoare &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; introdus prin ramura din stânga (operaţie codificată &amp;lt;code&amp;gt;4 S&amp;lt;/code&amp;gt;) şi &amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;3&amp;lt;/sub&amp;gt;=2&amp;lt;/code&amp;gt; lichid de culoare &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; introdus prin ramura din stânga (operaţie codificată &amp;lt;code&amp;gt;2 S&amp;lt;/code&amp;gt;) atunci gradaţia maximă la care se ridică nivelul lichidelor în sistemul cu două vase comunicante este &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, iar lichidul de culoare &amp;lt;code&amp;gt;x=2&amp;lt;/code&amp;gt; se găseşte între gradaţiile:  &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; pe ramura  din stânga (&amp;lt;code&amp;gt;3 S&amp;lt;/code&amp;gt;) şi &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; pe ramura din dreapta (&amp;lt;code&amp;gt;1 D&amp;lt;/code&amp;gt;), conform figurii alăturate.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Să se scrie un program care cunoscând numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; de lichide introduse în sistemul cu două vase comunicante, volumul &amp;lt;code&amp;gt;V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; şi ramura prin care se face introducerea lichidului de culoare &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;), precum şi culoarea &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, să calculeze gradaţia maximă la care se ridică lichidele în acest sistem la echilibru şi între ce gradaţii se găseşte lichidul de culoare &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Prima linie a fişierului de intrare &amp;lt;code&amp;gt;vase1.in&amp;lt;/code&amp;gt; conţine un singur număr natural nenul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, cu semnificaţia de mai sus. Fiecare linie, din următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, conţine câte două valori separate printr-un spaţiu: un număr natural nenul par şi o literă mare, &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;, reprezentând volumul introdus din lichidul de culoare &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;, respectiv ramura (&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; pentru ramura din stânga şi &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; pentru ramura din dreapta) prin care se face introducerea acestuia. Linia &amp;lt;code&amp;gt;n+2&amp;lt;/code&amp;gt; a fişierului de intrare conţine un singur număr nenul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; ce reprezintă culoarea lichidului căutat.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;vase1.out&amp;lt;/code&amp;gt; va conţine pe prima linie un număr natural nenul ce reprezintă gradaţia maximă la care se ridică lichidele în sistemul de vase comunicante la echilibru. Următoarele două linii vor conţine fiecare câte două valori separate printr-un spaţiu: un număr natural şi o literă mare (&amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;), reprezentând gradaţia şi ramura între care se aşează lichidul căutat.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ x  ≤ n  ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ V&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 100 000&amp;lt;/code&amp;gt; pentru &amp;lt;code&amp;gt;1 ≤ i ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
* sistemul de vase este gradat în aceleaşi unităţi de măsură în care sunt exprimate volumele de lichid;&lt;br /&gt;
* dacă lichidul căutat, de culoare &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, se aşează pe aceeaşi ramură se va afişa întâi gradaţia superioară şi apoi cea inferioară;&lt;br /&gt;
* dacă lichidul căutat, de culoare &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, se aşează pe ramuri diferite se va afişa întâi gradaţia de pe ramura din stânga şi apoi cea de pe ramura din dreapta;&lt;br /&gt;
* dacă una dintre gradaţiile între care se situează lichidul căutat, de culoare &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, este &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; atunci se consideră că aceasta gradaţie se găseşte pe aceeaşi ramură cu cealaltă gradaţie;&lt;br /&gt;
* pentru rezolvarea primei cerinţe se acordă 20% din punctaj, iar pentru a doua cerinţă 80% din punctaj.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;vase1.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
 4 D&lt;br /&gt;
 4 S&lt;br /&gt;
 2 S&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;code&amp;gt;vase1.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
 3 S&lt;br /&gt;
 1 D&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Se introduc &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; lichide în sistemul de două vase comunicante:&lt;br /&gt;
&lt;br /&gt;
* primul cu volumul &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, se introduce prin dreapta şi are culoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;;&lt;br /&gt;
* al doilea cu volumul  &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, se introduce prin stânga şi are culoarea &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;;&lt;br /&gt;
* al treilea cu volumul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, se introduce prin stânga şi are culoarea &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
Se caută gradaţiile ce corespund lichidului de culoare &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Gradaţia maximă la care ajunge nivelul lichidului este &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Lichidul  de culoare &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; se aşează între gradaţiile &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; pe ramura din stânga şi &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; pe ramura din dreapta.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
nmax = 100001&lt;br /&gt;
&lt;br /&gt;
class Lichid:&lt;br /&gt;
    def __init__(self, cantitate, ramura, culoare):&lt;br /&gt;
        self.cant = cantitate&lt;br /&gt;
        self.ram = ramura&lt;br /&gt;
        self.cul = culoare&lt;br /&gt;
&lt;br /&gt;
st = [None] * nmax&lt;br /&gt;
dr = [None] * nmax&lt;br /&gt;
vst = 0&lt;br /&gt;
vdr = 0&lt;br /&gt;
&lt;br /&gt;
f = open(&amp;quot;vase1.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
g = open(&amp;quot;vase1.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    i = 0&lt;br /&gt;
    n = 0&lt;br /&gt;
    x = 0&lt;br /&gt;
    z = 0&lt;br /&gt;
    mij = 0&lt;br /&gt;
    l1 = 0&lt;br /&gt;
    l2 = 0&lt;br /&gt;
    h1 = 0&lt;br /&gt;
    h2 = 0&lt;br /&gt;
    gasit = 0&lt;br /&gt;
    s = 0&lt;br /&gt;
    l1r = &#039; &#039;&lt;br /&gt;
    l2r = &#039; &#039;&lt;br /&gt;
&lt;br /&gt;
    n = int(f.readline())&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        line = f.readline().split()&lt;br /&gt;
        x = int(line[0])&lt;br /&gt;
        c = line[1]&lt;br /&gt;
        s += x&lt;br /&gt;
        if c == &#039;S&#039;:&lt;br /&gt;
            vst += 1&lt;br /&gt;
            st[vst] = Lichid(x, c, i)&lt;br /&gt;
        elif c == &#039;D&#039;:&lt;br /&gt;
            vdr += 1&lt;br /&gt;
            dr[vdr] = Lichid(x, c, i)&lt;br /&gt;
    &lt;br /&gt;
    z = int(f.readline())&lt;br /&gt;
&lt;br /&gt;
    mij = s // 2&lt;br /&gt;
    h1 = mij&lt;br /&gt;
    gasit = 0&lt;br /&gt;
&lt;br /&gt;
    while h1 &amp;gt; -mij and vst &amp;gt; 0 and not gasit:&lt;br /&gt;
        if st[vst].cul == z:&lt;br /&gt;
            if h1 &amp;lt; 0:&lt;br /&gt;
                l1 = -h1&lt;br /&gt;
                l1r = &#039;D&#039;&lt;br /&gt;
            else:&lt;br /&gt;
                l1 = h1&lt;br /&gt;
                l1r = &#039;S&#039;&lt;br /&gt;
            if h1 - st[vst].cant &amp;lt; 0:&lt;br /&gt;
                l2 = -(h1 - st[vst].cant)&lt;br /&gt;
                l2r = &#039;D&#039;&lt;br /&gt;
            else:&lt;br /&gt;
                l2 = h1 - st[vst].cant&lt;br /&gt;
                l2r = &#039;S&#039;&lt;br /&gt;
            gasit = 1&lt;br /&gt;
        h1 -= st[vst].cant&lt;br /&gt;
        vst -= 1&lt;br /&gt;
&lt;br /&gt;
    h2 = mij&lt;br /&gt;
&lt;br /&gt;
    while h2 &amp;gt; -mij and vdr &amp;gt; 0 and not gasit:&lt;br /&gt;
        if dr[vdr].cul == z:&lt;br /&gt;
            if h2 &amp;lt; 0:&lt;br /&gt;
                l1 = -h2&lt;br /&gt;
                l1r = &#039;S&#039;&lt;br /&gt;
            else:&lt;br /&gt;
                l1 = h2&lt;br /&gt;
                l1r = &#039;D&#039;&lt;br /&gt;
            if h2 - dr[vdr].cant &amp;lt; 0:&lt;br /&gt;
                l2 = -(h2 - dr[vdr].cant)&lt;br /&gt;
                l2r = &#039;S&#039;&lt;br /&gt;
            else:&lt;br /&gt;
                l2 = h2 - dr[vdr].cant&lt;br /&gt;
                l2r = &#039;D&#039;&lt;br /&gt;
            gasit = 1&lt;br /&gt;
        h2 -= dr[vdr].cant&lt;br /&gt;
        vdr -= 1&lt;br /&gt;
    &lt;br /&gt;
    if l1 == 0:&lt;br /&gt;
        l1r = l2r&lt;br /&gt;
    if l2 == 0:&lt;br /&gt;
        l2r = l1r&lt;br /&gt;
&lt;br /&gt;
    g.write(str(mij) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if l1r == &#039;D&#039; and l2r == &#039;S&#039;:&lt;br /&gt;
        g.write(str(l2) + &amp;quot; &amp;quot; + l2r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        g.write(str(l1) + &amp;quot; &amp;quot; + l1r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    elif l1r == &#039;S&#039; and l2r == &#039;D&#039;:&lt;br /&gt;
        g.write(str(l1) + &amp;quot; &amp;quot; + l1r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        g.write(str(l2) + &amp;quot; &amp;quot; + l2r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    elif l1 &amp;gt; l2:&lt;br /&gt;
        g.write(str(l1) + &amp;quot; &amp;quot; + l1r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        g.write(str(l2) + &amp;quot; &amp;quot; + l2r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        g.write(str(l2) + &amp;quot; &amp;quot; + l2r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        g.write(str(l1) + &amp;quot; &amp;quot; + l1r + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    f.close()&lt;br /&gt;
    g.close()&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1072_-_Magic&amp;diff=9642</id>
		<title>1072 - Magic</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1072_-_Magic&amp;diff=9642"/>
		<updated>2024-02-13T15:00:10Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Rămaşi singuri în pădure, Hansel şi Grettel, ştiu că singura lor şansă de supravieţuire este să găsească şi să intre în Castelul de Turtă Dulce. Poarta castelului este închisă şi pentru a intra este nevoie de un cuvânt magic şi de un număr fermecat.  Zâna cea Bună îi vede pe copii şi pentru că vrea să–i ajute le spune:   „Mergeţi tot înainte, iar în drumul vostru o să întâlniţi copaci pe a căror trunchiuri sunt scrise caractere repreze...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Rămaşi singuri în pădure, Hansel şi Grettel, ştiu că singura lor şansă de supravieţuire este să găsească şi să intre în Castelul de Turtă Dulce. Poarta castelului este închisă şi pentru a intra este nevoie de un cuvânt magic şi de un număr fermecat.&lt;br /&gt;
&lt;br /&gt;
Zâna cea Bună îi vede pe copii şi pentru că vrea să–i ajute le spune: &lt;br /&gt;
&lt;br /&gt;
„Mergeţi tot înainte, iar în drumul vostru o să întâlniţi copaci pe a căror trunchiuri sunt scrise caractere reprezentând litere sau cifre. Cuvântul magic este format din toate caracterele literă în ordinea în care apar, dar scrise toate cu majuscule. Numărul fermecat este cel mai mic număr cu cifre distincte care se poate forma din caracterele cifră.”&lt;br /&gt;
&lt;br /&gt;
= Cerinţe: =&lt;br /&gt;
Pentru a-i ajuta pe Hansel şi Grettel să intre în Castelul de Turtă Dulce, scrieţi un program care citeşte un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, apoi &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; caractere şi determină:&lt;br /&gt;
&lt;br /&gt;
a) cuvântul magic; &lt;br /&gt;
&lt;br /&gt;
b) numărul fermecat;&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
un număr natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, reprezentând numărul de caractere scrise pe copaci. Pe cea de a doua linie sunt &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; caractere separate prin câte un spaţiu, reprezentând caracterele scrise pe copaci.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;magic.out&amp;lt;/code&amp;gt; va conținedouă linii:&lt;br /&gt;
&lt;br /&gt;
a) pe prima linie se va scrie un şir de litere mari, reprezentând cuvântul magic; &lt;br /&gt;
&lt;br /&gt;
b) pe a doua linie se va scrie un număr natural cu cifre distincte, reprezentând numărul fermecat.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Caracterele sunt doar cifre sau litere mici ale alfabetului englez.&lt;br /&gt;
* Printre cele n caractere se află întotdeauna cel puțin o literă şi cel puţin o cifră.&lt;br /&gt;
* Pe fiecare copac este scris un singur caracter.&lt;br /&gt;
* Numărul magic începe întotdeauna cu o cifră diferită de zero.&lt;br /&gt;
* Pentru rezolvarea cerinţei a) se acordă 40% din punctaj, pentru cerinţa b) 60% din punctaj&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;magic.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 c 2 5 5 b 2&lt;br /&gt;
&amp;lt;code&amp;gt;magic.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 CB&lt;br /&gt;
 25&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cel mai mic număr cu cifre distincte ce se poate obţine este &amp;lt;code&amp;gt;25&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;magic.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 8&lt;br /&gt;
 c a 5 0 b 2 5 d&lt;br /&gt;
&amp;lt;code&amp;gt;magic.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 CABD&lt;br /&gt;
 205&lt;br /&gt;
&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Cel mai mic număr cu cifre distincte ce se poate obţine este &amp;lt;code&amp;gt;205&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import string&lt;br /&gt;
&lt;br /&gt;
with open(&#039;magic.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
    n = int(f.readline().strip())&lt;br /&gt;
    s = [&#039;&#039;] * (n + 1)  # Adjusting index to start from 1&lt;br /&gt;
    c = [0] * 10&lt;br /&gt;
    ncifre = 0&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        s[i] = f.readline().strip().upper()&lt;br /&gt;
        if s[i].isdigit():&lt;br /&gt;
            ncifre += 1&lt;br /&gt;
            c[int(s[i])] += 1&lt;br /&gt;
&lt;br /&gt;
with open(&#039;magic.out&#039;, &#039;w&#039;) as g:&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        if s[i] in string.ascii_uppercase:&lt;br /&gt;
            g.write(s[i])&lt;br /&gt;
    g.write(&#039;\n&#039;)&lt;br /&gt;
    i = 1&lt;br /&gt;
    while c[i] == 0:&lt;br /&gt;
        i += 1&lt;br /&gt;
    if c[0]:&lt;br /&gt;
        g.write(f&amp;quot;{i}0&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        g.write(f&amp;quot;{i}&amp;quot;)&lt;br /&gt;
    for j in range(i + 1, 10):&lt;br /&gt;
        if c[j]:&lt;br /&gt;
            g.write(f&amp;quot;{j}&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1075_-_Grad_1&amp;diff=9641</id>
		<title>1075 - Grad 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1075_-_Grad_1&amp;diff=9641"/>
		<updated>2024-02-13T14:57:34Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Se consideră un şir &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale distincte, două câte două. Pentru o secvenţă de &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; numere &amp;lt;code&amp;gt;(x&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;p+1&amp;lt;/sub&amp;gt;, ..., x&amp;lt;sub&amp;gt;p+k-1&amp;lt;/sub&amp;gt;)&amp;lt;/code&amp;gt;, care începe cu numărul de pe poziţia &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; din şirul dat, definim gradul său ca fiind numărul de numere din secvenţă, care rămân pe aceleaşi poziţii după ordonarea cres...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră un şir &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale distincte, două câte două. Pentru o secvenţă de &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; numere &amp;lt;code&amp;gt;(x&amp;lt;sub&amp;gt;p&amp;lt;/sub&amp;gt;, x&amp;lt;sub&amp;gt;p+1&amp;lt;/sub&amp;gt;, ..., x&amp;lt;sub&amp;gt;p+k-1&amp;lt;/sub&amp;gt;)&amp;lt;/code&amp;gt;, care începe cu numărul de pe poziţia &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; din şirul dat, definim gradul său ca fiind numărul de numere din secvenţă, care rămân pe aceleaşi poziţii după ordonarea crescătoare a secvenţei. De exemplu, pentru &amp;lt;code&amp;gt;n=7&amp;lt;/code&amp;gt; şi şirul  format din numerele:  &amp;lt;code&amp;gt;1, 5, 7, 4, 6, 2, 9&amp;lt;/code&amp;gt;,  secvenţa formată din  numerele &amp;lt;code&amp;gt;7, 4, 6, 2&amp;lt;/code&amp;gt; (corespunzătoare lui &amp;lt;code&amp;gt;p=3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;k=4&amp;lt;/code&amp;gt;) are gradul egal cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; deoarece, după ordonarea crescătoare a numerelor din secvenţă, aceasta devine &amp;lt;code&amp;gt;2, 4, 6, 7&amp;lt;/code&amp;gt;, numerele &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; rămânând pe aceleaşi poziţii.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Scrieţi un program care citeşte numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, cu semnificaţia din enunţ, şi apoi determină:&lt;br /&gt;
&lt;br /&gt;
a) gradul întregului şir de numere;&lt;br /&gt;
&lt;br /&gt;
b) poziţia primului element din prima secvenţă de lungime &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; ce are gradul maxim, precum şi gradul acestei secvenţe.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;grad1.in&amp;lt;/code&amp;gt; conține pe prima linie numerele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, separate printr-un spaţiu, iar pe linia următoare &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale distincte &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;x&amp;lt;sub&amp;gt;n&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, corespunzătoare şirului de numere, 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 &amp;lt;code&amp;gt;grad1.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural reprezentând gradul întregului şir de numere, iar pe următoarea linie două numere naturale, separate printr-un singur spaţiu, primul număr reprezentând poziţia primului element din prima secvenţă de lungime &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; ce are grad maxim şi cel de-al doilea număr reprezentând gradul acestei secvenţe.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; n &amp;lt; 10001&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; k &amp;lt; n+1&amp;lt;/code&amp;gt;&lt;br /&gt;
* Numerele din şir sunt numere naturale strict mai mici decât &amp;lt;code&amp;gt;32000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* O secvenţă de numere din şir reprezintă o succesiune de numere din acel şir, aflate pe poziţii consecutive.&lt;br /&gt;
* Gradul întregului şir de numere este egal cu gradul secvenţei de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere care începe cu numărul de pe poziţia &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi conţine toate cele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere din şir.&lt;br /&gt;
* Pentru rezolvarea corectă a subpunctului a)  se obţine 40% din punctaj.&lt;br /&gt;
* Pentru rezolvarea corectă a subpunctului b)  se obţine 60% din punctaj.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;grad1.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 7 4&lt;br /&gt;
 1 5 7 4 6 2 9&lt;br /&gt;
&amp;lt;code&amp;gt;grad1.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
 3 2&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
După ordonare, şirul &amp;lt;code&amp;gt;1 5 7 4 6 2 9&amp;lt;/code&amp;gt; devine &amp;lt;code&amp;gt;1 2 4 5 6 7 9&amp;lt;/code&amp;gt;, pe aceleaşi poziţii rămân &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, deci gradul întregului şir este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Avem patru secvenţe cu câte 4 elemente:&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 5 7 4&amp;lt;/code&amp;gt;, care are gradul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;5 7 4 6&amp;lt;/code&amp;gt;, care are gradul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;7 4 6 2&amp;lt;/code&amp;gt;, care are primul număr pe poziţia &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; și gradul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* &amp;lt;code&amp;gt;4 6 2 9&amp;lt;/code&amp;gt;, care are gradul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def read_input(filename):&lt;br /&gt;
    with open(filename, &#039;r&#039;) as fin:&lt;br /&gt;
        n, k = map(int, fin.readline().split())&lt;br /&gt;
        x = [0] + [int(num) for num in fin.readline().split()]&lt;br /&gt;
    return n, k, x&lt;br /&gt;
&lt;br /&gt;
def sort_subarray(y, n):&lt;br /&gt;
    sorted = False&lt;br /&gt;
    while not sorted:&lt;br /&gt;
        sorted = True&lt;br /&gt;
        for i in range(1, n):&lt;br /&gt;
            if y[i] &amp;gt; y[i + 1]:&lt;br /&gt;
                y[i], y[i + 1] = y[i + 1], y[i]&lt;br /&gt;
                sorted = False&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, k, x = read_input(&amp;quot;grad1.in&amp;quot;)&lt;br /&gt;
    y = x.copy()&lt;br /&gt;
    sort_subarray(y, n)&lt;br /&gt;
    g = sum(1 for i in range(1, n + 1) if x[i] == y[i])&lt;br /&gt;
    &lt;br /&gt;
    with open(&amp;quot;grad1.out&amp;quot;, &#039;w&#039;) as fout:&lt;br /&gt;
        fout.write(f&amp;quot;{g}\n&amp;quot;)&lt;br /&gt;
        &lt;br /&gt;
        y = x[1:k+1]&lt;br /&gt;
        sort_subarray(y, k)&lt;br /&gt;
        gmax = sum(1 for i in range(1, k + 1) if x[i] == y[i])&lt;br /&gt;
        pmax = 1&lt;br /&gt;
        &lt;br /&gt;
        for i in range(2, n - k + 2):&lt;br /&gt;
            j = 1&lt;br /&gt;
            while j &amp;lt;= k and y[j] != x[i - 1]:&lt;br /&gt;
                j += 1&lt;br /&gt;
            if j &amp;lt;= k:&lt;br /&gt;
                y[j] = x[i + k - 1]&lt;br /&gt;
                while j &amp;gt; 1 and y[j - 1] &amp;gt; y[j]:&lt;br /&gt;
                    y[j], y[j - 1] = y[j - 1], y[j]&lt;br /&gt;
                    j -= 1&lt;br /&gt;
                while j &amp;lt; k and y[j] &amp;gt; y[j + 1]:&lt;br /&gt;
                    y[j], y[j + 1] = y[j + 1], y[j]&lt;br /&gt;
                    j += 1&lt;br /&gt;
            &lt;br /&gt;
            gr = sum(1 for j in range(1, k + 1) if y[j] == x[i + j - 1])&lt;br /&gt;
            if gr &amp;gt; gmax:&lt;br /&gt;
                gmax = gr&lt;br /&gt;
                pmax = i&lt;br /&gt;
        &lt;br /&gt;
        fout.write(f&amp;quot;{pmax} {gmax}&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1089_-_Cladiri_1&amp;diff=9640</id>
		<title>1089 - Cladiri 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1089_-_Cladiri_1&amp;diff=9640"/>
		<updated>2024-02-13T14:55:18Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Institutul de Fizică a Pământului studiază efectele unui potenţial cutremur folosind simulări computerizate. Harta plană a clădirilor de pe un teritoriu oarecare este reprezentată folosind coordonatele GPS în plan, longitudine şi latitudine, faţă de un reper considerat de coordonate &amp;lt;code&amp;gt;(0,0)&amp;lt;/code&amp;gt;, ca în figura de mai jos.  Fiecare dintre clădirile aflate pe hartă, au două coordonate GPS, (Longitudine, Latitudine) şi un Grad de rezistenţă la cutremure....&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Institutul de Fizică a Pământului studiază efectele unui potenţial cutremur folosind simulări computerizate. Harta plană a clădirilor de pe un teritoriu oarecare este reprezentată folosind coordonatele GPS în plan, longitudine şi latitudine, faţă de un reper considerat de coordonate &amp;lt;code&amp;gt;(0,0)&amp;lt;/code&amp;gt;, ca în figura de mai jos.&lt;br /&gt;
&lt;br /&gt;
Fiecare dintre clădirile aflate pe hartă, au două coordonate GPS, (Longitudine, Latitudine) şi un Grad de rezistenţă la cutremure.&lt;br /&gt;
&lt;br /&gt;
Un cutremur se poate produce în orice punct de coordonate de pe hartă, numit centrul seismului şi are o anumită intensitate. Unda de şoc se propagă sub forma unor pătrate concentrice cu centrul seismului, numite nivele (nivelul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; reprezintă centrul seismului, nivelul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; primul pătrat concentric, nivelul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; al doilea pătrat concentric şi aşa mai departe). Intensitatea slăbeşte la fiecare pătrat concentric cu centrul seismului cu câte o unitate. Clădirile sunt afectate de cutremur doar dacă gradul lor de rezistenţă la cutremur este mai mic sau egal cu intensitatea cutremurului în poziţia clădirii.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care să citească coordonatele centrului seismului şi intensitatea sa în acel punct, precum şi coordonatele clădirilor şi gradul lor de rezistenţă la cutremur, şi apoi să determine:&lt;br /&gt;
&lt;br /&gt;
a) numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; total de clădiri afectate;&lt;br /&gt;
&lt;br /&gt;
b) numărul &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; maxim de clădiri afectate pe un nivel;&lt;br /&gt;
&lt;br /&gt;
c) numerele nivelelor cu &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; clădiri afectate, în ordinea crescătoare a numerelor acestor nivele.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;cladiri1.in&amp;lt;/code&amp;gt; conține:&lt;br /&gt;
&lt;br /&gt;
* pe prima linie, trei numere naturale &amp;lt;code&amp;gt;Long Lat Intensitate&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând coordonatele centrului seismului şi respectiv intensitatea sa;&lt;br /&gt;
* pe fiecare dintre următoarele linii, până la sfârşitul fişierului, câte &amp;lt;code&amp;gt;trei&amp;lt;/code&amp;gt; numere naturale  &amp;lt;code&amp;gt;Long Lat Grad&amp;lt;/code&amp;gt;,  separate prin câte un spaţiu, reprezentând coordonatele unei clădiri, respectiv gradul de rezistenţă la cutremur.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;cladiri1.out&amp;lt;/code&amp;gt; va conține trei linii:&lt;br /&gt;
&lt;br /&gt;
* pe prima linie se va scrie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; reprezentând numărul total de clădiri afectate;&lt;br /&gt;
* pe a doua linie se va scrie numărul natural &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; reprezentând numărul maxim de clădiri afectate pe un nivel;&lt;br /&gt;
* pe a treia linie se vor scrie numerele nivelelor cu &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; clădiri afectate, în ordinea crescătoare a numerelor acestor nivele.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ Long, Lat, Grad, Intensitate ≤ 10000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt;&amp;lt;/code&amp;gt;  număr clădiri &amp;lt;code&amp;gt;≤ 100000&amp;lt;/code&amp;gt;&lt;br /&gt;
* în centrul seismului se pot afla clădiri;&lt;br /&gt;
* nu există mai multe clădiri cu aceleaşi coordonate;&lt;br /&gt;
&lt;br /&gt;
= Exemplu =&lt;br /&gt;
&amp;lt;code&amp;gt;cladiri1.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 12 7 11&lt;br /&gt;
 10 9 2&lt;br /&gt;
 10 7 3&lt;br /&gt;
 13 5 1&lt;br /&gt;
 8 11 4&lt;br /&gt;
 8 7 6&lt;br /&gt;
 15 4 3&lt;br /&gt;
 15 9 10&lt;br /&gt;
 13 10 1&lt;br /&gt;
 16 8 4&lt;br /&gt;
&amp;lt;code&amp;gt;cladiri1.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 8&lt;br /&gt;
 3&lt;br /&gt;
 2 4&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; total al clădirilor afectate este &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Numărul &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; maxim de clădiri afectate pe acelaşi nivel este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi este atins pe nivelele &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
# Initialize the arrays with zeros&lt;br /&gt;
a = [0] * 10001&lt;br /&gt;
b = [0] * 10001&lt;br /&gt;
&lt;br /&gt;
# Open the input file&lt;br /&gt;
with open(&#039;cladiri1.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
    cx, cy, g = map(int, f.readline().split())&lt;br /&gt;
    nr = 0&lt;br /&gt;
&lt;br /&gt;
    # Process each line in the file&lt;br /&gt;
    for line in f:&lt;br /&gt;
        x, y, rez = map(int, line.split())&lt;br /&gt;
        max_dist = max(abs(cx - x), abs(cy - y))&lt;br /&gt;
        if g - max_dist &amp;gt; 0 and rez - (g - max_dist) &amp;lt;= 0:&lt;br /&gt;
            nr += 1&lt;br /&gt;
            a[max_dist] += 1&lt;br /&gt;
&lt;br /&gt;
# Find the maximum value and its indices&lt;br /&gt;
max_value = -1&lt;br /&gt;
k = 0&lt;br /&gt;
for i in range(10001):&lt;br /&gt;
    if max_value == a[i]:&lt;br /&gt;
        k += 1&lt;br /&gt;
        b[k] = i&lt;br /&gt;
    elif max_value &amp;lt; a[i]:&lt;br /&gt;
        max_value = a[i]&lt;br /&gt;
        k = 1&lt;br /&gt;
        b[k] = i&lt;br /&gt;
&lt;br /&gt;
# Open the output file&lt;br /&gt;
with open(&#039;cladiri1.outtxt&#039;, &#039;w&#039;) as ff:&lt;br /&gt;
    ff.write(str(nr) + &#039;\n&#039;)&lt;br /&gt;
    ff.write(str(max_value) + &#039;\n&#039;)&lt;br /&gt;
    if nr != 0:&lt;br /&gt;
        for i in range(1, k + 1):&lt;br /&gt;
            ff.write(str(b[i]) + &#039; &#039;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1085_-_Loto&amp;diff=9639</id>
		<title>1085 - Loto</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1085_-_Loto&amp;diff=9639"/>
		<updated>2024-02-13T14:52:24Z</updated>

		<summary type="html">&lt;p&gt;Raul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La Loteria Naţională există &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; bile inscripţionate cu numere naturale, nenule, distincte de cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre. Şeful de la loterie primeşte o cutie în care se află cele &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; bile extrase la ultima rundă, restul bilelor neextrase fiind puse într-un seif. Deoarece are o fire poznaşă, el scoate din cutie bila pe care este înscris numărul cel mai mic şi o păstrează în buzunarul hainei sale. În locul ei va pune o bilă neextrasă, aflată în seif,  având numărul cel mai apropiat de aceasta. Apoi continuă operaţia şi scoate din cutie şi bila pe care este înscris numărul maxim extras iniţial, pe care o va pune în celălalt buzunar al său. De asemenea o va înlocui cu o altă bilă neextrasă iniţial,  aflată în seif, având numărul cel mai apropiat de aceasta.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Realizaţi un program care afişează în ordine crescătoare numerele de pe bilele aflate în cutie după modificările făcute de şef.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;loto.in&amp;lt;/code&amp;gt; conține numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pe a doua linie cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale scrise pe bile, iar pe a treia linie cele 6 numere naturale scrise pe bilele extrase de angajaţii loteriei. Valorile scrise pe aceeaşi linie sunt separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;loto.out&amp;lt;/code&amp;gt; se vor afişa pe prima linie, separate prin câte un spaţiu, cele 6 numere obţinute în cutie după modificările făcute de şef, în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;8 &amp;lt; N &amp;lt; 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Dacă o bilă poate fi înlocuită cu două bile la fel de apropiate de ea, atunci aceasta se va înlocui cu bila având numărul mai mare.&lt;br /&gt;
* Pentru datele de test, atât bila cu numărul cel mai mic, cât şi bila cu numărul cel mai mare pot fi înlocuite cu alte bile.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;loto.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 10&lt;br /&gt;
 231 212 32 123 453 675 1321 54 67 567&lt;br /&gt;
 212 32 67 567 675 1321&lt;br /&gt;
&amp;lt;code&amp;gt;loto.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 54 67 212 453 567 675&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python2&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
n = int(input())&lt;br /&gt;
a = [False] * 10001&lt;br /&gt;
b = [0] * 6&lt;br /&gt;
&lt;br /&gt;
for _ in range(n):&lt;br /&gt;
    x = int(input())&lt;br /&gt;
    a[x] = True&lt;br /&gt;
&lt;br /&gt;
max_value = 0&lt;br /&gt;
min_value = 10000&lt;br /&gt;
mx = 0&lt;br /&gt;
mn = 0&lt;br /&gt;
&lt;br /&gt;
for i in range(6):&lt;br /&gt;
    b[i] = int(input())&lt;br /&gt;
    a[b[i]] = False&lt;br /&gt;
    if b[i] &amp;lt; min_value:&lt;br /&gt;
        min_value = b[i]&lt;br /&gt;
        mn = i&lt;br /&gt;
    if b[i] &amp;gt; max_value:&lt;br /&gt;
        max_value = b[i]&lt;br /&gt;
        mx = i&lt;br /&gt;
&lt;br /&gt;
i = min_value&lt;br /&gt;
j = min_value&lt;br /&gt;
while not (a[i] or a[j]):&lt;br /&gt;
    if i &amp;lt; 10000:&lt;br /&gt;
        i += 1&lt;br /&gt;
    if j &amp;gt; 1:&lt;br /&gt;
        j -= 1&lt;br /&gt;
&lt;br /&gt;
if a[i]:&lt;br /&gt;
    b[mn] = i&lt;br /&gt;
else:&lt;br /&gt;
    b[mn] = j&lt;br /&gt;
a[b[mn]] = False&lt;br /&gt;
&lt;br /&gt;
i = max_value&lt;br /&gt;
j = max_value&lt;br /&gt;
while not (a[i] or a[j]):&lt;br /&gt;
    if i &amp;lt; 10000:&lt;br /&gt;
        i += 1&lt;br /&gt;
    if j &amp;gt; 1:&lt;br /&gt;
        j -= 1&lt;br /&gt;
&lt;br /&gt;
if a[i]:&lt;br /&gt;
    b[mx] = i&lt;br /&gt;
else:&lt;br /&gt;
    b[mx] = j&lt;br /&gt;
&lt;br /&gt;
# Sorting the array b&lt;br /&gt;
b.sort()&lt;br /&gt;
&lt;br /&gt;
for i in range(5):&lt;br /&gt;
    print(b[i], end=&#039; &#039;)&lt;br /&gt;
print(b[5])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1085_-_Loto&amp;diff=9638</id>
		<title>1085 - Loto</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1085_-_Loto&amp;diff=9638"/>
		<updated>2024-02-13T14:51:03Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: La Loteria Naţională există &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; bile inscripţionate cu numere naturale, nenule, distincte de cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre. Şeful de la loterie primeşte o cutie în care se află cele &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; bile extrase la ultima rundă, restul bilelor neextrase fiind puse într-un seif. Deoarece are o fire poznaşă, el scoate din cutie bila pe care este înscris numărul cel mai mic şi o păstrează în buzunarul hainei sale. În locul ei va pune o bilă neextras...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La Loteria Naţională există &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; bile inscripţionate cu numere naturale, nenule, distincte de cel mult &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre. Şeful de la loterie primeşte o cutie în care se află cele &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; bile extrase la ultima rundă, restul bilelor neextrase fiind puse într-un seif. Deoarece are o fire poznaşă, el scoate din cutie bila pe care este înscris numărul cel mai mic şi o păstrează în buzunarul hainei sale. În locul ei va pune o bilă neextrasă, aflată în seif,  având numărul cel mai apropiat de aceasta. Apoi continuă operaţia şi scoate din cutie şi bila pe care este înscris numărul maxim extras iniţial, pe care o va pune în celălalt buzunar al său. De asemenea o va înlocui cu o altă bilă neextrasă iniţial,  aflată în seif, având numărul cel mai apropiat de aceasta.&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Realizaţi un program care afişează în ordine crescătoare numerele de pe bilele aflate în cutie după modificările făcute de şef.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;loto.in&amp;lt;/code&amp;gt; conține numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, pe a doua linie cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale scrise pe bile, iar pe a treia linie cele 6 numere naturale scrise pe bilele extrase de angajaţii loteriei. Valorile scrise pe aceeaşi linie sunt separate prin spaţii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;loto.out&amp;lt;/code&amp;gt; se vor afişa pe prima linie, separate prin câte un spaţiu, cele 6 numere obţinute în cutie după modificările făcute de şef, în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;8 &amp;lt; N &amp;lt; 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Dacă o bilă poate fi înlocuită cu două bile la fel de apropiate de ea, atunci aceasta se va înlocui cu bila având numărul mai mare.&lt;br /&gt;
* Pentru datele de test, atât bila cu numărul cel mai mic, cât şi bila cu numărul cel mai mare pot fi înlocuite cu alte bile.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;loto.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 10&lt;br /&gt;
 231 212 32 123 453 675 1321 54 67 567&lt;br /&gt;
 212 32 67 567 675 1321&lt;br /&gt;
&amp;lt;code&amp;gt;loto.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 54 67 212 453 567 675&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
n = int(input())&lt;br /&gt;
a = [False] * 10001&lt;br /&gt;
b = [0] * 6&lt;br /&gt;
&lt;br /&gt;
for _ in range(n):&lt;br /&gt;
    x = int(input())&lt;br /&gt;
    a[x] = True&lt;br /&gt;
&lt;br /&gt;
max_value = 0&lt;br /&gt;
min_value = 10000&lt;br /&gt;
mx = 0&lt;br /&gt;
mn = 0&lt;br /&gt;
&lt;br /&gt;
for i in range(6):&lt;br /&gt;
    b[i] = int(input())&lt;br /&gt;
    a[b[i]] = False&lt;br /&gt;
    if b[i] &amp;lt; min_value:&lt;br /&gt;
        min_value = b[i]&lt;br /&gt;
        mn = i&lt;br /&gt;
    if b[i] &amp;gt; max_value:&lt;br /&gt;
        max_value = b[i]&lt;br /&gt;
        mx = i&lt;br /&gt;
&lt;br /&gt;
i = min_value&lt;br /&gt;
j = min_value&lt;br /&gt;
while not (a[i] or a[j]):&lt;br /&gt;
    if i &amp;lt; 10000:&lt;br /&gt;
        i += 1&lt;br /&gt;
    if j &amp;gt; 1:&lt;br /&gt;
        j -= 1&lt;br /&gt;
&lt;br /&gt;
if a[i]:&lt;br /&gt;
    b[mn] = i&lt;br /&gt;
else:&lt;br /&gt;
    b[mn] = j&lt;br /&gt;
a[b[mn]] = False&lt;br /&gt;
&lt;br /&gt;
i = max_value&lt;br /&gt;
j = max_value&lt;br /&gt;
while not (a[i] or a[j]):&lt;br /&gt;
    if i &amp;lt; 10000:&lt;br /&gt;
        i += 1&lt;br /&gt;
    if j &amp;gt; 1:&lt;br /&gt;
        j -= 1&lt;br /&gt;
&lt;br /&gt;
if a[i]:&lt;br /&gt;
    b[mx] = i&lt;br /&gt;
else:&lt;br /&gt;
    b[mx] = j&lt;br /&gt;
&lt;br /&gt;
# Sorting the array b&lt;br /&gt;
b.sort()&lt;br /&gt;
&lt;br /&gt;
for i in range(5):&lt;br /&gt;
    print(b[i], end=&#039; &#039;)&lt;br /&gt;
print(b[5])&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1080_-_Livada&amp;diff=9637</id>
		<title>1080 - Livada</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1080_-_Livada&amp;diff=9637"/>
		<updated>2024-02-13T14:48:17Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Norocosul Gigel tocmai a primit în dar de la bunicul său, Nelu, o imensă plantaţie de pomi fructiferi. Fost profesor de geometrie, Nelu a plantat în mod riguros pomii fructiferi pe &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; rânduri paralele, iar pe fiecare rând a plantat exact câte &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; pomi fructiferi. Însă, din motive mai mult sau mai puţin obiective, domnul Nelu nu a plantat pe fiecare rând toţi pomii de acelaşi soi, ci din mai multe soiuri diferite. Soiurile de pomi plantaţi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Norocosul Gigel tocmai a primit în dar de la bunicul său, Nelu, o imensă plantaţie de pomi fructiferi. Fost profesor de geometrie, Nelu a plantat în mod riguros pomii fructiferi pe &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; rânduri paralele, iar pe fiecare rând a plantat exact câte &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; pomi fructiferi. Însă, din motive mai mult sau mai puţin obiective, domnul Nelu nu a plantat pe fiecare rând toţi pomii de acelaşi soi, ci din mai multe soiuri diferite. Soiurile de pomi plantaţi în livadă sunt codificate cu numere  naturale cuprinse între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Cuprins de febra rigurozităţii matematice şi de cea a statisticii, Gigel a definit noţiunea de soi majoritar astfel: dacă pe un rând &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; format din &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; pomi fructiferi avem cel puţin &amp;lt;code&amp;gt;[n/2]+1&amp;lt;/code&amp;gt; pomi de acelaşi soi &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt;, atunci spunem că soiul &amp;lt;code&amp;gt;x&amp;lt;/code&amp;gt; este soi majoritar pe rândul &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; (prin &amp;lt;code&amp;gt;[y]&amp;lt;/code&amp;gt; se înţelege partea întreagă a numărului real &amp;lt;code&amp;gt;y&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Cunoscând numerele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt;,  precum şi soiul fiecărui pom de pe fiecare rând al plantaţiei, ajutaţi-l pe Gigel să determine:&lt;br /&gt;
&lt;br /&gt;
# pe câte rânduri din livadă există un soi majoritar;&lt;br /&gt;
# care este cel mai mare număr de pomi de acelaşi soi plantaţi în poziţii consecutive pe un rând.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;livada.in&amp;lt;/code&amp;gt; conține pe prima linie trei numere naturale &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;p&amp;lt;/code&amp;gt; cu semnificaţia din enunţ, iar pe fiecare dintre următoarele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; linii se găsesc câte &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere, despărţite prin câte un spaţiu, reprezentând soiurile pomilor de pe rândul respectiv.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;livada.out&amp;lt;/code&amp;gt; va conține două linii:&lt;br /&gt;
&lt;br /&gt;
# pe prima linie se va scrie un număr natural reprezentând numărul de rânduri din livadă pe care există un soi majoritar;&lt;br /&gt;
# pe a doua linie se va scrie un număr natural reprezentând cel mai mare număr de pomi de același soi plantaţi în poziţii consecutive pe un rând.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 700.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m*n ≤ 700.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ p ≤ 998.560.000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pe fiecare rând diferenţa dintre valoarea maximă şi cea minimă este cel mult &amp;lt;code&amp;gt;250.000&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Dacă doar valoarea de pe prima linie este corectă, se acordă 40% din punctaj. Dacă doar valoarea de pe a doua linie este corectă, se acordă 60% din punctaj. Dacă ambele valori sunt corecte, se acordă 100% din punctajul testului respectiv.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;livada.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 7 9&lt;br /&gt;
 2 1 2 3 8 2 2&lt;br /&gt;
 4 7 2 4 9 7 4&lt;br /&gt;
 5 5 2 5 5 5 7&lt;br /&gt;
 2 3 2 3 2 3 1&lt;br /&gt;
&amp;lt;code&amp;gt;livada.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Plantaţia este formată din &amp;lt;code&amp;gt;m=4&amp;lt;/code&amp;gt; rânduri, iar pe fiecare rând avem câte &amp;lt;code&amp;gt;n=7&amp;lt;/code&amp;gt; pomi.&lt;br /&gt;
&lt;br /&gt;
Pentru ca un soi sa fie majoritar pe un rând trebuie ca pe acel rând să existe cel puţin &amp;lt;code&amp;gt;[7/2]+1 = 4&amp;lt;/code&amp;gt; pomi din soiul respectiv.&lt;br /&gt;
&lt;br /&gt;
Există soiuri majoritare pe două rânduri: primul şi al treilea.&lt;br /&gt;
&lt;br /&gt;
Pe rândul al treilea exista &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; poziții consecutive în care se află pomi din același soi (soiul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def read_ints_from_file(file):&lt;br /&gt;
    return list(map(int, file.readline().split()))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;livada.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        m, n, p = read_ints_from_file(fin)&lt;br /&gt;
        max_length = 0&lt;br /&gt;
        rsm = 0&lt;br /&gt;
        for i in range(m):&lt;br /&gt;
            v = read_ints_from_file(fin)&lt;br /&gt;
            rmax = 0&lt;br /&gt;
            j = 0&lt;br /&gt;
            while j &amp;lt; n - 1:&lt;br /&gt;
                k = j + 1&lt;br /&gt;
                while k &amp;lt; n and v[k] == v[j]:&lt;br /&gt;
                    k += 1&lt;br /&gt;
                if k - j &amp;gt; rmax:&lt;br /&gt;
                    rmax = k - j&lt;br /&gt;
                j = k&lt;br /&gt;
            if rmax &amp;gt; max_length:&lt;br /&gt;
                max_length = rmax&lt;br /&gt;
            sm = v[0]&lt;br /&gt;
            cnt = 1&lt;br /&gt;
            for j in range(1, n):&lt;br /&gt;
                if cnt == 0:&lt;br /&gt;
                    sm = v[j]&lt;br /&gt;
                    cnt = 1&lt;br /&gt;
                elif v[j] == sm:&lt;br /&gt;
                    cnt += 1&lt;br /&gt;
                else:&lt;br /&gt;
                    cnt -= 1&lt;br /&gt;
            if cnt == 0:&lt;br /&gt;
                sm = 0&lt;br /&gt;
            else:&lt;br /&gt;
                cnt = sum(1 for x in v if x == sm)&lt;br /&gt;
                if cnt &amp;lt; n // 2 + 1:&lt;br /&gt;
                    sm = 0&lt;br /&gt;
            if sm != 0:&lt;br /&gt;
                rsm += 1&lt;br /&gt;
    with open(&amp;quot;livada.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(f&amp;quot;{rsm}\n{max_length}&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1096_-_Expresie_8&amp;diff=9636</id>
		<title>1096 - Expresie 8</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1096_-_Expresie_8&amp;diff=9636"/>
		<updated>2024-02-13T14:42:46Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Costel are de rezolvat o temă grea la matematică: având la dispoziţie &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule trebuie să aşeze între acestea &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; operaţii de înmulţire şi &amp;lt;code&amp;gt;N-3&amp;lt;/code&amp;gt; operaţii de adunare, astfel încât rezultatul calculelor să fie cel mai mare posibil. Nu este permisă modificarea ordinii numerelor date.  De exemplu, dacă &amp;lt;code&amp;gt;N=5&amp;lt;/code&amp;gt; şi numerele sunt &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Costel are de rezolvat o temă grea la matematică: având la dispoziţie &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule trebuie să aşeze între acestea &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; operaţii de înmulţire şi &amp;lt;code&amp;gt;N-3&amp;lt;/code&amp;gt; operaţii de adunare, astfel încât rezultatul calculelor să fie cel mai mare posibil. Nu este permisă modificarea ordinii numerelor date.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă &amp;lt;code&amp;gt;N=5&amp;lt;/code&amp;gt; şi numerele sunt &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;,  operaţiile pot fi aşezate &amp;lt;code&amp;gt;4+7*1+5*3&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;4*7*1+5+3&amp;lt;/code&amp;gt;, e.t.c&lt;br /&gt;
&lt;br /&gt;
= Cerinţă =&lt;br /&gt;
Scrieţi un program care să aşeze două operaţii de înmulţire şi &amp;lt;code&amp;gt;N-3&amp;lt;/code&amp;gt; operaţii de adunare între cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori date astfel încât valoarea expresiei obţinute să fie maximă.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;expresie8.in&amp;lt;/code&amp;gt; are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
* Pe prima linie se află un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul elementelor date.&lt;br /&gt;
* Pe următoarele linii se află cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale date, fiecare pe câte o linie.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;expresie8.out&amp;lt;/code&amp;gt; va conține pe prima linie valoarea maximă obţinută prin evaluarea expresiei.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;4 &amp;lt;= N &amp;lt;= 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Numerele date sunt numere naturale între &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;10000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;expresie8.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
 4&lt;br /&gt;
 7&lt;br /&gt;
 1&lt;br /&gt;
 5&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;code&amp;gt;expresie8.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 44&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Valoarea maximă se obţine prin aşezarea operaţiilor sub forma: &amp;lt;code&amp;gt;4 * 7 + 1 + 5*3&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
with open(&amp;quot;expresie8.in&amp;quot;, &amp;quot;r&amp;quot;) as fin, open(&amp;quot;expresie8.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
    n = int(fin.readline())&lt;br /&gt;
    v = list(map(int, fin.readline().split()))&lt;br /&gt;
    &lt;br /&gt;
    s = 0&lt;br /&gt;
    Max = 0&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        s += v[i]&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, n-1):&lt;br /&gt;
        cc = s - v[i] - v[i+1] - v[i+2] + (v[i] * v[i+1] * v[i+2])&lt;br /&gt;
        if cc &amp;gt; Max:&lt;br /&gt;
            Max = cc&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, n-2):&lt;br /&gt;
        for j in range(i+2, n):&lt;br /&gt;
            cc = s - v[i] - v[i+1] - v[j] - v[j+1] + (v[i] * v[i+1]) + (v[j] * v[j+1])&lt;br /&gt;
            if cc &amp;gt; Max:&lt;br /&gt;
                Max = cc&lt;br /&gt;
                &lt;br /&gt;
    fout.write(str(Max) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2175_-_Factori&amp;diff=9625</id>
		<title>2175 - Factori</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2175_-_Factori&amp;diff=9625"/>
		<updated>2024-02-12T15:30:12Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Gigel a aflat la matematică definiţia factorialului unui număr natural nenul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Acesta este produsul tuturor numerelor naturale începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi terminând cu numărul respectiv şi se notează cu &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;. Astfel, factorialul numărului natural &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;6!=1*2*3*4*5*6&amp;lt;/code&amp;gt; şi este egal cu &amp;lt;code&amp;gt;720&amp;lt;/code&amp;gt;. Factorialele numerelor naturale cresc însă extrem de repede. De exemplu, &amp;lt;code&amp;gt;7!=5040&amp;lt;/code&amp;gt; în timp ce &amp;lt;cod...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gigel a aflat la matematică definiţia factorialului unui număr natural nenul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;. Acesta este produsul tuturor numerelor naturale începând cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi terminând cu numărul respectiv şi se notează cu &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;. Astfel, factorialul numărului natural &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;6!=1*2*3*4*5*6&amp;lt;/code&amp;gt; şi este egal cu &amp;lt;code&amp;gt;720&amp;lt;/code&amp;gt;. Factorialele numerelor naturale cresc însă extrem de repede. De exemplu, &amp;lt;code&amp;gt;7!=5040&amp;lt;/code&amp;gt; în timp ce &amp;lt;code&amp;gt;10!=3628800&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fiind un bun matematician, Gigel a imaginat o altă metodă de a indica factorialul unui număr. Astfel, el ştie că un număr natural nenul se poate descompune în factori primi. De exemplu &amp;lt;code&amp;gt;720&amp;lt;/code&amp;gt; poate fi scris ca &amp;lt;code&amp;gt;2&amp;lt;sup&amp;gt;4&amp;lt;/sup&amp;gt;*3&amp;lt;sup&amp;gt;2&amp;lt;/sup&amp;gt;*5&amp;lt;sup&amp;gt;1&amp;lt;/sup&amp;gt;&amp;lt;/code&amp;gt;.  Gigel codifică descompunerea în factori primi astfel: &amp;lt;code&amp;gt;4 2 1&amp;lt;/code&amp;gt; însemnând faptul că în descompunerea lui &amp;lt;code&amp;gt;720&amp;lt;/code&amp;gt; în factori primi apare factorul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; de &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; ori, factorul &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; apare de două ori şi factorul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; apare o dată. Cu alte cuvinte, Gigel indică pentru fiecare număr prim &amp;lt;code&amp;gt;≤ n&amp;lt;/code&amp;gt; puterea la care acesta apare în descompunerea în factori primi a lui &amp;lt;code&amp;gt;n!&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care să citească o secvenţă de numere naturale nenule şi care să afişeze în modul descris în enunţ factorialele numerelor citite.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;factori.in&amp;lt;/code&amp;gt; conţine mai multe numere naturale nenule, câte un număr pe linie. Ultima linie a fişierului de intrare conţine valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; indicând faptul că setul de numere s-a terminat.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;factori.out&amp;lt;/code&amp;gt; va conţine câte o linie pentru fiecare număr nenul din fişierul de intrare. Pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; din fişierul de ieşire va fi descrisă descompunerea în factori primi a factorialului numărului de pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; din fişierul de intrare, în modul descris în enunţ. Numerele scrise pe aceeaşi linie vor fi separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
Numerele naturale din fişierul de intrare (exceptând ultimul) sunt din intervalul &amp;lt;code&amp;gt;[2, 60000]&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Fişierul de intrare conţine maxim &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; numere naturale nenule.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;factori.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 8&lt;br /&gt;
 15&lt;br /&gt;
 10&lt;br /&gt;
 0&lt;br /&gt;
&amp;lt;code&amp;gt;factori.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 7 2 1 1&lt;br /&gt;
 11 6 3 2 1 1&lt;br /&gt;
 8 4 2 1&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
&amp;lt;code&amp;gt;2! = 2&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;8! = 2*2*2*2*2*2*2*3*3*5*7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;15! = 2*2*2*2*2*2*2*2*2*2*2*3*3*3*3*3*3*5*5*5*7*7*11*13&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;10! = 2*2*2*2*2*2*2*2*3*3*3*3*5*5*7&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1575_-_Paritate_OJI&amp;diff=9624</id>
		<title>1575 - Paritate OJI</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1575_-_Paritate_OJI&amp;diff=9624"/>
		<updated>2024-02-12T15:26:13Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: În vederea asigurării unei transmiteri cât mai exacte a informaţiilor pe reţea, transmiterea se efectuează caracter cu caracter, fiecare caracter fiind dat prin codul său ASCII, adică o grupă de &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; biţi (octet).  Pentru fiecare &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; biţi transmişi se calculează un bit de paritate care are valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (dacă codul ASCII al caracterului conţine un număr par de cifre binare &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) sau &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (în caz contrar). Deo...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;În vederea asigurării unei transmiteri cât mai exacte a informaţiilor pe reţea, transmiterea se efectuează caracter cu caracter, fiecare caracter fiind dat prin codul său ASCII, adică o grupă de &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; biţi (octet).  Pentru fiecare &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; biţi transmişi se calculează un bit de paritate care are valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; (dacă codul ASCII al caracterului conţine un număr par de cifre binare &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;) sau &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; (în caz contrar). Deoarece în problema noastră se transmit numai caractere ASCII standard, cu codul ASCII din intervalul &amp;lt;code&amp;gt;[32,127]&amp;lt;/code&amp;gt;, codul lor ASCII are bitul &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; (primul bit din stânga) egal cu &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Pe această poziţie va fi pus bitul de paritate, economisind astfel câte un bit pentru fiecare caracter transmis.&lt;br /&gt;
&lt;br /&gt;
De exemplu, dacă mesajul care trebuie transmis conţine caracterele &amp;lt;code&amp;gt;Paritate&amp;lt;/code&amp;gt;, succesiunea de biţi transmisă va fi:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;01010000 11100001 01110010 01101001 01110100 11100001 01110100 01100101&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
În plus, pe lângă caracterele amintite, în mesaj mai poate să apară un caracterul special, caracter care indică trecerea la începutul unui nou rând. Acest caracter are codul ASCII 10.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Să se scrie un program care să verifice dacă un text a fost sau nu transmis corect.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare paritate.in are pe prima linie o succesiune de caractere &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; care reprezintă mesajul transmis. Între caractere nu există spaţii. Linia se termină cu caracterul marcaj de sfârşit de linie (newline).&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul de ieşire paritate.out are pe prima linie mesajul &amp;lt;code&amp;gt;DA&amp;lt;/code&amp;gt; dacă textul a fost transmis corect sau &amp;lt;code&amp;gt;NU&amp;lt;/code&amp;gt; în caz contrar. În cazul în care mesajul de pe prima linie este &amp;lt;code&amp;gt;DA&amp;lt;/code&amp;gt; liniile următoare vor conţine textul transmis în clar. În cazul în care mesajul de pe prima linie este &amp;lt;code&amp;gt;NU&amp;lt;/code&amp;gt; linia următoare va conţine numerele de ordine ale caracterelor care nu au fost transmise corect, în ordine strict crescătoare, separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* Cei &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; biţi ai codului ASCII a unui caracter se numerotează de la &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, de la dreapta la stânga, cel mai din stânga bit fiind bitul &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; iar cel mai din dreapta bitul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Textul transmis are cel mult &amp;lt;code&amp;gt;60.000&amp;lt;/code&amp;gt; caractere.&lt;br /&gt;
* Numărul de caractere &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; din prima linie a fişierului de intrare este multiplu de &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Codurile ASCII ale caracterelor din text aparţin mulţimii &amp;lt;code&amp;gt;{10, 32–127}&amp;lt;/code&amp;gt;, codul &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; însemnând trecerea la începutul unui rând nou.&lt;br /&gt;
* Nici o linie din fişierul de ieşire nu va avea mai mult de &amp;lt;code&amp;gt;255&amp;lt;/code&amp;gt; caractere.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;paritate.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 0101000011100001011100100110100101110100111000010111010001100101&lt;br /&gt;
&amp;lt;code&amp;gt;paritate.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 DA&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Toate codurile sunt corecte.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
in_file = open(&amp;quot;paritate.intxt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
out_file = open(&amp;quot;paritate.outtxt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
raj = [0] * 60001&lt;br /&gt;
rong = [0] * 60001&lt;br /&gt;
&lt;br /&gt;
wrong = False&lt;br /&gt;
ctr = 0&lt;br /&gt;
rong_ctr = 0&lt;br /&gt;
&lt;br /&gt;
while True:&lt;br /&gt;
    nr1 = 0&lt;br /&gt;
    t = 0&lt;br /&gt;
    bin_val = in_file.read(1)&lt;br /&gt;
    if not bin_val:&lt;br /&gt;
        break&lt;br /&gt;
    if bin_val == &#039;1&#039;:&lt;br /&gt;
        nr1 += 1&lt;br /&gt;
    for i in range(6, -1, -1):&lt;br /&gt;
        bin_val = in_file.read(1)&lt;br /&gt;
        if bin_val == &#039;1&#039;:&lt;br /&gt;
            nr1 += 1&lt;br /&gt;
            t += pow(2, i)&lt;br /&gt;
    if nr1 % 2:&lt;br /&gt;
        wrong = True&lt;br /&gt;
        rong[rong_ctr] = ctr&lt;br /&gt;
        rong_ctr += 1&lt;br /&gt;
    if not wrong:&lt;br /&gt;
        raj[ctr] = t&lt;br /&gt;
    ctr += 1&lt;br /&gt;
&lt;br /&gt;
if wrong:&lt;br /&gt;
    out_file.write(&amp;quot;NU\n&amp;quot;)&lt;br /&gt;
    for i in range(rong_ctr):&lt;br /&gt;
        out_file.write(str(rong[i]) + &amp;quot; &amp;quot;)&lt;br /&gt;
else:&lt;br /&gt;
    out_file.write(&amp;quot;DA\n&amp;quot;)&lt;br /&gt;
    for i in range(ctr - 1):&lt;br /&gt;
        if raj[i] == 10:&lt;br /&gt;
            out_file.write(&#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            out_file.write(str(raj[i]))&lt;br /&gt;
&lt;br /&gt;
intxt_file.close()&lt;br /&gt;
outtxt_file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1215_-_Mesaj&amp;diff=9623</id>
		<title>1215 - Mesaj</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1215_-_Mesaj&amp;diff=9623"/>
		<updated>2024-02-12T15:19:16Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: În țara lui Piticot cuvintele au doar două litere, prima fiind o majusculă (literă mare) iar a doua o minusculă (literă mică). Piticii &amp;#039;&amp;#039;Mi&amp;#039;&amp;#039; și &amp;#039;&amp;#039;Gi&amp;#039;&amp;#039; se distrează și își trimit mesaje ascunzând cuvintele în cadrul unor secvențe transmise sub forma unor șiruri de litere. Piticul &amp;#039;&amp;#039;Mi&amp;#039;&amp;#039; scrie și trimite un mesaj piticului &amp;#039;&amp;#039;Gi&amp;#039;&amp;#039; respectând următoarele reguli:  * un mesaj conține una sau mai multe secvențe; * orice literă care apare în mesaj, de cel pu...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;În țara lui Piticot cuvintele au doar două litere, prima fiind o majusculă (literă mare) iar a doua o minusculă (literă mică). Piticii &#039;&#039;Mi&#039;&#039; și &#039;&#039;Gi&#039;&#039; se distrează și își trimit mesaje ascunzând cuvintele în cadrul unor secvențe transmise sub forma unor șiruri de litere. Piticul &#039;&#039;Mi&#039;&#039; scrie și trimite un mesaj piticului &#039;&#039;Gi&#039;&#039; respectând următoarele reguli:&lt;br /&gt;
&lt;br /&gt;
* un mesaj conține una sau mai multe secvențe;&lt;br /&gt;
* orice literă care apare în mesaj, de cel puțin două ori, pe poziții alăturate, este numită terminator;&lt;br /&gt;
* o secvență se  încheie când s-a întâlnit o succesiune de litere terminator;&lt;br /&gt;
* cuvântul este format din prima majusculă și ultima minusculă din secvență, fără a lua în seamă litera terminator a secvenței;&lt;br /&gt;
* o secvență ascunde un cuvânt dacă terminatorul său se repetă de exact două ori și dacă conține cel puțin o literă mare și o literă mică, ignorând terminatorul de secvență;&lt;br /&gt;
* costul unui cuvânt este egal cu numărul total de apariții al celor două litere din care este format, în cadrul secvenței în care a fost ascuns, luând în considerare inclusiv literele terminator.&lt;br /&gt;
&lt;br /&gt;
De exemplu secvența  &amp;lt;code&amp;gt;s f u E e t R u E E&amp;lt;/code&amp;gt; ascunde un cuvânt deoarece conține și majuscule și minuscule, iar litera terminator de secvență,  &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt;, se repetă de exact două ori. Secvența ascunde cuvântul &amp;lt;code&amp;gt;Eu&amp;lt;/code&amp;gt;, iar costul cuvântului este &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; litere &amp;lt;code&amp;gt;E&amp;lt;/code&amp;gt; + &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; două litere &amp;lt;code&amp;gt;u&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
La primirea mesajului, piticul &#039;&#039;Gi&#039;&#039; determină, pentru fiecare majusculă, costul maxim al cuvintelor care încep cu aceasta.&lt;br /&gt;
&lt;br /&gt;
= Cerinţe =&lt;br /&gt;
Scrieţi un program care determină:&lt;br /&gt;
&lt;br /&gt;
1) numărul de secvențe trimise care nu ascund cuvinte;&lt;br /&gt;
&lt;br /&gt;
2) cuvintele din mesaj, în ordinea în care au fost trimise de piticul &#039;&#039;Mi&#039;&#039;; &lt;br /&gt;
&lt;br /&gt;
3) pentru fiecare majusculă, câte cuvinte care încep cu ea au costul maxim determinat de &#039;&#039;Gi&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
fi afișate în ordine de la &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt;, însă doar cele pentru care au existat în mesaj cuvinte care au început cu ele.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;mesaj.in&amp;lt;/code&amp;gt; conţine pe prima linie un număr natural &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;. Pentru toate testele de intrare, numărul &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; poate avea numai una dintre valorile &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Pe a doua linie a fișierului de intrare se găsește  numărul natural N reprezentând numărul de litere folosite de &#039;&#039;Mi&#039;&#039; pentru scrierea mesajului. Pe a treia linie se găsesc &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; litere mari și mici ale alfabetului englez, separate prin câte un spațiu, reprezentând literele mesajului, în ordinea în care au fost trimise.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, se va rezolva numai punctul 1) din cerințe. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;mesaj.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural reprezentând răspunsul la cerinţa 1).&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, se va rezolva numai punctul 2) din cerințe. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;mesaj.out&amp;lt;/code&amp;gt; va conține cuvintele din mesaj, fiecare cuvânt scris pe câte o linie, în ordinea în care au fost trimise.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, se va rezolva numai punctul 3) din cerințe. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;mesaj.out&amp;lt;/code&amp;gt; va conține pe fiecare linie câte o majusculă urmată de un număr natural nenul, separate printr-un spațiu. Majusculele vor fi afișate în ordine de la &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt;, însă doar cele pentru care au existat în mesaj cuvinte care au început cu ele.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 2000000&amp;lt;/code&amp;gt;&lt;br /&gt;
* litera terminator a unei secvențe poate fi ori minusculă ori majusculă;&lt;br /&gt;
* ultimele litere din fișier sunt literele terminator ale ultimei secvențe din mesajul trimis; se garantează că în șirul de litere din fișierul de intrare se află ascuns cel puțin un cuvânt;&lt;br /&gt;
* majusculele alfabetului englez sunt &amp;lt;code&amp;gt;A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z&amp;lt;/code&amp;gt;;&lt;br /&gt;
* pentru 50% din teste &amp;lt;code&amp;gt;N ≤ 1000000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru rezolvarea cerinţei 1) se acordă 20 de puncte, pentru rezolvarea cerinţei 2) se acordă 40 de puncte, iar pentru rezolvarea cerinţei 3) se acordă 40 de puncte.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;mesaj.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 34&lt;br /&gt;
 w w w w e D o r F D o r r t R n e R e y y j j i M &lt;br /&gt;
&lt;br /&gt;
 o e i t t t j w w&lt;br /&gt;
&amp;lt;code&amp;gt;mesaj.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Textul conține șase secvențe:&lt;br /&gt;
&lt;br /&gt;
# &amp;lt;code&amp;gt;w w w w&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;e D o r F D o r r&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;t R n e R e y y&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;j j&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;i M o e i t t t&amp;lt;/code&amp;gt;&lt;br /&gt;
# &amp;lt;code&amp;gt;j w w&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Sunt &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; secvențe care nu ascund cuvinte:&lt;br /&gt;
&lt;br /&gt;
* prima secvență și a patra deoarece conțin numai terminatorul;&lt;br /&gt;
* secvența a cincea nu se decodifică deoarece terminatorul se repetă de mai mult de două ori;&lt;br /&gt;
* secvența a șasea nu conține majuscule.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import string&lt;br /&gt;
&lt;br /&gt;
in_file = open(&amp;quot;mesaj.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
out_file = open(&amp;quot;mesaj.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
maj_counts = [0] * 256&lt;br /&gt;
min_counts = [0] * 256&lt;br /&gt;
max_cost = [0] * 256&lt;br /&gt;
max_cost_counts = [0] * 256&lt;br /&gt;
&lt;br /&gt;
P = int(in_file.readline())&lt;br /&gt;
N = int(in_file.readline())&lt;br /&gt;
&lt;br /&gt;
num_secvente = 0&lt;br /&gt;
num_secvente_cu_cuvinte = 0&lt;br /&gt;
&lt;br /&gt;
ch = &#039;#&#039;&lt;br /&gt;
count_ch = 1&lt;br /&gt;
&lt;br /&gt;
maj_ch = &#039;#&#039;&lt;br /&gt;
min_ch = &#039;#&#039;&lt;br /&gt;
&lt;br /&gt;
for i in range(N):&lt;br /&gt;
    peek_ch = in_file.read(1)&lt;br /&gt;
    if i == N - 1:&lt;br /&gt;
        peek_ch = &#039;#&#039;&lt;br /&gt;
&lt;br /&gt;
    if ch == peek_ch:&lt;br /&gt;
        count_ch += 1&lt;br /&gt;
    else:&lt;br /&gt;
        if count_ch == 1:&lt;br /&gt;
            if P == 1 or P == 2 or P == 3:&lt;br /&gt;
                if ch.isupper() and maj_ch == &#039;#&#039;:&lt;br /&gt;
                    maj_ch = ch&lt;br /&gt;
                if ch.islower():&lt;br /&gt;
                    min_ch = ch&lt;br /&gt;
            if P == 3:&lt;br /&gt;
                if ch.isupper():&lt;br /&gt;
                    maj_counts[ord(ch)] += 1&lt;br /&gt;
                if ch.islower():&lt;br /&gt;
                    min_counts[ord(ch)] += 1&lt;br /&gt;
&lt;br /&gt;
        elif count_ch == 2:&lt;br /&gt;
            if P == 1:&lt;br /&gt;
                num_secvente += 1&lt;br /&gt;
                if maj_ch != &#039;#&#039; and min_ch != &#039;#&#039;:&lt;br /&gt;
                    num_secvente_cu_cuvinte += 1&lt;br /&gt;
                maj_ch = min_ch = &#039;#&#039;&lt;br /&gt;
            elif P == 2:&lt;br /&gt;
                if maj_ch != &#039;#&#039; and min_ch != &#039;#&#039;:&lt;br /&gt;
                    out_file.write(maj_ch + min_ch + &#039;\n&#039;)&lt;br /&gt;
                maj_ch = min_ch = &#039;#&#039;&lt;br /&gt;
            elif P == 3:&lt;br /&gt;
                if ch.isupper():&lt;br /&gt;
                    maj_counts[ord(ch)] += 2&lt;br /&gt;
                if ch.islower():&lt;br /&gt;
                    min_counts[ord(ch)] += 2&lt;br /&gt;
                if maj_ch != &#039;#&#039; and min_ch != &#039;#&#039;:&lt;br /&gt;
                    cost = maj_counts[ord(maj_ch)] + min_counts[ord(min_ch)]&lt;br /&gt;
                    if cost &amp;gt; max_cost[ord(maj_ch)]:&lt;br /&gt;
                        max_cost[ord(maj_ch)] = cost&lt;br /&gt;
                        max_cost_counts[ord(maj_ch)] = 1&lt;br /&gt;
                    elif cost == max_cost[ord(maj_ch)]:&lt;br /&gt;
                        max_cost_counts[ord(maj_ch)] += 1&lt;br /&gt;
                maj_ch = min_ch = &#039;#&#039;&lt;br /&gt;
                maj_counts = [0] * 256&lt;br /&gt;
                min_counts = [0] * 256&lt;br /&gt;
&lt;br /&gt;
        else:&lt;br /&gt;
            if P == 1:&lt;br /&gt;
                num_secvente += 1&lt;br /&gt;
                maj_ch = min_ch = &#039;#&#039;&lt;br /&gt;
            elif P == 2:&lt;br /&gt;
                maj_ch = min_ch = &#039;#&#039;&lt;br /&gt;
            elif P == 3:&lt;br /&gt;
                maj_ch = min_ch = &#039;#&#039;&lt;br /&gt;
                maj_counts = [0] * 256&lt;br /&gt;
                min_counts = [0] * 256&lt;br /&gt;
&lt;br /&gt;
        count_ch = 1&lt;br /&gt;
        ch = peek_ch&lt;br /&gt;
&lt;br /&gt;
if P == 1:&lt;br /&gt;
    out_file.write(str(num_secvente - num_secvente_cu_cuvinte) + &#039;\n&#039;)&lt;br /&gt;
elif P == 3:&lt;br /&gt;
    for ch in string.ascii_uppercase:&lt;br /&gt;
        if max_cost[ord(ch)]:&lt;br /&gt;
            out_file.write(ch + &#039; &#039; + str(max_cost_counts[ord(ch)]) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
in_file.close()&lt;br /&gt;
out_file.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1123_-_Iepurasi&amp;diff=9622</id>
		<title>1123 - Iepurasi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1123_-_Iepurasi&amp;diff=9622"/>
		<updated>2024-02-12T15:13:25Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Se construieşte un şir de numere naturale care respectă restricţiile:  * primul număr din şir este &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;; * numerele se generează în ordine strict crescătoare; * şirul conţine toate numerele formate doar cu cifrele &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; cu proprietatea că numărul cifrelor &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; este mai mare sau egal decât numărul cifrelor &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; şi numărul cifrelor &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; este mai mare sau egal decât numărul cif...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se construieşte un şir de numere naturale care respectă restricţiile:&lt;br /&gt;
&lt;br /&gt;
* primul număr din şir este &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;;&lt;br /&gt;
* numerele se generează în ordine strict crescătoare;&lt;br /&gt;
* şirul conţine toate numerele formate doar cu cifrele &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; cu proprietatea că numărul cifrelor &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; este mai mare sau egal decât numărul cifrelor &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; şi numărul cifrelor &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt; este mai mare sau egal decât numărul cifrelor &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;. Primii &amp;lt;code&amp;gt;14&amp;lt;/code&amp;gt; termeni ai şirului, în ordine, sunt:  &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;89&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;98&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;99&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;789&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;798&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;879&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;897&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;899&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;978&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;987&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;989&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;998&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;999&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Pornind de la aceste numere, Liv a inventat un joc interactiv: &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; iepuraşi sunt aşezaţi în şir, fiecare având câte un cartonaş. Fiecare cartonaş are două feţe, o faţă albă pe care este inscripţionat un număr din acest şir şi o faţă gri, pe care este inscripţionată poziţia acelui număr în şir, poziţii numerotate în ordine, începând cu valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Exemple.&#039;&#039;&#039; Cartonaşul care are pe faţa gri inscripţionat numărul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; va avea pe faţa albă inscripţionat numărul &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;, iar cartonaşul care are pe faţa gri inscripţionat numărul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; va avea pe faţa albă inscripţionat numărul &amp;lt;code&amp;gt;789&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Iepuraşii sunt aşezaţi într-o ordine oarecare şi ţin cartonaşele astfel încât să se vadă faţa gri. Jocul constă în a rearanja iepuraşii de la stânga la dreapta, descrescător după numerele inscripţionate pe feţele gri, având la dispoziţie doar operaţia &amp;lt;code&amp;gt;TAP&amp;lt;/code&amp;gt; pe un iepuraş. Când se aplică operaţia &amp;lt;code&amp;gt;TAP&amp;lt;/code&amp;gt; unui iepuraş  atunci secvenţa de iepuraşi,  începând de la cel pe care s-a făcut &amp;lt;code&amp;gt;TAP&amp;lt;/code&amp;gt; şi până la sfârşitul şirului (spre dreapta), este oglindită (ca în imaginea de mai sus). După oglindire, toţi iepuraşii din acea secvenţă ţin cartonaşele astfel încât să se vadă faţa albă. Se doreşte aplicarea unui număr cât mai mic de operaţii TAP pentru rearanjarea iepuraşilor.&lt;br /&gt;
&lt;br /&gt;
= Cerinţe =&lt;br /&gt;
Scrieţi un program care să citească numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; (reprezentând numărul de iepuraşi) şi &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;  (reprezentând, în ordine,  numerele inscripţionate pe feţele gri) și care să determine:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Numărul minim de operaţii &amp;lt;code&amp;gt;TAP&amp;lt;/code&amp;gt; necesare rearanjării iepuraşilor;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Cel mai mic număr aflat pe o faţă albă care nu se vede, în cazul în care au rămas cartonaşe neîntoarse. Dacă toate cartonaşele au fost întoarse  (la toate fiind vizibilă faţa albă) se va afişa cel mai mare număr aflat pe o faţă albă a unui cartonaş.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;iepurasi.in&amp;lt;/code&amp;gt; conține pe prima linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; reprezentând numărul de iepuraşi. A doua linie a fişierului conţine, în ordine, cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere: &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;&amp;lt;sub&amp;gt;a&amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, separate prin câte un spaţiu, reprezentând în ordine, numerele inscripţionate pe feţele gri ale cartonașelor.&amp;lt;/sub&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;iepurasi.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr reprezentând numărul minim de operaţii &amp;lt;code&amp;gt;TAP&amp;lt;/code&amp;gt; necesare rearanjării iepuraşilor. A doua linie va conține un număr reprezentând cel mai mic număr aflat pe o faţă albă care nu se vede (în cazul în care au rămas cartonaşe neîntoarse), respectiv cel mai mare număr aflat pe o faţă albă a unui cartonaş, în cazul în care toate cartonaşele au fost întoarse (la toate fiind vizibilă faţa albă).&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ N ≤ 10000&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 10000&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1≤i≤N&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;N, a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; sunt numere naturale;&lt;br /&gt;
* pentru rezolvarea cerinţei a) se acordă 50% din punctaj, iar pentru cerinţa b) se acordă 50% din punctaj.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;iepurasi.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5 &lt;br /&gt;
 14 5 8 9 10&lt;br /&gt;
&amp;lt;code&amp;gt;iepurasi.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 999&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Se aplică o singură operaţie &amp;lt;code&amp;gt;TAP&amp;lt;/code&amp;gt; pe iepuraşul cu numărul de ordine &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;. Cartonaşul neîntors are numărul de ordine &amp;lt;code&amp;gt;14&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;999&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
f = open(&amp;quot;iepurasi.txtin&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
g = open(&amp;quot;iepurasi.txtout&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
toate = [0] * 200001&lt;br /&gt;
ncurent = 0&lt;br /&gt;
N = 0&lt;br /&gt;
a = [0] * 10001&lt;br /&gt;
dim_sir = 0&lt;br /&gt;
TAP = 0&lt;br /&gt;
nr1 = 0&lt;br /&gt;
nr2 = 0&lt;br /&gt;
viz = [False] * 10001&lt;br /&gt;
fr7 = [0] * 200001&lt;br /&gt;
fr8 = [0] * 200001&lt;br /&gt;
fr9 = [0] * 200001&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global N, a, TAP, viz&lt;br /&gt;
    i = 0&lt;br /&gt;
    j = 0&lt;br /&gt;
    k = 0&lt;br /&gt;
    maxi = 0&lt;br /&gt;
    imax = 0&lt;br /&gt;
    aux = 0&lt;br /&gt;
    c7 = 0&lt;br /&gt;
    c8 = 0&lt;br /&gt;
    c9 = 0&lt;br /&gt;
&lt;br /&gt;
    #citire&lt;br /&gt;
    N = int(f.readline())&lt;br /&gt;
    a = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    #sortare descrescatoare&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        imax = i&lt;br /&gt;
        maxi = a[i]&lt;br /&gt;
        for j in range(i + 1, N + 1):&lt;br /&gt;
            if a[j] &amp;gt; maxi:&lt;br /&gt;
                maxi = a[j]&lt;br /&gt;
                imax = j&lt;br /&gt;
        if imax != i:&lt;br /&gt;
            if a[N] != maxi:&lt;br /&gt;
                TAP += 1&lt;br /&gt;
                #TAP pe iepurasul imax&lt;br /&gt;
                for j in range(imax, k, -1):&lt;br /&gt;
                    aux = a[j]&lt;br /&gt;
                    a[j] = a[k]&lt;br /&gt;
                    a[k] = aux&lt;br /&gt;
                    viz[j] = True&lt;br /&gt;
                    viz[k] = True&lt;br /&gt;
            #TAP pe iepurasul i&lt;br /&gt;
            if a[i] != maxi:&lt;br /&gt;
                TAP += 1&lt;br /&gt;
                for j in range(i, k, -1):&lt;br /&gt;
                    aux = a[j]&lt;br /&gt;
                    a[j] = a[k]&lt;br /&gt;
                    a[k] = aux&lt;br /&gt;
                    viz[j] = True&lt;br /&gt;
                    viz[k] = True&lt;br /&gt;
&lt;br /&gt;
    #det cartonas minim/maxim&lt;br /&gt;
    if viz[1]:&lt;br /&gt;
        k = a[1]&lt;br /&gt;
    else:&lt;br /&gt;
        i = 1&lt;br /&gt;
        while not viz[i] and i &amp;lt;= N:&lt;br /&gt;
            i += 1&lt;br /&gt;
        k = a[i - 1]&lt;br /&gt;
&lt;br /&gt;
    #constructie sir de numere cu cifrele 7,8,9 pana la numarul de pe pozitia k&lt;br /&gt;
    fr7[1] = 1&lt;br /&gt;
    fr8[2] = 1&lt;br /&gt;
    fr9[3] = 1&lt;br /&gt;
    toate[1] = 7&lt;br /&gt;
    toate[2] = 8&lt;br /&gt;
    toate[3] = 9&lt;br /&gt;
    dim_sir = 0&lt;br /&gt;
    nr1 = 1&lt;br /&gt;
    nr2 = 3&lt;br /&gt;
    while dim_sir &amp;lt; k:&lt;br /&gt;
        c7 = fr7[nr1]&lt;br /&gt;
        c8 = fr8[nr1]&lt;br /&gt;
        c9 = fr9[nr1]&lt;br /&gt;
        ncurent = toate[nr1]&lt;br /&gt;
        nr1 += 1&lt;br /&gt;
        nr2 -= 1&lt;br /&gt;
        if c7 &amp;lt;= c8 and c8 &amp;lt;= c9:&lt;br /&gt;
            dim_sir += 1&lt;br /&gt;
        fr7[nr1 + nr2] = c7 + 1&lt;br /&gt;
        fr8[nr1 + nr2] = c8&lt;br /&gt;
        fr9[nr1 + nr2] = c9&lt;br /&gt;
        toate[nr1 + nr2] = 10 * ncurent + 7&lt;br /&gt;
        nr2 += 1&lt;br /&gt;
        fr7[nr1 + nr2] = c7&lt;br /&gt;
        fr8[nr1 + nr2] = c8 + 1&lt;br /&gt;
        fr9[nr1 + nr2] = c9&lt;br /&gt;
        toate[nr1 + nr2] = 10 * ncurent + 8&lt;br /&gt;
        nr2 += 1&lt;br /&gt;
        fr7[nr1 + nr2] = c7&lt;br /&gt;
        fr8[nr1 + nr2] = c8&lt;br /&gt;
        fr9[nr1 + nr2] = c9 + 1&lt;br /&gt;
        toate[nr1 + nr2] = 10 * ncurent + 9&lt;br /&gt;
        nr2 += 1&lt;br /&gt;
&lt;br /&gt;
    #afisare&lt;br /&gt;
    g.write(str(TAP) + &amp;quot;\n&amp;quot; + str(ncurent) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    f.close()&lt;br /&gt;
    g.close()&lt;br /&gt;
    sys.exit(0)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1147_-_Oni_Gim&amp;diff=9621</id>
		<title>1147 - Oni Gim</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1147_-_Oni_Gim&amp;diff=9621"/>
		<updated>2024-02-12T15:09:21Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: La ONIGIM2013 participă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; elevi de clasa a V-a având ca id-uri, în ordine, numerele naturale  de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Anul acesta organizatorii au afişat la clasa a V-a toate punctajele distincte obţinute de elevi, în ordine strict crescătoare &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;K&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, şi un şir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;La ONIGIM2013 participă &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; elevi de clasa a V-a având ca id-uri, în ordine, numerele naturale  de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;. Anul acesta organizatorii au afişat la clasa a V-a toate punctajele distincte obţinute de elevi, în ordine strict crescătoare &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;K&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, şi un şir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; reprezintă numărul de elevi care au punctaje strict mai mici decât punctajul elevului având id-ul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1≤i≤N&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
= Cerință =&lt;br /&gt;
Cunoscând numărul de elevi (&amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;), numărul de punctaje distincte (&amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;) obţinute de elevii de clasa a V-a,  punctajele &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;K&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, în ordine strict crescătoare, şi valorile &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; cu semnificaţia din enunţ, să se scrie un program care determină:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;a)&#039;&#039;&#039; Punctajul obţinut de fiecare elev în ordinea crescătoare a id-urilor.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;b)&#039;&#039;&#039; Numărul de distincţii acordate de organizatori. Numărul de distincţii este egal cu numărul de elevi care au obţinut cele mai mari trei punctaje distincte.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;c)&#039;&#039;&#039; Numărul maxim de elevi care au obţinut acelaşi punctaj.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;onigim.in&amp;lt;/code&amp;gt; conține pe prima linie numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; reprezentând numărul de elevi, respectiv numărul de punctaje distincte obţinute de elevi. Pe a doua linie sunt &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; numere naturale în ordine strict crescătoare &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;p&amp;lt;sub&amp;gt;K&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; reprezentând punctajele distincte obţinute de elevi, şi pe a treia linie sunt &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, unde  &amp;lt;code&amp;gt;a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; reprezintă numărul de elevi care au punctaje strict mai mici decât punctajul elevului cu id-ul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;onigim.out&amp;lt;/code&amp;gt; va conține trei linii. Pe prima linie se află &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;v&amp;lt;sub&amp;gt;1&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;v&amp;lt;sub&amp;gt;2&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;v&amp;lt;sub&amp;gt;N&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt; reprezentând punctajele obţinute de cei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; concurenţi (&amp;lt;code&amp;gt;v&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt;&amp;lt;/code&amp;gt;- punctajul concurentului cu id-ul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;), pe a doua linie se află un număr natural &amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt; reprezentând numărul de distincţii acordate de organizatori, pe a treia linie se află un număr natural &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; reprezentând numărul maxim de elevi care au obţinut acelaşi punctaj.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 1000&amp;lt;/code&amp;gt;;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ p&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; ≤ 300&amp;lt;/code&amp;gt;, (&amp;lt;code&amp;gt;1≤i≤N&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ a&amp;lt;sub&amp;gt;i&amp;lt;/sub&amp;gt; &amp;lt; 1000&amp;lt;/code&amp;gt;, (&amp;lt;code&amp;gt;1≤i≤N&amp;lt;/code&amp;gt;);&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ 1000&amp;lt;/code&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;onigim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6 4&lt;br /&gt;
 100 150 175 200&lt;br /&gt;
 4 2 0 0 3 4 &lt;br /&gt;
&amp;lt;code&amp;gt;onigim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 200 150 100 100 175 200&lt;br /&gt;
 4&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Sunt &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; elevi care au punctajul mai mic decât punctajul elevului cu id-ul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; elevi cu punctajul  mai mic decât punctajul elevului cu id-ul &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, etc.&lt;br /&gt;
&lt;br /&gt;
Cele mai mari &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; punctaje sunt obţinute de &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; elevi. Numărul maxim de elevi care au acelaşi punctaj este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
sys.stdin = open(&amp;quot;onigim.intxt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
sys.stdout = open(&amp;quot;onigim.outtxt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
n, k = map(int, input().split())&lt;br /&gt;
p = list(map(int, input().split()))&lt;br /&gt;
v = [0] * 1001&lt;br /&gt;
a = [0] * 1001&lt;br /&gt;
fr = [0] * 1001&lt;br /&gt;
nrdistinctii = 0&lt;br /&gt;
nr = 0&lt;br /&gt;
&lt;br /&gt;
for i in range(1, k + 1):&lt;br /&gt;
    p[i] = int(input())&lt;br /&gt;
&lt;br /&gt;
for i in range(1, n + 1):&lt;br /&gt;
    a[i] = int(input())&lt;br /&gt;
    fr[a[i]] += 1&lt;br /&gt;
&lt;br /&gt;
i = 1&lt;br /&gt;
for j in range(n + 1):&lt;br /&gt;
    if fr[j] != 0:&lt;br /&gt;
        v[j] = p[i]&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
for i in range(1, n + 1):&lt;br /&gt;
    a[i] = v[a[i]]&lt;br /&gt;
&lt;br /&gt;
for i in range(1, n + 1):&lt;br /&gt;
    print(a[i], end=&#039; &#039;)&lt;br /&gt;
print()&lt;br /&gt;
&lt;br /&gt;
i = n&lt;br /&gt;
while i &amp;gt;= 0:&lt;br /&gt;
    if fr[i] != 0 and nr &amp;lt; 3:&lt;br /&gt;
        nrdistinctii += fr[i]&lt;br /&gt;
        nr += 1&lt;br /&gt;
    i -= 1&lt;br /&gt;
&lt;br /&gt;
print(nrdistinctii)&lt;br /&gt;
&lt;br /&gt;
nr = 0&lt;br /&gt;
for i in range(n):&lt;br /&gt;
    if nr &amp;lt; fr[i]:&lt;br /&gt;
        nr = fr[i]&lt;br /&gt;
&lt;br /&gt;
print(nr)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1731_-_Numar_5&amp;diff=9620</id>
		<title>1731 - Numar 5</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1731_-_Numar_5&amp;diff=9620"/>
		<updated>2024-02-12T15:04:26Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Pentru un număr dat cu &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; cifre , se numeşte algoritm de deplasare circulară spre dreapta de la o cifră iniţială , la o cifră finală , deplasarea din cifră în cifră spre dreapta de  ori (&amp;lt;code&amp;gt;1≤i,j≤k&amp;lt;/code&amp;gt;). Dacă pe parcursul deplasării s-a ajuns la cifra , se continuă deplasarea circulară spre dreapta cu cifra   .  Un număr cu &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; cifre se numeşte  număr „circular” dacă îndeplineşte următoarele două cerinţe:  * toate c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Pentru un număr dat cu &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; cifre , se numeşte algoritm de deplasare circulară spre dreapta de la o cifră iniţială , la o cifră finală , deplasarea din cifră în cifră spre dreapta de  ori (&amp;lt;code&amp;gt;1≤i,j≤k&amp;lt;/code&amp;gt;). Dacă pe parcursul deplasării s-a ajuns la cifra , se continuă deplasarea circulară spre dreapta cu cifra &lt;br /&gt;
&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Un număr cu &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; cifre se numeşte  număr „circular” dacă îndeplineşte următoarele două cerinţe:&lt;br /&gt;
&lt;br /&gt;
* toate cifrele sunt nenule;&lt;br /&gt;
* pornind de la cifra , aplicând algoritmul de deplasare circulară spre dreapta de exact &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; ori, se ajunge din nou la , fiecare dintre cifrele numărului fiind exact o singură dată cifră iniţială.&lt;br /&gt;
&lt;br /&gt;
De exemplu, numărul &amp;lt;code&amp;gt;2396&amp;lt;/code&amp;gt; este un număr “circular”, pentru că are doar cifre nenule şi algoritmul de deplasare circulară spre dreapta se aplică astfel:&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;1.&#039;&#039; Se porneşte de la cifra iniţială &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;2 3 9 6&amp;lt;/code&amp;gt;) şi se numără două cifre spre dreapta, ajungând la cifra finală &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;:  &amp;lt;code&amp;gt;2 3 9 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;2.&#039;&#039; Se porneşte de la cifra iniţială &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; şi se numără nouă cifre spre dreapta, ajungând la cifra finală &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt;:  &amp;lt;code&amp;gt;2 3 9 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;3.&#039;&#039; Se porneşte de la cifra iniţială &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; şi se numără şase cifre spre dreapta, ajungând la cifra finală &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;:  &amp;lt;code&amp;gt;2 3 9 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;4.&#039;&#039; Se porneşte de la cifra iniţială &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi se numără trei cifre spre dreapta, ajungând la cifra finală &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;:  &amp;lt;code&amp;gt;2 3 9 6&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Astfel, se ajunge la prima cifră din număr, adică la cifra &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, după exact &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; aplicări ale algoritmului, iar fiecare dintre cifrele numărului este exact o dată cifră iniţială.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care citeşte numărul natural nenul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, apoi numerele naturale &lt;br /&gt;
, şi determină:&lt;br /&gt;
a) cel mai mare număr din şir în care există cel puţin o cifră care apare de minimum două ori, iar în cazul în care în şir nu există un astfel de număr, se va afişa cel mai mare număr din şir;&lt;br /&gt;
b) un şir  de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; numere naturale pentru care un element (&amp;lt;code&amp;gt;1≤i≤n&amp;lt;/code&amp;gt;)se calculează astfel:&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;numar.in&amp;lt;/code&amp;gt; conţine pe prima linie numărul &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii numerele naturale &lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;numar.out&amp;lt;/code&amp;gt; va conţine pe prima linie un număr natural determinat conform cerinţei a), iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii şirul de numere determinat conform cerinţei de la punctul b), fiecare număr pe câte un rând.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; n &amp;lt; 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;9 &amp;lt;&amp;lt;/code&amp;gt; x &amp;lt;code&amp;gt;&amp;lt; 999589&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 ≤ i ≤ n&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;numar.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
 15&lt;br /&gt;
 123&lt;br /&gt;
 1972&lt;br /&gt;
 222&lt;br /&gt;
 515&lt;br /&gt;
&amp;lt;code&amp;gt;numar.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 515&lt;br /&gt;
 15 &lt;br /&gt;
 117&lt;br /&gt;
 1959&lt;br /&gt;
 222&lt;br /&gt;
 522&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
a) &amp;lt;code&amp;gt;515&amp;lt;/code&amp;gt; este cel mai mare număr dintre cele cinci numere citite, număr ce conţine o cifră care apare de minimum două ori.&lt;br /&gt;
&lt;br /&gt;
b) Pentru &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt;: de la cifra iniţială &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, se numără o cifră şi se ajunge la cifra finală &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;, apoi începând de la cifra &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; ca cifră iniţială, se numără cinci cifre şi se ajunge la cifra finală &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Astfel cifrele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; sunt o singură dată cifre iniţiale şi după două aplicări ale algoritmului de deplasare se ajunge la prima cifră, deci &amp;lt;code&amp;gt;15&amp;lt;/code&amp;gt; este număr circular.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
sys.stdin = open(&#039;numar.in&#039;, &#039;r&#039;)&lt;br /&gt;
sys.stdout = open(&#039;numar.out&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
a = [0] * 10000&lt;br /&gt;
n = 0&lt;br /&gt;
&lt;br /&gt;
def date():&lt;br /&gt;
    global n&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        a[i] = int(input())&lt;br /&gt;
&lt;br /&gt;
def cifre_repetate(x):&lt;br /&gt;
    digits = [0] * 10&lt;br /&gt;
    while x:&lt;br /&gt;
        if digits[x % 10] != 0:&lt;br /&gt;
            return 1&lt;br /&gt;
        else:&lt;br /&gt;
            digits[x % 10] = 1&lt;br /&gt;
            x = x // 10&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
def max():&lt;br /&gt;
    max1 = 0&lt;br /&gt;
    max2 = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if cifre_repetate(a[i]):&lt;br /&gt;
            if max2 &amp;lt; a[i]:&lt;br /&gt;
                max2 = a[i]&lt;br /&gt;
        if max1 &amp;lt; a[i]:&lt;br /&gt;
            max1 = a[i]&lt;br /&gt;
    if max2 == 0:&lt;br /&gt;
        return max1&lt;br /&gt;
    else:&lt;br /&gt;
        return max2&lt;br /&gt;
&lt;br /&gt;
def este(x):&lt;br /&gt;
    i = 1&lt;br /&gt;
    a = [0] * 100&lt;br /&gt;
    b = [0] * 100&lt;br /&gt;
    k = 0&lt;br /&gt;
    t = 0&lt;br /&gt;
    z = 0&lt;br /&gt;
    j = 0&lt;br /&gt;
    ok = 0&lt;br /&gt;
&lt;br /&gt;
    while x != 0:&lt;br /&gt;
        a[i] = x % 10&lt;br /&gt;
        if a[i] == 0:&lt;br /&gt;
            return 0&lt;br /&gt;
        x //= 10&lt;br /&gt;
        b[i] = 1&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    i -= 1&lt;br /&gt;
    for j in range(i // 2):&lt;br /&gt;
        z = a[j]&lt;br /&gt;
        a[j] = a[i - j]&lt;br /&gt;
        a[i - j] = z&lt;br /&gt;
&lt;br /&gt;
    z = 0&lt;br /&gt;
    t = a[1]&lt;br /&gt;
    k = 1&lt;br /&gt;
    ok = 1&lt;br /&gt;
    for j in range(1, i + 1):&lt;br /&gt;
        if k + t &amp;lt;= i:&lt;br /&gt;
            k = k + t&lt;br /&gt;
        else:&lt;br /&gt;
            k = (t - (i - k + 1)) % i + 1&lt;br /&gt;
        if b[k] != 0:&lt;br /&gt;
            z += 1&lt;br /&gt;
            b[k] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            ok = 0&lt;br /&gt;
        t = a[k]&lt;br /&gt;
&lt;br /&gt;
    if ok:&lt;br /&gt;
        return 1&lt;br /&gt;
    else:&lt;br /&gt;
        return 0&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global n&lt;br /&gt;
    p = -1&lt;br /&gt;
    z = 0&lt;br /&gt;
    date()&lt;br /&gt;
    print(max())&lt;br /&gt;
    z = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if este(a[i]):&lt;br /&gt;
            print(a[i])&lt;br /&gt;
        else:&lt;br /&gt;
            p = 0&lt;br /&gt;
            x = a[i]&lt;br /&gt;
            while not p:&lt;br /&gt;
                if este(x):&lt;br /&gt;
                    p = 1&lt;br /&gt;
                else:&lt;br /&gt;
                    x += 1&lt;br /&gt;
            p = 0&lt;br /&gt;
            y = a[i]&lt;br /&gt;
            while not p:&lt;br /&gt;
                if este(y):&lt;br /&gt;
                    p = 1&lt;br /&gt;
                else:&lt;br /&gt;
                    y -= 1&lt;br /&gt;
            if (x - a[i]) &amp;gt; (a[i] - y):&lt;br /&gt;
                print(y)&lt;br /&gt;
            else:&lt;br /&gt;
                print(x)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
     main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1727_-_Culori_3&amp;diff=9582</id>
		<title>1727 - Culori 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1727_-_Culori_3&amp;diff=9582"/>
		<updated>2024-02-05T11:22:04Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Fiecare dintre cei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copii, numerotați de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, primește câte un cartonaș colorat. Doamna dirigintă îi așează în cerc, în ordinea numerotării, în sens orar. Astfel, fiecare copil are doi vecini, așezați în stânga, respectiv în dreapta lui.   Andrei, pasionat de informatică, asociază fiecărei culori distincte un cod, reprezentat printr-un număr natural nenul, și inscripționează fiecare cartonaș cu codul cores...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Fiecare dintre cei &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; copii, numerotați de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, primește câte un cartonaș colorat. Doamna dirigintă îi așează în cerc, în ordinea numerotării, în sens orar. Astfel, fiecare copil are doi vecini, așezați în stânga, respectiv în dreapta lui. &lt;br /&gt;
&lt;br /&gt;
Andrei, pasionat de informatică, asociază fiecărei culori distincte un cod, reprezentat printr-un număr natural nenul, și inscripționează fiecare cartonaș cu codul corespunzător culorii acestuia.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care citeşte două numere naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; şi determină pentru Andrei:&lt;br /&gt;
&lt;br /&gt;
a) numărul copiilor din cerc care au cartonaşe de aceeaşi culoare cu cartonaşele vecinilor;&lt;br /&gt;
&lt;br /&gt;
b) numărul maxim de cartonaşe de aceeaşi culoare ce sunt deţinute de copiii aşezaţi pe &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; poziţii consecutive în cercul format.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;culori.in&amp;lt;/code&amp;gt; conţine pe prima linie numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, separate printr-un spaţiu, şi pe fiecare dintre următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii, câte un număr natural. Cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere reprezintă codurile culorilor cartonaşelor, în ordinea numerotării copiilor, începând cu copilul &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul de ieşire &amp;lt;code&amp;gt;culori.out&amp;lt;/code&amp;gt; conţine:&lt;br /&gt;
&lt;br /&gt;
pe prima linie, numărul natural determinat la cerinţa a);&lt;br /&gt;
&lt;br /&gt;
pe a doua linie, numărul natural determinat la cerinţa b).&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 &amp;lt; N ≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 &amp;lt; K ≤ N&amp;lt;/code&amp;gt;&lt;br /&gt;
* codurile culorilor sunt numere naturale nenule, consecutive, mai mici sau egale cu &amp;lt;code&amp;gt;100&amp;lt;/code&amp;gt;&lt;br /&gt;
* dacă &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; este codul maxim asociat unei culori ( &amp;lt;code&amp;gt;1 ≤ C ≤ 100&amp;lt;/code&amp;gt; ) atunci există cel puţin &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; cartonaşe care au codurile distincte: &amp;lt;code&amp;gt;1,2,3,…,C&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;culori.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 8 5&lt;br /&gt;
 3&lt;br /&gt;
 1&lt;br /&gt;
 2&lt;br /&gt;
 1&lt;br /&gt;
 1&lt;br /&gt;
 1&lt;br /&gt;
 3&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;code&amp;gt;culori.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 4&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Sunt doi copii care au, fiecare, cartonaşe identice cu cei doi vecini (copilul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; şi copilul &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Numărul maxim de cartonaşe de aceeaşi culoare deţinute de copiii aşezaţi pe &amp;lt;code&amp;gt;K = 5&amp;lt;/code&amp;gt;  poziţii consecutive în cercul format este &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; (dintre copiii &amp;lt;code&amp;gt;2,3,4,5,6&amp;lt;/code&amp;gt; doar copiii &amp;lt;code&amp;gt;2,4,5&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;6&amp;lt;/code&amp;gt; au cartonaşe de culoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def read_input(filename):&lt;br /&gt;
    with open(filename, &#039;r&#039;) as fin:&lt;br /&gt;
        N, k = map(int, fin.readline().split())&lt;br /&gt;
        x = [0] * (2 * N + 3)&lt;br /&gt;
        x[1] = int(fin.readline())&lt;br /&gt;
        x[N + 1] = x[1]&lt;br /&gt;
        c = x[1]&lt;br /&gt;
        x[2] = int(fin.readline())&lt;br /&gt;
        x[N + 2] = x[2]&lt;br /&gt;
        if x[2] &amp;gt; c:&lt;br /&gt;
            c = x[2]&lt;br /&gt;
        for i in range(3, N + 1):&lt;br /&gt;
            x[i] = int(fin.readline())&lt;br /&gt;
            x[N + i] = x[i]&lt;br /&gt;
            if x[i] &amp;gt; c:&lt;br /&gt;
                c = x[i]&lt;br /&gt;
        nrc = sum(1 for i in range(2, N) if x[i - 1] == x[i - 2] == x[i])&lt;br /&gt;
        if x[1] == x[N] == x[N - 1]:&lt;br /&gt;
            nrc += 1&lt;br /&gt;
        if x[1] == x[2] == x[N]:&lt;br /&gt;
            nrc += 1&lt;br /&gt;
    return N, k, x, c, nrc&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N, k, x, c, nrc = read_input(&#039;culori.in&#039;)&lt;br /&gt;
    maxck = 0&lt;br /&gt;
    apc1 = [0] * (c + 1)&lt;br /&gt;
    for i in range(1, k + 1):&lt;br /&gt;
        apc1[x[i]] += 1&lt;br /&gt;
        maxck = max(maxck, apc1[x[i]])&lt;br /&gt;
    for i in range(2, N + 1):&lt;br /&gt;
        apc1[x[i - 1]] -= 1&lt;br /&gt;
        apc1[x[i + k - 1]] += 1&lt;br /&gt;
        for j in range(1, c + 1):&lt;br /&gt;
            maxck = max(maxck, apc1[j])&lt;br /&gt;
    with open(&#039;culori.out&#039;, &#039;w&#039;) as fout:&lt;br /&gt;
        fout.write(f&amp;quot;{nrc}\n{maxck}\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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1708_-_Cuburi_3&amp;diff=9581</id>
		<title>1708 - Cuburi 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1708_-_Cuburi_3&amp;diff=9581"/>
		<updated>2024-02-05T11:18:36Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Ionuţ a învăţat la şcoală să lucreze cu numere mari. El are la dispoziţie un şir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule. Din fiecare număr el şterge exact trei cifre, fără să schimbe ordinea cifrelor rămase, astfel încât să obţină cel mai mic număr natural nenul posibil. De exemplu, din numărul &amp;lt;code&amp;gt;20731049&amp;lt;/code&amp;gt; se obţine numărul &amp;lt;code&amp;gt;20049&amp;lt;/code&amp;gt;, iar din numărul &amp;lt;code&amp;gt;13004&amp;lt;/code&amp;gt; se obţine numărul &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Înlocuind fiecare număr...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ionuţ a învăţat la şcoală să lucreze cu numere mari. El are la dispoziţie un şir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale nenule. Din fiecare număr el şterge exact trei cifre, fără să schimbe ordinea cifrelor rămase, astfel încât să obţină cel mai mic număr natural nenul posibil. De exemplu, din numărul &amp;lt;code&amp;gt;20731049&amp;lt;/code&amp;gt; se obţine numărul &amp;lt;code&amp;gt;20049&amp;lt;/code&amp;gt;, iar din numărul &amp;lt;code&amp;gt;13004&amp;lt;/code&amp;gt; se obţine numărul &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt;. Înlocuind fiecare număr citit cu numărul obţinut prin operaţia de mai sus, Ionuţ obţine un nou şir şi scrie termenii acestuia pe feţele unor cuburi astfel: primele şase numere din şir le scrie pe primul cub şi îl notează pe acesta cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, următoarele şase numere din şir le scrie pe un alt cub pe care îl notează cu &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ş.a.m.d.&lt;br /&gt;
&lt;br /&gt;
Aceste cuburi au fost distribuite în piramide după modelul din figura. Piramidele au fost numerotate cu numere naturale consecutive. Piramida cu numărul de ordine &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; este formată numai din cubul cu numărul de ordine &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi are un singur nivel, piramida cu numărul de ordine &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; are pe primul nivel cuburile &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; iar pe ultimul nivel cubul &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt; ş.a.m.d.&lt;br /&gt;
&lt;br /&gt;
Două niveluri alăturate în cadrul unei piramide diferă prin exact două cuburi. Primul nivel al unei piramide conţine cu două cuburi mai mult decât primul nivel al piramidei precedente. Piramida se consideră completă dacă pe ultimul nivel are un singur cub.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care citeşte numerele naturale nenule &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, apoi cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale ce fac parte din şirul iniţial, şi determină:&lt;br /&gt;
&lt;br /&gt;
a)	Numărul de piramide complete construite de Ionuţ.&lt;br /&gt;
&lt;br /&gt;
b)	Numerele scrise pe cuburile din primele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; piramide.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;cuburi.in&amp;lt;/code&amp;gt; are două linii: prima linie conţine două numere naturale, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; şi &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, iar a doua linie conţine &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale. Pe fiecare linie a fişierului numerele sunt separate prin câte un spaţiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;cuburi.out&amp;lt;/code&amp;gt; are două linii: prima linie conţine numărul de piramide complete care au fost construite, iar a doua linie conţine toate numerele scrise pe cuburile ce formează primele &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; piramide. Numerele sunt scrise separate prin câte un spaţiu, în ordinea apariţiei lor în şirul nou obţinut.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;6 ≤ N ≤ 100000&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează că se pot construi cel puţin &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; piramide complete.&lt;br /&gt;
* Cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale de pe a doua linie a fişierului de intrare au minimum &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt; cifre şi maximum &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; cifre.&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;cuburi.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 31 2&lt;br /&gt;
 18250 9280 18250 953805 20800 6040065 24208 4405 8794 1720 98886 96400 45544 8560056 36055 60400 80200 11560 36475 26992 68320 69400 20296 72640 34048 57700 66520 47440 91232 26080 90280&lt;br /&gt;
&amp;lt;code&amp;gt;cuburi.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 10 2 10 305 20 4005 20 4 4 1 86 40 44 5005 30 40 20 10 34 22 20 40 20 20 30 50 20 40 12 20&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def nrmin(x, nrc):&lt;br /&gt;
    v = [int(digit) for digit in str(x)]&lt;br /&gt;
    Min = v[0]&lt;br /&gt;
    imin = 0&lt;br /&gt;
    for i in range(4):&lt;br /&gt;
        if v[i] &amp;lt; Min and v[i] != 0:&lt;br /&gt;
            Min = v[i]&lt;br /&gt;
            imin = i&lt;br /&gt;
    nr = Min&lt;br /&gt;
    in_index = imin + 1&lt;br /&gt;
    sf = 4&lt;br /&gt;
    while sf &amp;lt; nrc:&lt;br /&gt;
        Min = v[in_index]&lt;br /&gt;
        imin = in_index&lt;br /&gt;
        for i in range(in_index, sf + 1):&lt;br /&gt;
            if v[i] &amp;lt; Min:&lt;br /&gt;
                Min = v[i]&lt;br /&gt;
                imin = i&lt;br /&gt;
        nr = nr * 10 + Min&lt;br /&gt;
        in_index = imin + 1&lt;br /&gt;
        sf += 1&lt;br /&gt;
    return nr&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;cuburi.in&amp;quot;, &amp;quot;r&amp;quot;) as stdin, open(&amp;quot;cuburi.out&amp;quot;, &amp;quot;w&amp;quot;) as stdout:&lt;br /&gt;
        n, k = map(int, stdin.readline().split())&lt;br /&gt;
        nr = sum(i * i * 6 for i in range(1, k + 1))&lt;br /&gt;
        w = []&lt;br /&gt;
        nrpir = 0&lt;br /&gt;
        s = 0&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            x = int(stdin.readline())&lt;br /&gt;
            nrc = int(math.log10(x)) + 1&lt;br /&gt;
            if i % 6 == 0 and math.sqrt(i // 6) == int(math.sqrt(i // 6)):&lt;br /&gt;
                s += i&lt;br /&gt;
                if s &amp;lt;= n:&lt;br /&gt;
                    nrpir += 1&lt;br /&gt;
            if i &amp;lt;= nr:&lt;br /&gt;
                w.append(nrmin(x, nrc))&lt;br /&gt;
        stdout.write(f&amp;quot;{nrpir}\n&amp;quot;)&lt;br /&gt;
        for num in w:&lt;br /&gt;
            stdout.write(f&amp;quot;{num} &amp;quot;)&lt;br /&gt;
        stdout.write(&amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1989_-_Teatru&amp;diff=9580</id>
		<title>1989 - Teatru</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1989_-_Teatru&amp;diff=9580"/>
		<updated>2024-02-05T11:16:16Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Alina este mare iubitoare de teatru. Directorul teatrului i-a oferit șansa să joace în mai multe spectacole, ca figurant, deocamdată. Costumiera de scenă a decis să-i dea &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; costume diferite dintre cele care sunt destinate acestei stagiuni. Alina va duce costumele acasă și le va ajusta ca să-i vină bine. Stagiunea durează &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; zile consecutive și în fiecare zi se joacă câte o piesă. Aceeași piesă se va juca, desigur în una sau mai mai...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Alina este mare iubitoare de teatru. Directorul teatrului i-a oferit șansa să joace în mai multe spectacole, ca figurant, deocamdată. Costumiera de scenă a decis să-i dea &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; costume diferite dintre cele care sunt destinate acestei stagiuni. Alina va duce costumele acasă și le va ajusta ca să-i vină bine. Stagiunea durează &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; zile consecutive și în fiecare zi se joacă câte o piesă. Aceeași piesă se va juca, desigur în una sau mai mai multe zile ale stagiunii. Fiecărei piese i se asociază un unic costum de figurant, deci pentru fiecare piesă în care joacă, Alina trebuie să îmbrace un singur costum, acela asociat piesei respective. Costumele de figuranți sunt identificate prin literele mari ale alfabetului englez: &amp;lt;code&amp;gt;A&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;B&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt;, …, &amp;lt;code&amp;gt;X&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Y&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt;. Alina are voie să-și aleagă cele &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; costume diferite.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând costumul asociat fiecărei zile a stagiunii, ajutați-o pe Alina să-și aleagă cele &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; costume diferite, în așa fel încât să poată juca într-un număr cât mai mare de piese consecutive.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;teatru.in&amp;lt;/code&amp;gt; conține pe prima linie două numere naturale &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; despărțite printr-un spațiu. &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; este numărul de zile din stagiune iar &amp;lt;code&amp;gt;C&amp;lt;/code&amp;gt; este numărul de costume diferite pe care Alina le poate primi. Pe linia a doua, se găsesc &amp;lt;code&amp;gt;Z&amp;lt;/code&amp;gt; caractere, litere mari ale alfabetului englez. Caracterul al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea identifică costumul de figurant care trebuie îmbrăcat în spectacolul din ziua &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;teatru.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, reprezentând numărul maxim de spectacole consecutive în care Alina poate juca. Pe linia a doua se scriu &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; caractere, fără spații între ele, corespunzătoare costumelor care vor fi îmbrăcate în cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; piese de teatru alese, în ordinea spectacolelor în care va juca. Dacă există mai multe soluții de lungime &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; atunci se afișează cea căreia îi corespunde o zi de început mai aproape de începutul stagiunii.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ Z ≤ 55000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ C ≤ 26&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;C ≤ Z&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru 20% dintre teste &amp;lt;code&amp;gt;Z ≤ 350&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;teatru.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 10 3&lt;br /&gt;
 XKUFKFEGXG&lt;br /&gt;
&amp;lt;code&amp;gt;teatru.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
 KUFKF&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2 =&lt;br /&gt;
&amp;lt;code&amp;gt;teatru.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 15 4&lt;br /&gt;
 IAJRAMRCZJJCDNS&lt;br /&gt;
&amp;lt;code&amp;gt;teatru.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 6&lt;br /&gt;
 AJRAMR&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
def read_input():&lt;br /&gt;
    global n, k, s&lt;br /&gt;
    n, k = map(int, input().split())&lt;br /&gt;
    s = input().strip()&lt;br /&gt;
&lt;br /&gt;
def print_output():&lt;br /&gt;
    print(Lmax)&lt;br /&gt;
    print(&#039;&#039;.join(s[imax:jmax+1]))&lt;br /&gt;
&lt;br /&gt;
def calculate():&lt;br /&gt;
    global imax, jmax, Lmax&lt;br /&gt;
    i = j = nr = 0&lt;br /&gt;
    f = {chr(c): 0 for c in range(65, 91)}&lt;br /&gt;
    f[s[0]] += 1&lt;br /&gt;
    nr += 1&lt;br /&gt;
    while i &amp;lt; n and j &amp;lt; n:&lt;br /&gt;
        while nr &amp;lt;= k and j &amp;lt; n:&lt;br /&gt;
            j += 1&lt;br /&gt;
            if j &amp;gt;= n:&lt;br /&gt;
                break&lt;br /&gt;
            if f[s[j]] == 0:&lt;br /&gt;
                f[s[j]] += 1&lt;br /&gt;
                nr += 1&lt;br /&gt;
            else:&lt;br /&gt;
                f[s[j]] += 1&lt;br /&gt;
        if j - i &amp;gt; Lmax:&lt;br /&gt;
            Lmax = j - i&lt;br /&gt;
            imax = i&lt;br /&gt;
            jmax = j - 1&lt;br /&gt;
        while nr &amp;gt; k:&lt;br /&gt;
            f[s[i]] -= 1&lt;br /&gt;
            if f[s[i]] == 0:&lt;br /&gt;
                nr -= 1&lt;br /&gt;
            i += 1&lt;br /&gt;
&lt;br /&gt;
with open(&#039;teatru.in&#039;, &#039;r&#039;) as fin:&lt;br /&gt;
    n, k = map(int, fin.readline().split())&lt;br /&gt;
    s = fin.readline().strip()&lt;br /&gt;
&lt;br /&gt;
imax = jmax = Lmax = 0&lt;br /&gt;
calculate()&lt;br /&gt;
&lt;br /&gt;
with open(&#039;teatru.out&#039;, &#039;w&#039;) as fout:&lt;br /&gt;
    fout.write(f&amp;quot;{Lmax}\n&amp;quot;)&lt;br /&gt;
    fout.write(&#039;&#039;.join(s[imax:jmax+1]) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
  calculate()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2079_-_Auto_1&amp;diff=9579</id>
		<title>2079 - Auto 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2079_-_Auto_1&amp;diff=9579"/>
		<updated>2024-02-05T11:11:46Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Se consideră o autostradă dispusă în linie dreaptă având &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; puncte de acces (intrare şi ieşire). În fiecare punct de acces există containere pentru colectarea deşeurilor, toate containerele au aceeaşi capacitate şi în fiecare punct de acces pot fi mai multe astfel de containere. Firma care asigură curăţenia dispune de un singur mijloc de transport al containerelor. Acest mijloc de transport poate încărca exact un număr &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; de contain...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră o autostradă dispusă în linie dreaptă având &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; puncte de acces (intrare şi ieşire). În fiecare punct de acces există containere pentru colectarea deşeurilor, toate containerele au aceeaşi capacitate şi în fiecare punct de acces pot fi mai multe astfel de containere. Firma care asigură curăţenia dispune de un singur mijloc de transport al containerelor. Acest mijloc de transport poate încărca exact un număr &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; de containere. Accesul mijlocului de transport pe autostradă se face cu restricţii pentru a nu perturba traficul şi din acest motiv trebuie ca la fiecare acces pe autostradă să fie colectate exact atâtea containere cât este capacitatea maşinii, dar dintr-un punct de colectare trebuie să ia exact un container, deci dacă se intră pe autostradă la punctul de acces &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;, unde &amp;lt;code&amp;gt;P≤N-K+1&amp;lt;/code&amp;gt;, atunci trebuie să ia containere de la punctele de acces numerotate cu &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;P+1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;P+2&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;P+K-1&amp;lt;/code&amp;gt;, în aceste puncte de acces scade cu &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; numărul containerelor rămase. Firma trebuie să găsească toate valorile posibile pentru &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; astfel încât să poată colecta toate containerele.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Se cere să se găsească toate valorile posibile pentru &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; astfel încât să fie adunate toate containerele.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fişierul de intrare &amp;lt;code&amp;gt;auto.in&amp;lt;/code&amp;gt; va conţine pe prima linie numărul natural &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt;, reprezentând numărul de seturi de date de intrare. În continuare urmează seturile de date de intrare, fiecare pe cate două linii. Pe prima linie a unui set se află numărul &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, având semnificația din enunț. Pe următoarea linie se află &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale separate printr-un spațiu, reprezentând numărul de containere din fiecare punct de acces.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;auto.out&amp;lt;/code&amp;gt; va conține &amp;lt;code&amp;gt;T&amp;lt;/code&amp;gt; linii, pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; aflându-se răspunsul pentru al &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;-lea set de date de intrare. Valorile posibile pentru &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; se vor afișa în ordine crescătoare, separate printr-un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ T ≤ 30&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤ N ≤ 9000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ K ≤ N&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤&amp;lt;/code&amp;gt; numărul de containere din fiecare punct de acces  &amp;lt;code&amp;gt;≤ 1000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;auto.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
 8&lt;br /&gt;
 1 2 3 4 2 0 0 0&lt;br /&gt;
 3&lt;br /&gt;
 1 1 1&lt;br /&gt;
&amp;lt;code&amp;gt;auto.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1 2&lt;br /&gt;
 1 3&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
import time&lt;br /&gt;
&lt;br /&gt;
MAXN = 9001&lt;br /&gt;
MAXDIV = 770&lt;br /&gt;
&lt;br /&gt;
def check(K, N, A, pos, st):&lt;br /&gt;
    steps = 0&lt;br /&gt;
    t = 1&lt;br /&gt;
    p = 0&lt;br /&gt;
    val = 0&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        steps += 1&lt;br /&gt;
        while t &amp;lt;= p and pos[t] &amp;lt;= i - K:&lt;br /&gt;
            val -= st[t]&lt;br /&gt;
            t += 1&lt;br /&gt;
        if A[i] &amp;lt; val or (i &amp;gt; N - K + 1 and A[i] != val):&lt;br /&gt;
            return False, steps&lt;br /&gt;
        if A[i] &amp;gt; val:&lt;br /&gt;
            p += 1&lt;br /&gt;
            pos[p] = i&lt;br /&gt;
            st[p] = A[i] - val&lt;br /&gt;
            val = A[i]&lt;br /&gt;
    return True, steps&lt;br /&gt;
&lt;br /&gt;
def read_and_solve(N, A):&lt;br /&gt;
    NR = 0&lt;br /&gt;
    sol = [0] * MAXDIV&lt;br /&gt;
    d = sum(A[1:N+1])&lt;br /&gt;
    pos = [0] * MAXN&lt;br /&gt;
    st = [0] * MAXN&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        if d % i == 0:&lt;br /&gt;
            is_valid, _ = check(i, N, A, pos, st)&lt;br /&gt;
            if is_valid:&lt;br /&gt;
                sol[NR] = i&lt;br /&gt;
                NR += 1&lt;br /&gt;
    sol = sorted(sol[:NR])&lt;br /&gt;
    print(&#039; &#039;.join(map(str, sol)))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # sys.stdin = open(&amp;quot;auto.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    # sys.stdout = open(&amp;quot;auto.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
    start = time.time()&lt;br /&gt;
    teste = int(input())&lt;br /&gt;
    steps = 0&lt;br /&gt;
    for _ in range(teste):&lt;br /&gt;
        N = int(input())&lt;br /&gt;
        A = [0] + list(map(int, input().split()))&lt;br /&gt;
        read_and_solve(N, A)&lt;br /&gt;
    end = time.time()&lt;br /&gt;
    # sys.stderr.write(f&amp;quot;{steps}\n&amp;quot;)&lt;br /&gt;
    # sys.stderr.write(f&amp;quot;{(end - start)}\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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1443_-_Control_2&amp;diff=9578</id>
		<title>1443 - Control 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1443_-_Control_2&amp;diff=9578"/>
		<updated>2024-02-05T11:01:06Z</updated>

		<summary type="html">&lt;p&gt;Raul: /* Lipește codul aici */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gigel a primit spre păstrare un set de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.&lt;br /&gt;
&lt;br /&gt;
Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul număr a grupat numerele de apariţii ale greutăţilor câte trei (dacă îi rămân numere negrupate la sfârşit, le ignoră). Dacă într-un grup sunt numai numere pare sau numai impare notează grupul cu cifra &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, altfel îl notează cu cifra &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Din şirul astfel obţinut, se formează un număr care are ca valoare cifra zecilor egală cu numărul de valori &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi cifra unităţilor egală cu numărul de valori &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, obţinându-se astfel „numărul de control”.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Citind greutăţile cutiilor, să se determine „numărul de control” şi să se verifice dacă este număr prim.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului de intrare &amp;lt;code&amp;gt;control2.in&amp;lt;/code&amp;gt; se găseşte numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte un număr natural, reprezentând greutăţile celor &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;control2.out&amp;lt;/code&amp;gt; va conţine pe prima linie „numărul de control”, urmat, pe linia a doua, de valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Pe linia a doua se va afişa &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; dacă numărul este prim, respectiv &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* fiecare greutate este un număr natural, mai mic sau egal cu &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;control2.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 21&lt;br /&gt;
 1 &lt;br /&gt;
 3 &lt;br /&gt;
 2 &lt;br /&gt;
 6 &lt;br /&gt;
 2 &lt;br /&gt;
 6 &lt;br /&gt;
 2 &lt;br /&gt;
 8 &lt;br /&gt;
 9 &lt;br /&gt;
 8 &lt;br /&gt;
 8 &lt;br /&gt;
 9 &lt;br /&gt;
 10 &lt;br /&gt;
 8 &lt;br /&gt;
 11 &lt;br /&gt;
 18 &lt;br /&gt;
 11 &lt;br /&gt;
 12 &lt;br /&gt;
 14 &lt;br /&gt;
 15 &lt;br /&gt;
 17&lt;br /&gt;
&amp;lt;code&amp;gt;control2.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 31&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
După ordonare se obţine şirul: &amp;lt;code&amp;gt;1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 17 18&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se obţine apoi &lt;br /&gt;
. &lt;br /&gt;
Din valorile &amp;lt;code&amp;gt;1 1 0 1&amp;lt;/code&amp;gt; se obţine numărul de control 31, care este număr prim.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
sys.stdin = open(&#039;control2.txtin&#039;, &#039;r&#039;)&lt;br /&gt;
sys.stdout = open(&#039;control2.txtout&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
numarGreutati = int(input())&lt;br /&gt;
greutati = list(map(int, input().split()))&lt;br /&gt;
greutati.sort()&lt;br /&gt;
&lt;br /&gt;
aparitii = []&lt;br /&gt;
numarApariti = 0&lt;br /&gt;
numarControl = 0&lt;br /&gt;
elementeSumaControl = [0, 0]&lt;br /&gt;
estePrim = 1&lt;br /&gt;
&lt;br /&gt;
i = 0&lt;br /&gt;
while i &amp;lt; numarGreutati:&lt;br /&gt;
    count = 1&lt;br /&gt;
    if greutati[i] == greutati[i+1]:&lt;br /&gt;
        while greutati[i] == greutati[i+1] and i &amp;lt; numarGreutati:&lt;br /&gt;
            count += 1&lt;br /&gt;
            i += 1&lt;br /&gt;
    aparitii.append(count)&lt;br /&gt;
    numarApariti += 1&lt;br /&gt;
    i += 1&lt;br /&gt;
&lt;br /&gt;
for i in range(0, numarApariti // 3 * 3, 3):&lt;br /&gt;
    elementeSumaControl[aparitii[i] % 2 == aparitii[i + 1] % 2 and aparitii[i] % 2 == aparitii[i + 2] % 2] += 1&lt;br /&gt;
&lt;br /&gt;
numarControl = elementeSumaControl[0] + elementeSumaControl[1] * 10&lt;br /&gt;
&lt;br /&gt;
if numarControl % 2 == 0:&lt;br /&gt;
    estePrim = (numarControl == 2)&lt;br /&gt;
else:&lt;br /&gt;
    for d in range(3, int(numarControl ** 0.5) + 1, 2):&lt;br /&gt;
        if numarControl % d == 0:&lt;br /&gt;
            estePrim = 0&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
print(numarControl, file=sys.stdout)&lt;br /&gt;
print(estePrim, file=sys.stdout)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1443_-_Control_2&amp;diff=9577</id>
		<title>1443 - Control 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1443_-_Control_2&amp;diff=9577"/>
		<updated>2024-02-05T11:00:19Z</updated>

		<summary type="html">&lt;p&gt;Raul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gigel a primit spre păstrare un set de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.&lt;br /&gt;
&lt;br /&gt;
Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul număr a grupat numerele de apariţii ale greutăţilor câte trei (dacă îi rămân numere negrupate la sfârşit, le ignoră). Dacă într-un grup sunt numai numere pare sau numai impare notează grupul cu cifra &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, altfel îl notează cu cifra &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Din şirul astfel obţinut, se formează un număr care are ca valoare cifra zecilor egală cu numărul de valori &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi cifra unităţilor egală cu numărul de valori &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, obţinându-se astfel „numărul de control”.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Citind greutăţile cutiilor, să se determine „numărul de control” şi să se verifice dacă este număr prim.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului de intrare &amp;lt;code&amp;gt;control2.in&amp;lt;/code&amp;gt; se găseşte numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte un număr natural, reprezentând greutăţile celor &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;control2.out&amp;lt;/code&amp;gt; va conţine pe prima linie „numărul de control”, urmat, pe linia a doua, de valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Pe linia a doua se va afişa &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; dacă numărul este prim, respectiv &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* fiecare greutate este un număr natural, mai mic sau egal cu &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;control2.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 21&lt;br /&gt;
 1 &lt;br /&gt;
 3 &lt;br /&gt;
 2 &lt;br /&gt;
 6 &lt;br /&gt;
 2 &lt;br /&gt;
 6 &lt;br /&gt;
 2 &lt;br /&gt;
 8 &lt;br /&gt;
 9 &lt;br /&gt;
 8 &lt;br /&gt;
 8 &lt;br /&gt;
 9 &lt;br /&gt;
 10 &lt;br /&gt;
 8 &lt;br /&gt;
 11 &lt;br /&gt;
 18 &lt;br /&gt;
 11 &lt;br /&gt;
 12 &lt;br /&gt;
 14 &lt;br /&gt;
 15 &lt;br /&gt;
 17&lt;br /&gt;
&amp;lt;code&amp;gt;control2.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 31&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
După ordonare se obţine şirul: &amp;lt;code&amp;gt;1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 17 18&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se obţine apoi &lt;br /&gt;
. &lt;br /&gt;
Din valorile &amp;lt;code&amp;gt;1 1 0 1&amp;lt;/code&amp;gt; se obţine numărul de control 31, care este număr prim.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
sys.stdin = open(&#039;control2.in&#039;, &#039;r&#039;)&lt;br /&gt;
sys.stdout = open(&#039;control2.out&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
numarGreutati = int(input())&lt;br /&gt;
greutati = list(map(int, input().split()))&lt;br /&gt;
greutati.sort()&lt;br /&gt;
&lt;br /&gt;
aparitii = []&lt;br /&gt;
numarApariti = 0&lt;br /&gt;
numarControl = 0&lt;br /&gt;
elementeSumaControl = [0, 0]&lt;br /&gt;
estePrim = 1&lt;br /&gt;
&lt;br /&gt;
i = 0&lt;br /&gt;
while i &amp;lt; numarGreutati:&lt;br /&gt;
    count = 1&lt;br /&gt;
    if greutati[i] == greutati[i+1]:&lt;br /&gt;
        while greutati[i] == greutati[i+1] and i &amp;lt; numarGreutati:&lt;br /&gt;
            count += 1&lt;br /&gt;
            i += 1&lt;br /&gt;
    aparitii.append(count)&lt;br /&gt;
    numarApariti += 1&lt;br /&gt;
    i += 1&lt;br /&gt;
&lt;br /&gt;
for i in range(0, numarApariti // 3 * 3, 3):&lt;br /&gt;
    elementeSumaControl[aparitii[i] % 2 == aparitii[i + 1] % 2 and aparitii[i] % 2 == aparitii[i + 2] % 2] += 1&lt;br /&gt;
&lt;br /&gt;
numarControl = elementeSumaControl[0] + elementeSumaControl[1] * 10&lt;br /&gt;
&lt;br /&gt;
if numarControl % 2 == 0:&lt;br /&gt;
    estePrim = (numarControl == 2)&lt;br /&gt;
else:&lt;br /&gt;
    for d in range(3, int(numarControl ** 0.5) + 1, 2):&lt;br /&gt;
        if numarControl % d == 0:&lt;br /&gt;
            estePrim = 0&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
print(numarControl, file=sys.stdout)&lt;br /&gt;
print(estePrim, file=sys.stdout)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1443_-_Control_2&amp;diff=9576</id>
		<title>1443 - Control 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1443_-_Control_2&amp;diff=9576"/>
		<updated>2024-02-05T10:58:46Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Gigel a primit spre păstrare un set de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.  Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul num...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Gigel a primit spre păstrare un set de &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii de greutăţi nu neapărat distincte. El a cântărit cutiile şi pentru fiecare greutate distinctă a notat pe o foaie, în ordine crescătoare a greutăţilor, numărul de cutii cu greutatea respectivă.&lt;br /&gt;
&lt;br /&gt;
Deoarece fratele său mai mic avea prostul obicei să se joace cu numerele scrise de el pe foaie, Gigel s-a gândit să calculeze un „număr de control” după următorul algoritm: începând de la primul număr a grupat numerele de apariţii ale greutăţilor câte trei (dacă îi rămân numere negrupate la sfârşit, le ignoră). Dacă într-un grup sunt numai numere pare sau numai impare notează grupul cu cifra &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, altfel îl notează cu cifra &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;. Din şirul astfel obţinut, se formează un număr care are ca valoare cifra zecilor egală cu numărul de valori &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; şi cifra unităţilor egală cu numărul de valori &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt;, obţinându-se astfel „numărul de control”.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Citind greutăţile cutiilor, să se determine „numărul de control” şi să se verifice dacă este număr prim.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Pe prima linie a fişierului de intrare &amp;lt;code&amp;gt;control2.in&amp;lt;/code&amp;gt; se găseşte numărul natural &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt;, iar pe următoarele &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; linii câte un număr natural, reprezentând greutăţile celor &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; cutii.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fişierul &amp;lt;code&amp;gt;control2.out&amp;lt;/code&amp;gt; va conţine pe prima linie „numărul de control”, urmat, pe linia a doua, de valoarea &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Pe linia a doua se va afişa &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; dacă numărul este prim, respectiv &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; în caz contrar.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
* fiecare greutate este un număr natural, mai mic sau egal cu &amp;lt;code&amp;gt;200&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;control2.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 21&lt;br /&gt;
 1 &lt;br /&gt;
 3 &lt;br /&gt;
 2 &lt;br /&gt;
 6 &lt;br /&gt;
 2 &lt;br /&gt;
 6 &lt;br /&gt;
 2 &lt;br /&gt;
 8 &lt;br /&gt;
 9 &lt;br /&gt;
 8 &lt;br /&gt;
 8 &lt;br /&gt;
 9 &lt;br /&gt;
 10 &lt;br /&gt;
 8 &lt;br /&gt;
 11 &lt;br /&gt;
 18 &lt;br /&gt;
 11 &lt;br /&gt;
 12 &lt;br /&gt;
 14 &lt;br /&gt;
 15 &lt;br /&gt;
 17&lt;br /&gt;
&amp;lt;code&amp;gt;control2.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 31&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
După ordonare se obţine şirul: &amp;lt;code&amp;gt;1 2 2 2 3 6 6 8 8 8 8 9 9 10 11 11 12 14 15 17 18&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Se obţine apoi &lt;br /&gt;
. &lt;br /&gt;
Din valorile &amp;lt;code&amp;gt;1 1 0 1&amp;lt;/code&amp;gt; se obţine numărul de control 31, care este număr prim.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
sys.stdin = open(&#039;control2.in&#039;, &#039;r&#039;)&lt;br /&gt;
sys.stdout = open(&#039;control2.out&#039;, &#039;w&#039;)&lt;br /&gt;
&lt;br /&gt;
numarGreutati = int(input())&lt;br /&gt;
greutati = list(map(int, input().split()))&lt;br /&gt;
greutati.sort()&lt;br /&gt;
&lt;br /&gt;
aparitii = []&lt;br /&gt;
numarApariti = 0&lt;br /&gt;
numarControl = 0&lt;br /&gt;
elementeSumaControl = [0, 0]&lt;br /&gt;
estePrim = 1&lt;br /&gt;
&lt;br /&gt;
i = 0&lt;br /&gt;
while i &amp;lt; numarGreutati:&lt;br /&gt;
    count = 1&lt;br /&gt;
    if greutati[i] == greutati[i+1]:&lt;br /&gt;
        while greutati[i] == greutati[i+1] and i &amp;lt; numarGreutati:&lt;br /&gt;
            count += 1&lt;br /&gt;
            i += 1&lt;br /&gt;
    aparitii.append(count)&lt;br /&gt;
    numarApariti += 1&lt;br /&gt;
    i += 1&lt;br /&gt;
&lt;br /&gt;
for i in range(0, numarApariti // 3 * 3, 3):&lt;br /&gt;
    elementeSumaControl[aparitii[i] % 2 == aparitii[i + 1] % 2 and aparitii[i] % 2 == aparitii[i + 2] % 2] += 1&lt;br /&gt;
&lt;br /&gt;
numarControl = elementeSumaControl[0] + elementeSumaControl[1] * 10&lt;br /&gt;
&lt;br /&gt;
if numarControl % 2 == 0:&lt;br /&gt;
    estePrim = (numarControl == 2)&lt;br /&gt;
else:&lt;br /&gt;
    for d in range(3, int(numarControl ** 0.5) + 1, 2):&lt;br /&gt;
        if numarControl % d == 0:&lt;br /&gt;
            estePrim = 0&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
print(numarControl, file=sys.stdout)&lt;br /&gt;
print(estePrim, file=sys.stdout)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __main__ == &#039;__name__&#039;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1697_-_Cod_1&amp;diff=9574</id>
		<title>1697 - Cod 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1697_-_Cod_1&amp;diff=9574"/>
		<updated>2024-02-01T14:55:22Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Ionel și Georgel sunt colegi de clasă și doresc să facă schimb de fișiere prin email. Fiecare dintre ei își arhivează fișierele cu câte o parolă. Fiecare copil își construiește parola pe baza unui șir format din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale.  Numerele din șir care se folosesc efectiv pentru construirea parolelor sunt &amp;#039;&amp;#039;&amp;#039;doar&amp;#039;&amp;#039;&amp;#039; cele divizibile cu numerele din mulțimea &amp;lt;code&amp;gt;{2,3,4,5,6,7,8,9,10,11,12,13,14,15}&amp;lt;/code&amp;gt;. Copiii numără câte din valorile din...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Ionel și Georgel sunt colegi de clasă și doresc să facă schimb de fișiere prin email. Fiecare dintre ei își arhivează fișierele cu câte o parolă. Fiecare copil își construiește parola pe baza unui șir format din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale.&lt;br /&gt;
&lt;br /&gt;
Numerele din șir care se folosesc efectiv pentru construirea parolelor sunt &#039;&#039;&#039;doar&#039;&#039;&#039; cele divizibile cu numerele din mulțimea &amp;lt;code&amp;gt;{2,3,4,5,6,7,8,9,10,11,12,13,14,15}&amp;lt;/code&amp;gt;. Copiii numără câte din valorile din șir sunt divizibile cu fiecare din aceste numere.&lt;br /&gt;
&lt;br /&gt;
Parola folosită de Ionel se obține prin însumarea numărului de valori din șir care sunt divizibile cu numerele din mulțimea &amp;lt;code&amp;gt;{2,3,4,5,6,7,8,9}&amp;lt;/code&amp;gt;. Parola folosită de Georgel se obține prin însumarea numărului de valori din șir care sunt divizibile cu numerele din mulțimea &amp;lt;code&amp;gt;{10,11,12,13,14,15}&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Scrieţi un program care citește șirul celor &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere și determină:&lt;br /&gt;
&lt;br /&gt;
# câte numere din șir nu se vor folosi în construirea parolelor celor doi copii;&lt;br /&gt;
# parola construită de Ionel;&lt;br /&gt;
# parola construită de Georgel.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;cod1.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;. Pentru toate testele de intrare, numărul &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; poate avea doar valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;. Pe a doua linie numărul natural &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, iar pe a treia linie, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale separate prin câte un caracter &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, se va rezolva numai punctul 1) din cerințe. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;cod1.out&amp;lt;/code&amp;gt; va conţine pe prima linie un număr natural nenul reprezentând câte numere din șir nu s-au folosit la construirea parolelor sau &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; dacă nu există astfel de numere.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, se va rezolva numai punctul 2) din cerințe. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;cod1.out&amp;lt;/code&amp;gt; va conţine pe prima linie un număr natural reprezentând parola construită de Ionel.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;, se va rezolva numai punctul 3) din cerințe. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;cod1.out&amp;lt;/code&amp;gt; va conţine pe prima linie un număr natural reprezentând parola construită de Georgel.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; N ≤ 100 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;2 ≤&amp;lt;/code&amp;gt; numărul de cifre ale unui număr &amp;lt;code&amp;gt;≤  100&amp;lt;/code&amp;gt;&lt;br /&gt;
* Se garantează că toate parolele pe care copiii le vor obține sunt nenule&lt;br /&gt;
* În fișierul de intrare ultimul număr nu este urmat de caracterul &amp;lt;code&amp;gt;#&amp;lt;/code&amp;gt;&lt;br /&gt;
* 16% din teste conțin doar numere formate din cel mult &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt; cifre&lt;br /&gt;
* Pentru rezolvarea corectă a cerinţei 1 se obțin 20 de puncte, pentru rezolvarea corectă a cerinţei 2 se obțin 40 de puncte iar pentru rezolvarea corectă a cerinţei 3 se obțin 40 de puncte&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1 =&lt;br /&gt;
&amp;lt;code&amp;gt;cod1.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 6&lt;br /&gt;
 10#20#12#34#15#23&lt;br /&gt;
&amp;lt;code&amp;gt;cod1.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3014_-_Ceva_cu_Liste&amp;diff=9573</id>
		<title>3014 - Ceva cu Liste</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3014_-_Ceva_cu_Liste&amp;diff=9573"/>
		<updated>2024-02-01T14:51:46Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Se dau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; liste, &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; e formata din bile, iar &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt; din numere. La început, în lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; sunt &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; bile. Lista &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt; conține mereu &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; numere. O iterație presupune modificarea listei &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; în felul următor: se scot instantaneu și în același timp toate bilele din lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; aflate pe pozițiile date de elementele din lista &amp;lt;code&amp;gt;L2&amp;lt;/cod...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se dau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; liste, &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt;. &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; e formata din bile, iar &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt; din numere. La început, în lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; sunt &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; bile. Lista &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt; conține mereu &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; numere. O iterație presupune modificarea listei &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; în felul următor: se scot instantaneu și în același timp toate bilele din lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; aflate pe pozițiile date de elementele din lista &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt;. O bilă este pe poziția &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; dacă înaintea bilei, în lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt;, se află &amp;lt;code&amp;gt;i-1&amp;lt;/code&amp;gt; bile. Astfel, la fiecare iterație, &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; se modifică, dar &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt; &#039;&#039;&#039;NU&#039;&#039;&#039; se modifică. Iterațiile se pot aplica până când în lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; nu se mai găsesc bile sau până când nu se mai pot scoate bile din &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
De menționat ca unele bile își schimbă poziția pe parcursul efectuării iterațiilor. De exemplu, dacă &amp;lt;code&amp;gt;L1=[$,$,$]&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;L2=[1]&amp;lt;/code&amp;gt;, după prima iterație bila de pe poziția &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; va fi scoasă din lista &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; și bilele de pe pozițiile &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt; vor ajunge pe pozițiile &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; și respectiv &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. În a doua iterație, prima bilă se va scoate (cea care inițial a fost bila de pe poziția &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;) iar bila de pe poziția &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; (inițial &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;) trece pe prima poziție. În ultima iterație bila de pe poziția &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; se scoate (inițial &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;) și lista devine goală.&lt;br /&gt;
&lt;br /&gt;
= Cerință =&lt;br /&gt;
Să se determine numărul de iterații care se pot efectua.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;cevaculiste.in&amp;lt;/code&amp;gt; conține pe prima linie două numere naturale nenule &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, reprezentând lungimea listei &amp;lt;code&amp;gt;L1&amp;lt;/code&amp;gt; și respectiv lungimea listei &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt;. Pe următoarea linie se află &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; numere în ordine crescătoare reprezentând elementele listei &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;cevaculiste.out&amp;lt;/code&amp;gt; trebuie să conțină răspunsul pentru cerință, adică numărul de iterații care se pot efectua până când nu mai putem face nicio ștergere.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N ≤ 10^18&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ M ≤ 10^5&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ L2[i] ≤ 10^18&amp;lt;/code&amp;gt; &lt;br /&gt;
* Elementele listei &amp;lt;code&amp;gt;L2&amp;lt;/code&amp;gt; sunt distincte.&lt;br /&gt;
* Pentru teste în valoare de &amp;lt;code&amp;gt;20&amp;lt;/code&amp;gt; de puncte &amp;lt;code&amp;gt;N ≤ 2*10^4 , M ≤ 10^4&amp;lt;/code&amp;gt;&lt;br /&gt;
* Pentru alte teste în valoare de &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte &amp;lt;code&amp;gt;N ≤ 10^7 , M ≤10^5&amp;lt;/code&amp;gt;&lt;br /&gt;
* Problema va fi evaluată pe teste în valoare de &amp;lt;code&amp;gt;90&amp;lt;/code&amp;gt; de puncte&lt;br /&gt;
* Se vor acorda &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte pe exemple&lt;br /&gt;
&lt;br /&gt;
= Exemplu =&lt;br /&gt;
&amp;lt;code&amp;gt;cevaculiste.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 10 3&lt;br /&gt;
 1 3 5&lt;br /&gt;
&amp;lt;code&amp;gt;cevaculiste.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 5&lt;br /&gt;
&lt;br /&gt;
= Explicație =&lt;br /&gt;
Notăm: &amp;lt;code&amp;gt;$&amp;lt;/code&amp;gt; ca bilă și   ca bilă ce se va scoate în momentul&lt;br /&gt;
&lt;br /&gt;
efectuării următoarei iterații.&lt;br /&gt;
&lt;br /&gt;
Avem la început &amp;lt;code&amp;gt;L1: [$,$,$,$,$,$,$,$,$,$]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Înainte de prima iterație: &amp;lt;code&amp;gt;[ ,$, ,$, ,$,$,$,$,$]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După prima iterație și înainte de a &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-a: &amp;lt;code&amp;gt;[ ,$, ,$, ,$,$]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După a &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;-a iterație și înainte de a &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;-a: &amp;lt;code&amp;gt;[ ,$, ,$]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După a &amp;lt;code&amp;gt;3&amp;lt;/code&amp;gt;-a iterație și înainte de a &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;-a: &amp;lt;code&amp;gt;[ ,$]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După a &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;-a iterație și înainte de a &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;-a: &amp;lt;code&amp;gt;[ ]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
După a &amp;lt;code&amp;gt;5&amp;lt;/code&amp;gt;-a iterație: &amp;lt;code&amp;gt;[]&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
# Framework: None&lt;br /&gt;
# Technology stack: None&lt;br /&gt;
&lt;br /&gt;
fin = open(&amp;quot;cevaculiste.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
fout = open(&amp;quot;cevaculiste.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
n, m = map(int, fin.readline().split())&lt;br /&gt;
v = [0] * 100001&lt;br /&gt;
c = 0&lt;br /&gt;
&lt;br /&gt;
for i in range(1, m + 1):&lt;br /&gt;
    v[i] = int(fin.readline())&lt;br /&gt;
&lt;br /&gt;
while m:&lt;br /&gt;
    if v[m] &amp;lt;= n:&lt;br /&gt;
        c += (n - v[m]) // m + 1&lt;br /&gt;
        n -= ((n - v[m]) // m + 1) * m&lt;br /&gt;
    # Simply skip the ones I don&#039;t need&lt;br /&gt;
    while m and v[m] &amp;gt; n:&lt;br /&gt;
        m -= 1&lt;br /&gt;
&lt;br /&gt;
fout.write(str(c))&lt;br /&gt;
fin.close()&lt;br /&gt;
fout.close()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2301_-_Secv&amp;diff=9572</id>
		<title>2301 - Secv</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2301_-_Secv&amp;diff=9572"/>
		<updated>2024-02-01T14:47:43Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Se consideră două numerele naturale &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; și un șir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a[N]&amp;lt;/code&amp;gt;. O secvenţă de lungime &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; este un subşir format din &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; elemente aflate pe poziţii consecutive în şir: &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[i+1]&amp;lt;/code&amp;gt;,.., &amp;lt;code&amp;gt;a[i+k-1]&amp;lt;/code&amp;gt;. Parcurgând șirul de la stânga la dreapta, începând cu primul element, se elimină prima secvență...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Se consideră două numerele naturale &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; și un șir de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a[N]&amp;lt;/code&amp;gt;. O secvenţă de lungime &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; este un subşir format din &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; elemente aflate pe poziţii consecutive în şir: &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[i+1]&amp;lt;/code&amp;gt;,.., &amp;lt;code&amp;gt;a[i+k-1]&amp;lt;/code&amp;gt;. Parcurgând șirul de la stânga la dreapta, începând cu primul element, se elimină prima secvență de lungime &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, cu suma elementelor strict mai mare decât numărul &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;. În urma ștergerii șirul va avea &amp;lt;code&amp;gt;N-K&amp;lt;/code&amp;gt; elemente: &amp;lt;code&amp;gt;a[1]&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;a[2]&amp;lt;/code&amp;gt;,…, &amp;lt;code&amp;gt;a[N-K]&amp;lt;/code&amp;gt;. Operația de ștergere continuă după aceleași reguli până când nu mai există secvențe care pot fi eliminate.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Să se scrie un program care citind numerele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt; și cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; elemente din șir rezolvă cerințele:&lt;br /&gt;
&lt;br /&gt;
1) Determină numărul secvențelor care se vor elimina respectând condiția din enunț.&lt;br /&gt;
&lt;br /&gt;
2) Considerând că în șirul citit nu sunt posibile eliminări de secvențe conform condiției din enunț, programul determină numărul de elemente &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt; din șir cu proprietatea următoare: ștergerea lui &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt; conduce la obținerea unui șir în care se mai poate elimina cel puțin o secvență de &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; elemente cu sumă strict mai mare ca &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;secv.in&amp;lt;/code&amp;gt; conține pe prima linie un număr natural &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt;; numărul &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; poate avea doar valoarea &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau valoarea &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. A doua linie conține, în această ordine, separate prin câte un spațiu, numerele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;. A treia linie conține, în ordine elementele șirului, despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, se va rezolva numai &#039;&#039;&#039;cerinta 1)&#039;&#039;&#039;. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;secv.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural reprezentând numărul secvențelor eliminate.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; este &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;, se va rezolva numai &#039;&#039;&#039;cerinta 2)&#039;&#039;&#039;. În acest caz, fişierul de ieşire &amp;lt;code&amp;gt;secv.out&amp;lt;/code&amp;gt; va conține pe prima linie un număr natural reprezentând numărul elementelor din șir care au proprietatea că ștergerea fiecăruia în parte ar genera un șir în care se mai pot elimina cel puțin o secvență de &amp;lt;code&amp;gt;K&amp;lt;/code&amp;gt; elemente cu sumă strict mai mare ca &amp;lt;code&amp;gt;S&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; N ≤ 1 000 000&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;K ≤ N&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt; S ≤ 1 000 000 000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 ≤ a[1], a[2],...,a[N] ≤ 1.000&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;secv.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 14 3 7&lt;br /&gt;
 1 2 1 3 1 4 5 2 1 4 1 8 2 3&lt;br /&gt;
&amp;lt;code&amp;gt;secv.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 3&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
MAXN = 1000001&lt;br /&gt;
A = [0] * MAXN&lt;br /&gt;
B = [0] * MAXN&lt;br /&gt;
N = 0&lt;br /&gt;
K = 0&lt;br /&gt;
S = 0&lt;br /&gt;
P = 0&lt;br /&gt;
i = 0&lt;br /&gt;
&lt;br /&gt;
def solve1():&lt;br /&gt;
    ul = 0&lt;br /&gt;
    Nr = 0&lt;br /&gt;
    global i&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        B[ul + 1] = B[ul] + A[i]  # sume partiale&lt;br /&gt;
        ul += 1&lt;br /&gt;
        if ul &amp;gt;= K and B[ul] - B[ul - K] &amp;gt; S:&lt;br /&gt;
            Nr += 1&lt;br /&gt;
            ul -= K&lt;br /&gt;
    print(Nr)&lt;br /&gt;
&lt;br /&gt;
def solve2():&lt;br /&gt;
    ul = 0&lt;br /&gt;
    global i&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        B[ul + 1] = B[ul] + A[i]&lt;br /&gt;
        ul += 1&lt;br /&gt;
        if ul &amp;gt;= K and B[ul] - B[ul - K] &amp;gt; S:&lt;br /&gt;
            print(ul - K + 1, end=&#039; &#039;)&lt;br /&gt;
            ul -= K&lt;br /&gt;
&lt;br /&gt;
def solve3():&lt;br /&gt;
    pr = 1&lt;br /&gt;
    ul = 0&lt;br /&gt;
    Nr = 0&lt;br /&gt;
    global i&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        A[i] += A[i - 1]&lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        if i + K &amp;lt;= N:&lt;br /&gt;
            while pr &amp;lt;= ul and A[i + K] - A[i - 1] &amp;gt;= A[B[ul] + K] - A[B[ul] - 1]:&lt;br /&gt;
                ul -= 1&lt;br /&gt;
            B[ul + 1] = i&lt;br /&gt;
            ul += 1&lt;br /&gt;
        if A[B[pr] + K] - A[B[pr] - 1] - (A[i] - A[i - 1]) &amp;gt; S:&lt;br /&gt;
            Nr += 1&lt;br /&gt;
        if B[pr] == i - K:&lt;br /&gt;
            pr += 1&lt;br /&gt;
    print(Nr)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    sys.stdin = open(&#039;secv.in&#039;, &#039;r&#039;)&lt;br /&gt;
    sys.stdout = open(&#039;secv.out&#039;, &#039;w&#039;)&lt;br /&gt;
    global N, K, S, P, i&lt;br /&gt;
    P = int(input())&lt;br /&gt;
    N, K, S = map(int, input().split())&lt;br /&gt;
    A[1:N+1] = map(int, input().split())&lt;br /&gt;
    if P == 1:&lt;br /&gt;
        solve1()&lt;br /&gt;
    if P == 2:&lt;br /&gt;
        solve3()&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2131_-_Ghiozdan&amp;diff=9571</id>
		<title>2131 - Ghiozdan</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2131_-_Ghiozdan&amp;diff=9571"/>
		<updated>2024-01-31T16:44:42Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  = Cerința = Iulică este acasă și trebuie să ajungă la patinoar. Patinoarul se află la exact &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; km de mers pe jos, astfel încât, dacă am considera un sistem de coordonate, casa lui Iulică se află în punctul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și patinoarul se află în punctul &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;.  Între parc și patinoar există &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; magazine din care se poate cumpăra pâine, magazine situate la &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt; km (&amp;lt;code&amp;gt;1 &amp;lt;= i &amp;lt;= k&amp;lt;/code&amp;gt;) față de casa lui I...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerința =&lt;br /&gt;
Iulică este acasă și trebuie să ajungă la patinoar. Patinoarul se află la exact &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt; km de mers pe jos, astfel încât, dacă am considera un sistem de coordonate, casa lui Iulică se află în punctul &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și patinoarul se află în punctul &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Între parc și patinoar există &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; magazine din care se poate cumpăra pâine, magazine situate la &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt; km (&amp;lt;code&amp;gt;1 &amp;lt;= i &amp;lt;= k&amp;lt;/code&amp;gt;) față de casa lui Iulică, în aceeași direcție în care se află patinoarul. Fiind foarte departe, Iulică nu poate ajunge foarte repede la patinoar. Astfel, înainte să plece, mama lui Iulică îi da un ghiozdan care poate căra cel mult &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; pâini, inițial cu &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; pâini în el. Știind că Iulică poate mânca o pâine sau poate să stea nemâncat pe parcursul unui km, și că poate sta nemâncat maximum &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt; km pe întreg traseul, aflați capacitatea minimă &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; pe care o poate avea ghiozdanul, astfel încât Iulică să poată ajunge la patinoar fără să moară de foame. Iulică îşi poate umple ghiozdanul de la fiecare magazin gratuit.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;ghiozdan.in&amp;lt;/code&amp;gt; conține pe prima linie trei numere naturale &amp;lt;code&amp;gt;d&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;t&amp;lt;/code&amp;gt;, separate prin câte un spațiu, fiecare având semnificațiile din enunț. Linia a doua conține &amp;lt;code&amp;gt;k&amp;lt;/code&amp;gt; numere naturale &amp;lt;code&amp;gt;a[i]&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1 &amp;lt;= i &amp;lt;= k&amp;lt;/code&amp;gt;), în ordine crescătoare, reprezentând distanța de la casa lui Iulică la magazinul &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Fișierul de ieșire &amp;lt;code&amp;gt;ghiozdan.out&amp;lt;/code&amp;gt; conține pe prima linie un singur număr natural reprezentând capacitatea &amp;lt;code&amp;gt;g&amp;lt;/code&amp;gt; minimă a ghiozdanului.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 &amp;lt;= d &amp;lt;= 10000000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt;= k &amp;lt;= 100000&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 &amp;lt;= a[i] &amp;lt;= d, 1 &amp;lt;= i &amp;lt;= k&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;0 &amp;lt;= t &amp;lt;= d&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;20%&amp;lt;/code&amp;gt; din teste vor avea valoarea &amp;lt;code&amp;gt;t = 0&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&amp;lt;code&amp;gt;ghiozdan.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 6 1 2&lt;br /&gt;
 3&lt;br /&gt;
&amp;lt;code&amp;gt;ghiozdan.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se observă că dacă ghiozdanul putea căra maximum o pâine, Iulică nu ar fi putut ajunge la patinoar.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
mport sys&lt;br /&gt;
&lt;br /&gt;
sys.stdin = open(&amp;quot;ghiozdan.in&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
sys.stdout = open(&amp;quot;ghiozdan.out&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
NMax = 100002&lt;br /&gt;
&lt;br /&gt;
d, k, t = map(int, input().split())&lt;br /&gt;
a = [0] * (NMax + 1)&lt;br /&gt;
a[0] = 0&lt;br /&gt;
for i in range(1, k + 1):&lt;br /&gt;
    a[i] = int(input())&lt;br /&gt;
a[k + 1] = d&lt;br /&gt;
&lt;br /&gt;
def OK(dim):&lt;br /&gt;
    drum_ramas = t&lt;br /&gt;
    for i in range(1, k + 1):&lt;br /&gt;
        if a[i] - a[i - 1] &amp;gt; dim:&lt;br /&gt;
            drum_ramas -= (a[i] - a[i - 1] - dim)&lt;br /&gt;
    if drum_ramas &amp;lt; 0:&lt;br /&gt;
        return 0&lt;br /&gt;
    return 1&lt;br /&gt;
&lt;br /&gt;
def cautbin(lo, hi):&lt;br /&gt;
    while lo &amp;lt;= hi:&lt;br /&gt;
        mid = (lo + hi) // 2&lt;br /&gt;
        ok1 = OK(mid)&lt;br /&gt;
        ok2 = OK(mid - 1)&lt;br /&gt;
        if ok1 == 1 and ok2 == 0:&lt;br /&gt;
            return mid&lt;br /&gt;
        elif ok1 == 1:&lt;br /&gt;
            hi = mid - 1&lt;br /&gt;
        elif ok2 == 0:&lt;br /&gt;
            lo = mid + 1&lt;br /&gt;
    return 0&lt;br /&gt;
&lt;br /&gt;
G = cautbin(0, d)&lt;br /&gt;
print(G)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3326_-_Turneu1&amp;diff=9570</id>
		<title>3326 - Turneu1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3326_-_Turneu1&amp;diff=9570"/>
		<updated>2024-01-31T16:41:09Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă:  = Cerință = Impresarul unei formații de muzică trebuie să primească oferte de spectacole și eventual anulări de spectacole din diferite orașe. Orașele sunt codificate prin numerele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ,.., &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1 ≤ n ≤ 20&amp;lt;/code&amp;gt;) și fiecare oraș poate organiza cel mult un spectacol. Impresarul ține legătura cu organizatorii de spectacole din aceste orașe și actualizează în permanență datele obținute. Prin fax el primește...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
= Cerință =&lt;br /&gt;
Impresarul unei formații de muzică trebuie să primească oferte de spectacole și eventual anulări de spectacole din diferite orașe. Orașele sunt codificate prin numerele &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; , &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt; ,.., &amp;lt;code&amp;gt;n&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;1 ≤ n ≤ 20&amp;lt;/code&amp;gt;) și fiecare oraș poate organiza cel mult un spectacol. Impresarul ține legătura cu organizatorii de spectacole din aceste orașe și actualizează în permanență datele obținute. Prin fax el primește &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; (&amp;lt;code&amp;gt;m ≤ 100&amp;lt;/code&amp;gt;)  mesaje, care pot fi de unul din cele două tipuri:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;D&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
sau&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;code&amp;gt;nr&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Cu semnificațiile: pentru primul mesaj se dorește organizarea unui concert în orașul &amp;lt;code&amp;gt;nr&amp;lt;/code&amp;gt;, iar pentru a-l doilea mesaj se dorește anularea spectacolului din orașul &amp;lt;code&amp;gt;nr&amp;lt;/code&amp;gt; . Un mesaj este format din exact două linii.&lt;br /&gt;
&lt;br /&gt;
Se cere:&lt;br /&gt;
&lt;br /&gt;
a)	Să se afișeze orașele în care va concerta formația de muzică (pe aceeași linie cu un spațiu între ele).&lt;br /&gt;
&lt;br /&gt;
b)	Să se afișeze orașul (sau orașele dacă sunt mai multe, pe aceeași linie cu un spațiu între ele) în care organizatorii sunt cei mai nedeciși (adică au anulat și propus organizarea de spectacol în orașul lor de cele mai multe ori).&lt;br /&gt;
&lt;br /&gt;
c)	Să se afișeze numărul de orașe care nu au trimis nici un mesaj impresarului.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Programul citește de la tastatură numărul &amp;lt;code&amp;gt;n m&amp;lt;/code&amp;gt;, cele &amp;lt;code&amp;gt;m&amp;lt;/code&amp;gt; mesaje: un caracter care poate sa fie &amp;lt;code&amp;gt;&#039;D&#039;&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;&#039;N&#039;&amp;lt;/code&amp;gt; și un număr natural &amp;lt;code&amp;gt;a&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
Programul afișează pe prima linie orașele în care va concerta formația, pe următoarea linie orașele în care organizatorii sunt cei mai indeciși și pe ultima linie numărul de orașe care nu au trimis nici un mesaj impresarului.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ n ≤ 20&amp;lt;/code&amp;gt;&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ m ≤ 100&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu: =&lt;br /&gt;
&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
 5 6&lt;br /&gt;
 D&lt;br /&gt;
 2&lt;br /&gt;
 D&lt;br /&gt;
 3&lt;br /&gt;
 N&lt;br /&gt;
 3&lt;br /&gt;
 D&lt;br /&gt;
 3&lt;br /&gt;
 D&lt;br /&gt;
 5&lt;br /&gt;
 N&lt;br /&gt;
 2&lt;br /&gt;
&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
 3 5&lt;br /&gt;
 3&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
f = [0]*101&lt;br /&gt;
f1 = [0]*101&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, m = map(int, input().split())&lt;br /&gt;
    for i in range(1, m+1):&lt;br /&gt;
        c, a = input().split()&lt;br /&gt;
        a = int(a)&lt;br /&gt;
        f1[a] += 1&lt;br /&gt;
        if c == &#039;D&#039;:&lt;br /&gt;
            f[a] += 1&lt;br /&gt;
        else:&lt;br /&gt;
            f[a] -= 1&lt;br /&gt;
    maxx = 0&lt;br /&gt;
    cnt1 = 0&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        if f1[i] == 0:&lt;br /&gt;
            cnt1 += 1&lt;br /&gt;
        if f[i] &amp;gt; 0:&lt;br /&gt;
            print(i, end=&#039; &#039;)&lt;br /&gt;
        if f1[i] &amp;gt; maxx:&lt;br /&gt;
            maxx = f1[i]&lt;br /&gt;
    print()&lt;br /&gt;
    for i in range(1, n+1):&lt;br /&gt;
        if f1[i] == maxx:&lt;br /&gt;
            print(i, end=&#039; &#039;)&lt;br /&gt;
    print()&lt;br /&gt;
    print(cnt1)&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>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2976_-_maxim7&amp;diff=9569</id>
		<title>2976 - maxim7</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2976_-_maxim7&amp;diff=9569"/>
		<updated>2024-01-31T16:37:58Z</updated>

		<summary type="html">&lt;p&gt;Raul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dintr-un șir format din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, Ionel ia exact &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive. El lipește cifrele luate sau le amestecă și apoi le lipește pentru a obține cu ele un număr cât mai mare.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; și cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre din șir, să se determine:&lt;br /&gt;
&lt;br /&gt;
1) cel mai mare număr care se poate obține din primele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; dintre cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre date;&lt;br /&gt;
&lt;br /&gt;
2) de unde va lua Ionel &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive pentru a obține un număr maxim; dacă sunt mai multe poziții corespunzătoare unui număr maxim, alegerea se va face astfel încât numărul format din cifrele rămase, în ordinea în care erau, să fie cât mai mare posibil; dacă și în acest caz există mai multe soluții, se alege poziția maximă.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Din fișierul &amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt; se citesc: &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; de pe prima linie, reprezentând cerința problemei (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; de pe a doua linie, despărțite printr-un spațiu, cu semnificația din enunț, iar de pe linia a treia, se citesc cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul &amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt; se scrie:&lt;br /&gt;
&lt;br /&gt;
- pentru &amp;lt;code&amp;gt;P = 1&amp;lt;/code&amp;gt;: numărul maxim care se poate obține cu ajutorul primelor &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre dintre cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; date, fără spații între cifrele numărului;&lt;br /&gt;
&lt;br /&gt;
- pentru &amp;lt;code&amp;gt;P = 2&amp;lt;/code&amp;gt;: un număr reprezentând poziția cerută.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale, &amp;lt;code&amp;gt;1 ≤ N ≤ 500000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 ≤ M ≤ 1000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M &amp;lt; N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori de pe linia a treia sunt numere naturale între &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secvența de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre poate să înceapă cu cel mult &amp;lt;code&amp;gt;M - 1&amp;lt;/code&amp;gt; cifre nule.&lt;br /&gt;
* &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte se vor obține cu rezolvarea cerinței &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; de puncte se vor obține cu rezolvarea cerinței &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru &amp;lt;code&amp;gt;50%&amp;lt;/code&amp;gt; dintre teste, &amp;lt;code&amp;gt;N &amp;lt; 1000&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M &amp;lt; 10&amp;lt;/code&amp;gt;.&lt;br /&gt;
* În concurs s-au acordat &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte din oficiu. Aici se acordă pentru exemplele din enunț.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 10 3&lt;br /&gt;
 7 2 8 1 0 0 4 7 8 1&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 872&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se rezolvă cerința &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Cu primele trei cifre dintre cele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; cifre date se pot forma numerele: &amp;lt;code&amp;gt;728&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;782&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;287&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;278&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;827&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;872&amp;lt;/code&amp;gt;, cel mai mare fiind &amp;lt;code&amp;gt;872&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
&lt;br /&gt;
 10 3&lt;br /&gt;
 7 2 8 1 0 0 4 7 8 1&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se rezolvă cerința &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. Alegând cifrele începând de la poziția a &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;-a (cifrele &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;), se va forma numărul &amp;lt;code&amp;gt;874&amp;lt;/code&amp;gt;, care este cel mai mare posibil.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import array as arr&lt;br /&gt;
&lt;br /&gt;
dim = 500008&lt;br /&gt;
v = arr.array(&#039;h&#039;, [0] * dim)&lt;br /&gt;
&lt;br /&gt;
w = [0] * 10&lt;br /&gt;
W = [0] * 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
with open(&amp;quot;maxim.in&amp;quot;, &amp;quot;r&amp;quot;) as f, open(&amp;quot;maxim.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    N, i, j, poz, M, x, z, k, ii = 0, 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
    ok = 1&lt;br /&gt;
    p = int(f.readline())&lt;br /&gt;
&lt;br /&gt;
    input_data = f.readline().split()&lt;br /&gt;
    N = int(input_data[0])&lt;br /&gt;
    M = int(input_data[1])&lt;br /&gt;
&lt;br /&gt;
    v[1:N+1] = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, N+1):&lt;br /&gt;
        x = v[i]&lt;br /&gt;
        w[x] += 1&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        if w[0] == M:&lt;br /&gt;
            g.write(&amp;quot;0&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for j in range(9, -1, -1):&lt;br /&gt;
                for i in range(1, w[j]+1):&lt;br /&gt;
                    g.write(str(j))&lt;br /&gt;
&lt;br /&gt;
    if p == 2:&lt;br /&gt;
        for j in range(10):&lt;br /&gt;
            W[j] = w[j]&lt;br /&gt;
&lt;br /&gt;
        for i in range(M+1, N+1):&lt;br /&gt;
            x = v[i]&lt;br /&gt;
            w[x] += 1&lt;br /&gt;
            z = v[i-M]&lt;br /&gt;
            w[z] -= 1&lt;br /&gt;
            ok = 1&lt;br /&gt;
            for j in range(9, 0, -1):&lt;br /&gt;
                if W[j] != w[j]:&lt;br /&gt;
                    if w[j] &amp;gt; W[j]:&lt;br /&gt;
                        ok = 2&lt;br /&gt;
                        W = w[:]&lt;br /&gt;
                        poz = i - M + 1&lt;br /&gt;
                    else:&lt;br /&gt;
                        ok = 0&lt;br /&gt;
                    break&lt;br /&gt;
            if ok == 1:&lt;br /&gt;
                poz = i - M + 1&lt;br /&gt;
&lt;br /&gt;
        g.write(str(poz))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
  main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2976_-_maxim7&amp;diff=9568</id>
		<title>2976 - maxim7</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2976_-_maxim7&amp;diff=9568"/>
		<updated>2024-01-31T16:36:55Z</updated>

		<summary type="html">&lt;p&gt;Raul: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dintr-un șir format din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, Ionel ia exact &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive. El lipește cifrele luate sau le amestecă și apoi le lipește pentru a obține cu ele un număr cât mai mare.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; și cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre din șir, să se determine:&lt;br /&gt;
&lt;br /&gt;
1) cel mai mare număr care se poate obține din primele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; dintre cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre date;&lt;br /&gt;
&lt;br /&gt;
2) de unde va lua Ionel &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive pentru a obține un număr maxim; dacă sunt mai multe poziții corespunzătoare unui număr maxim, alegerea se va face astfel încât numărul format din cifrele rămase, în ordinea în care erau, să fie cât mai mare posibil; dacă și în acest caz există mai multe soluții, se alege poziția maximă.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Din fișierul &amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt; se citesc: &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; de pe prima linie, reprezentând cerința problemei (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; de pe a doua linie, despărțite printr-un spațiu, cu semnificația din enunț, iar de pe linia a treia, se citesc cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul &amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt; se scrie:&lt;br /&gt;
&lt;br /&gt;
- pentru &amp;lt;code&amp;gt;P = 1&amp;lt;/code&amp;gt;: numărul maxim care se poate obține cu ajutorul primelor &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre dintre cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; date, fără spații între cifrele numărului;&lt;br /&gt;
&lt;br /&gt;
- pentru &amp;lt;code&amp;gt;P = 2&amp;lt;/code&amp;gt;: un număr reprezentând poziția cerută.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale, &amp;lt;code&amp;gt;1 ≤ N ≤ 500000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 ≤ M ≤ 1000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M &amp;lt; N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori de pe linia a treia sunt numere naturale între &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secvența de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre poate să înceapă cu cel mult &amp;lt;code&amp;gt;M - 1&amp;lt;/code&amp;gt; cifre nule.&lt;br /&gt;
* &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte se vor obține cu rezolvarea cerinței &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; de puncte se vor obține cu rezolvarea cerinței &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru &amp;lt;code&amp;gt;50%&amp;lt;/code&amp;gt; dintre teste, &amp;lt;code&amp;gt;N &amp;lt; 1000&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M &amp;lt; 10&amp;lt;/code&amp;gt;.&lt;br /&gt;
* În concurs s-au acordat &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte din oficiu. Aici se acordă pentru exemplele din enunț.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 10 3&lt;br /&gt;
 7 2 8 1 0 0 4 7 8 1&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 872&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se rezolvă cerința &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Cu primele trei cifre dintre cele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; cifre date se pot forma numerele: &amp;lt;code&amp;gt;728&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;782&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;287&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;278&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;827&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;872&amp;lt;/code&amp;gt;, cel mai mare fiind &amp;lt;code&amp;gt;872&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import array as arr&lt;br /&gt;
&lt;br /&gt;
dim = 500008&lt;br /&gt;
v = arr.array(&#039;h&#039;, [0] * dim)&lt;br /&gt;
&lt;br /&gt;
w = [0] * 10&lt;br /&gt;
W = [0] * 10&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
with open(&amp;quot;maxim.in&amp;quot;, &amp;quot;r&amp;quot;) as f, open(&amp;quot;maxim.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    N, i, j, poz, M, x, z, k, ii = 0, 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
    ok = 1&lt;br /&gt;
    p = int(f.readline())&lt;br /&gt;
&lt;br /&gt;
    input_data = f.readline().split()&lt;br /&gt;
    N = int(input_data[0])&lt;br /&gt;
    M = int(input_data[1])&lt;br /&gt;
&lt;br /&gt;
    v[1:N+1] = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, N+1):&lt;br /&gt;
        x = v[i]&lt;br /&gt;
        w[x] += 1&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        if w[0] == M:&lt;br /&gt;
            g.write(&amp;quot;0&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for j in range(9, -1, -1):&lt;br /&gt;
                for i in range(1, w[j]+1):&lt;br /&gt;
                    g.write(str(j))&lt;br /&gt;
&lt;br /&gt;
    if p == 2:&lt;br /&gt;
        for j in range(10):&lt;br /&gt;
            W[j] = w[j]&lt;br /&gt;
&lt;br /&gt;
        for i in range(M+1, N+1):&lt;br /&gt;
            x = v[i]&lt;br /&gt;
            w[x] += 1&lt;br /&gt;
            z = v[i-M]&lt;br /&gt;
            w[z] -= 1&lt;br /&gt;
            ok = 1&lt;br /&gt;
            for j in range(9, 0, -1):&lt;br /&gt;
                if W[j] != w[j]:&lt;br /&gt;
                    if w[j] &amp;gt; W[j]:&lt;br /&gt;
                        ok = 2&lt;br /&gt;
                        W = w[:]&lt;br /&gt;
                        poz = i - M + 1&lt;br /&gt;
                    else:&lt;br /&gt;
                        ok = 0&lt;br /&gt;
                    break&lt;br /&gt;
            if ok == 1:&lt;br /&gt;
                poz = i - M + 1&lt;br /&gt;
&lt;br /&gt;
        g.write(str(poz))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
   main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 10 3&lt;br /&gt;
 7 2 8 1 0 0 4 7 8 1&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se rezolvă cerința &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. Alegând cifrele începând de la poziția a &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;-a (cifrele &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;), se va forma numărul &amp;lt;code&amp;gt;874&amp;lt;/code&amp;gt;, care este cel mai mare posibil.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2976_-_maxim7&amp;diff=9567</id>
		<title>2976 - maxim7</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2976_-_maxim7&amp;diff=9567"/>
		<updated>2024-01-31T16:35:36Z</updated>

		<summary type="html">&lt;p&gt;Raul: Pagină nouă: Dintr-un șir format din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, Ionel ia exact &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive. El lipește cifrele luate sau le amestecă și apoi le lipește pentru a obține cu ele un număr cât mai mare.  = Cerința = Cunoscând &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; și cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre din șir, să se determine:  1) cel mai mare număr care se poate obține din primele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; dintre cele &amp;lt;c...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Dintr-un șir format din &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, Ionel ia exact &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive. El lipește cifrele luate sau le amestecă și apoi le lipește pentru a obține cu ele un număr cât mai mare.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Cunoscând &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; și cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre din șir, să se determine:&lt;br /&gt;
&lt;br /&gt;
1) cel mai mare număr care se poate obține din primele &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; dintre cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre date;&lt;br /&gt;
&lt;br /&gt;
2) de unde va lua Ionel &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre aflate pe poziții consecutive pentru a obține un număr maxim; dacă sunt mai multe poziții corespunzătoare unui număr maxim, alegerea se va face astfel încât numărul format din cifrele rămase, în ordinea în care erau, să fie cât mai mare posibil; dacă și în acest caz există mai multe soluții, se alege poziția maximă.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Din fișierul &amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt; se citesc: &amp;lt;code&amp;gt;P&amp;lt;/code&amp;gt; de pe prima linie, reprezentând cerința problemei (&amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; sau &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;), &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; de pe a doua linie, despărțite printr-un spațiu, cu semnificația din enunț, iar de pe linia a treia, se citesc cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre, despărțite prin câte un spațiu.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul &amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt; se scrie:&lt;br /&gt;
&lt;br /&gt;
- pentru &amp;lt;code&amp;gt;P = 1&amp;lt;/code&amp;gt;: numărul maxim care se poate obține cu ajutorul primelor &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; cifre dintre cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; date, fără spații între cifrele numărului;&lt;br /&gt;
&lt;br /&gt;
- pentru &amp;lt;code&amp;gt;P = 2&amp;lt;/code&amp;gt;: un număr reprezentând poziția cerută.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; numere naturale, &amp;lt;code&amp;gt;1 ≤ N ≤ 500000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;1 ≤ M ≤ 1000&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;M &amp;lt; N&amp;lt;/code&amp;gt;&lt;br /&gt;
* Cele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; valori de pe linia a treia sunt numere naturale între &amp;lt;code&amp;gt;0&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;9&amp;lt;/code&amp;gt;&lt;br /&gt;
* Secvența de &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; cifre poate să înceapă cu cel mult &amp;lt;code&amp;gt;M - 1&amp;lt;/code&amp;gt; cifre nule.&lt;br /&gt;
* &amp;lt;code&amp;gt;30&amp;lt;/code&amp;gt; de puncte se vor obține cu rezolvarea cerinței &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;, iar &amp;lt;code&amp;gt;60&amp;lt;/code&amp;gt; de puncte se vor obține cu rezolvarea cerinței &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;.&lt;br /&gt;
* Pentru &amp;lt;code&amp;gt;50%&amp;lt;/code&amp;gt; dintre teste, &amp;lt;code&amp;gt;N &amp;lt; 1000&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M &amp;lt; 10&amp;lt;/code&amp;gt;.&lt;br /&gt;
* În concurs s-au acordat &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; puncte din oficiu. Aici se acordă pentru exemplele din enunț.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 1&lt;br /&gt;
 10 3&lt;br /&gt;
 7 2 8 1 0 0 4 7 8 1&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 872&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se rezolvă cerința &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt;. Cu primele trei cifre dintre cele &amp;lt;code&amp;gt;10&amp;lt;/code&amp;gt; cifre date se pot forma numerele: &amp;lt;code&amp;gt;728&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;782&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;287&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;278&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;827&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;872&amp;lt;/code&amp;gt;, cel mai mare fiind &amp;lt;code&amp;gt;872&amp;lt;/code&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
= Exemplul 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.in&amp;lt;/code&amp;gt;&lt;br /&gt;
 2&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
import array as arr&lt;br /&gt;
&lt;br /&gt;
dim = 500008&lt;br /&gt;
v = arr.array(&#039;h&#039;, [0] * dim)&lt;br /&gt;
&lt;br /&gt;
w = [0] * 10&lt;br /&gt;
W = [0] * 10&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;maxim.in&amp;quot;, &amp;quot;r&amp;quot;) as f, open(&amp;quot;maxim.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    N, i, j, poz, M, x, z, k, ii = 0, 0, 0, 0, 0, 0, 0, 0, 0&lt;br /&gt;
    ok = 1&lt;br /&gt;
    p = int(f.readline())&lt;br /&gt;
&lt;br /&gt;
    input_data = f.readline().split()&lt;br /&gt;
    N = int(input_data[0])&lt;br /&gt;
    M = int(input_data[1])&lt;br /&gt;
&lt;br /&gt;
    v[1:N+1] = map(int, f.readline().split())&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, N+1):&lt;br /&gt;
        x = v[i]&lt;br /&gt;
        w[x] += 1&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        if w[0] == M:&lt;br /&gt;
            g.write(&amp;quot;0&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for j in range(9, -1, -1):&lt;br /&gt;
                for i in range(1, w[j]+1):&lt;br /&gt;
                    g.write(str(j))&lt;br /&gt;
&lt;br /&gt;
    if p == 2:&lt;br /&gt;
        for j in range(10):&lt;br /&gt;
            W[j] = w[j]&lt;br /&gt;
&lt;br /&gt;
        for i in range(M+1, N+1):&lt;br /&gt;
            x = v[i]&lt;br /&gt;
            w[x] += 1&lt;br /&gt;
            z = v[i-M]&lt;br /&gt;
            w[z] -= 1&lt;br /&gt;
            ok = 1&lt;br /&gt;
            for j in range(9, 0, -1):&lt;br /&gt;
                if W[j] != w[j]:&lt;br /&gt;
                    if w[j] &amp;gt; W[j]:&lt;br /&gt;
                        ok = 2&lt;br /&gt;
                        W = w[:]&lt;br /&gt;
                        poz = i - M + 1&lt;br /&gt;
                    else:&lt;br /&gt;
                        ok = 0&lt;br /&gt;
                    break&lt;br /&gt;
            if ok == 1:&lt;br /&gt;
                poz = i - M + 1&lt;br /&gt;
&lt;br /&gt;
        g.write(str(poz))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
 10 3&lt;br /&gt;
 7 2 8 1 0 0 4 7 8 1&lt;br /&gt;
&amp;lt;code&amp;gt;maxim.out&amp;lt;/code&amp;gt;&lt;br /&gt;
 7&lt;br /&gt;
&lt;br /&gt;
=== Explicație ===&lt;br /&gt;
Se rezolvă cerința &amp;lt;code&amp;gt;2&amp;lt;/code&amp;gt;. Alegând cifrele începând de la poziția a &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt;-a (cifrele &amp;lt;code&amp;gt;4&amp;lt;/code&amp;gt;, &amp;lt;code&amp;gt;7&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;8&amp;lt;/code&amp;gt;), se va forma numărul &amp;lt;code&amp;gt;874&amp;lt;/code&amp;gt;, care este cel mai mare posibil.&lt;br /&gt;
&lt;br /&gt;
== Încărcare soluție ==&lt;br /&gt;
&lt;br /&gt;
=== Lipește codul aici ===&lt;/div&gt;</summary>
		<author><name>Raul</name></author>
	</entry>
</feed>