<?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=Ramona+Drago%C8%99</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=Ramona+Drago%C8%99"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Ramona_Drago%C8%99"/>
	<updated>2026-06-17T02:45:47Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1289_-_CifreGen2&amp;diff=9215</id>
		<title>1289 - CifreGen2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1289_-_CifreGen2&amp;diff=9215"/>
		<updated>2024-01-08T17:03:35Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: Pagină nouă: == Cerința == Se dă un număr natural &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;. Să se genereze toate numerele cu exact &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; cifre prime.  == Date de intrare == Programul citește de la tastatură numărul &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039;.  == Date de ieșire == Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare.  == Restricții și precizări == *&amp;#039;&amp;#039;&amp;#039;1 &amp;amp;les; n &amp;amp;les; 7&amp;#039;&amp;#039;&amp;#039; == Exemplul 1 == ;&amp;#039;&amp;#039;&amp;#039;Intrare&amp;#039;&amp;#039;&amp;#039; :2 ;&amp;#039;&amp;#039;&amp;#039;Ieșire&amp;#039;&amp;#039;&amp;#039; :22 :23 :25 :27 :32 :33 :35 :37 :52 :53 :55 :57 :72 :73 :75 :77 ==...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se genereze toate numerele cu exact &#039;&#039;&#039;n&#039;&#039;&#039; cifre prime.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran numerele generate, câte unul pe linie, în ordine crescătoare.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 7&#039;&#039;&#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:2&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:22&lt;br /&gt;
:23&lt;br /&gt;
:25&lt;br /&gt;
:27&lt;br /&gt;
:32&lt;br /&gt;
:33&lt;br /&gt;
:35&lt;br /&gt;
:37&lt;br /&gt;
:52&lt;br /&gt;
:53&lt;br /&gt;
:55&lt;br /&gt;
:57&lt;br /&gt;
:72&lt;br /&gt;
:73&lt;br /&gt;
:75&lt;br /&gt;
:77&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele nu corespund restrictiilor impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1289 - CifreGen2&lt;br /&gt;
n = 0&lt;br /&gt;
x = [0] * 10&lt;br /&gt;
prime = [2, 3, 5, 7]&lt;br /&gt;
&lt;br /&gt;
def read():&lt;br /&gt;
    global n&lt;br /&gt;
    n = int(input())&lt;br /&gt;
&lt;br /&gt;
def display():&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        print(x[i], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def check_restrictions():&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 7&lt;br /&gt;
&lt;br /&gt;
def backtracking(k):&lt;br /&gt;
    if k &amp;gt; n:&lt;br /&gt;
        display()&lt;br /&gt;
    else:&lt;br /&gt;
        for i in range(4):&lt;br /&gt;
            x[k] = prime[i]&lt;br /&gt;
            backtracking(k + 1)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    read()&lt;br /&gt;
    if not check_restrictions():&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        backtracking(1)&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3921_-_CainiSiPisici2&amp;diff=9213</id>
		<title>3921 - CainiSiPisici2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3921_-_CainiSiPisici2&amp;diff=9213"/>
		<updated>2024-01-08T16:58:12Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: Pagină nouă: == Cerința == Într-o curte se află câini și pisici. Să se genereze în ordine lexicografică șirurile formate din &amp;#039;&amp;#039;&amp;#039;n&amp;#039;&amp;#039;&amp;#039; animale, care : :încep cu câine și se termină cu pisică; :conțin cel mult &amp;#039;&amp;#039;&amp;#039;m&amp;#039;&amp;#039;&amp;#039; pisici; :nu conțin nicio pisică între doi câini. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;n m&amp;#039;&amp;#039;&amp;#039;.  == Date de ieșire == Programul va afișa pe rânduri separate ale ecranului șiruri formate din n caractere: &amp;#039;C&amp;#039; (câine) sau &amp;#039;P&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-o curte se află câini și pisici. Să se genereze în ordine lexicografică șirurile formate din &#039;&#039;&#039;n&#039;&#039;&#039; animale, care :&lt;br /&gt;
:încep cu câine și se termină cu pisică;&lt;br /&gt;
:conțin cel mult &#039;&#039;&#039;m&#039;&#039;&#039; pisici;&lt;br /&gt;
:nu conțin nicio pisică între doi câini.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n m&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe rânduri separate ale ecranului șiruri formate din n caractere: &#039;C&#039; (câine) sau &#039;P&#039; (pisică), conform enunțului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; m &amp;amp;les; n *les; 20&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:6 3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:CCCCCP&lt;br /&gt;
:CCCCPP&lt;br /&gt;
:CCCPPP&lt;br /&gt;
:CCPPCP&lt;br /&gt;
:CPPCCP&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3921 - CainiSiPisici2&lt;br /&gt;
A = [&#039;C&#039;, &#039;P&#039;]&lt;br /&gt;
&lt;br /&gt;
def afisare(L):&lt;br /&gt;
    for i in range(1, L + 1):&lt;br /&gt;
        print(A[x[i]], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def ok(k):&lt;br /&gt;
    if k == 1 and x[k] != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k == n and x[k] != 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if m &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k &amp;gt; 2 and x[k] == 0 and x[k - 1] == 1 and x[k - 2] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def check_constraints(n, m):&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= n &amp;lt;= 20):&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def back(k):&lt;br /&gt;
    global m&lt;br /&gt;
    for i in range(2):&lt;br /&gt;
        x[k] = i&lt;br /&gt;
        if i == 1:&lt;br /&gt;
            m -= 1&lt;br /&gt;
        if ok(k):&lt;br /&gt;
            if k == n:&lt;br /&gt;
                afisare(n)&lt;br /&gt;
            else:&lt;br /&gt;
                back(k + 1)&lt;br /&gt;
        if i == 1:&lt;br /&gt;
            m += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if not check_constraints(n, m):&lt;br /&gt;
        exit()&lt;br /&gt;
&lt;br /&gt;
    x = [0] * 21&lt;br /&gt;
    back(1)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0548_-_Hamilton&amp;diff=9212</id>
		<title>0548 - Hamilton</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0548_-_Hamilton&amp;diff=9212"/>
		<updated>2024-01-08T16:52:37Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri. Determinați, dacă există, un ciclu hamiltonian.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039; conține pe prima linie numărul n, iar pe a următoarele linii perechi de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie de la i la j.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039; va conține pe prima linie numărul 1, dacă s-a determinat un ciclu hamiltonian, respectiv 0, în caz contrar. Dacă s-a determinat un ciclu hamiltonian, pe linia următoare se vor afișa vârfurile acestui ciclu, separate prin exact un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 10&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; i, j &amp;amp;les; n&#039;&#039;&#039;&lt;br /&gt;
*în ciclul afișat, primul și ultimul vârf sunt egale&lt;br /&gt;
*orice ciclu hamiltonian afișat va fi acceptat&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039;&lt;br /&gt;
:9&lt;br /&gt;
:1 2&lt;br /&gt;
;1 4&lt;br /&gt;
:2 3&lt;br /&gt;
:2 4&lt;br /&gt;
:2 5&lt;br /&gt;
:3 4&lt;br /&gt;
:3 8&lt;br /&gt;
:3 9&lt;br /&gt;
:4 6&lt;br /&gt;
:5 6&lt;br /&gt;
:5 7&lt;br /&gt;
:5 8&lt;br /&gt;
:7 8&lt;br /&gt;
:8 9&lt;br /&gt;
;&#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039;&lt;br /&gt;
:1&lt;br /&gt;
:1 2 3 9 8 7 5 6 4 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
: 0 0&lt;br /&gt;
;&#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0548 - Hamilton&lt;br /&gt;
def check_constraints(n, a):&lt;br /&gt;
    # Check constraints 1 ≤ n ≤ 10&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10):&lt;br /&gt;
        with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            g.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Check constraints 1 ≤ i, j ≤ n&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 (0 &amp;lt;= a[i][j] &amp;lt;= 1):  # Corrected condition here&lt;br /&gt;
                with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
                    g.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def backtracking():&lt;br /&gt;
    global k&lt;br /&gt;
    k = 1&lt;br /&gt;
    while k &amp;gt; 0:&lt;br /&gt;
        if st[k] &amp;lt; n:&lt;br /&gt;
            st[k] += 1&lt;br /&gt;
            if e_valid():&lt;br /&gt;
                if k == n:&lt;br /&gt;
                    afisare()&lt;br /&gt;
                else:&lt;br /&gt;
                    k += 1&lt;br /&gt;
                    st[k] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            k -= 1&lt;br /&gt;
&lt;br /&gt;
def e_valid():&lt;br /&gt;
    global k&lt;br /&gt;
    if k &amp;gt; 1:&lt;br /&gt;
        if not a[st[k - 1]][st[k]]:&lt;br /&gt;
            return 0&lt;br /&gt;
        else:&lt;br /&gt;
            for i in range(1, k):&lt;br /&gt;
                if st[i] == st[k]:&lt;br /&gt;
                    return 0&lt;br /&gt;
    if k == n:&lt;br /&gt;
        if not a[st[1]][st[k]]:&lt;br /&gt;
            return 0&lt;br /&gt;
    return 1&lt;br /&gt;
&lt;br /&gt;
def afisare():&lt;br /&gt;
    global k, ns&lt;br /&gt;
    with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;a&amp;quot;) as g:&lt;br /&gt;
        g.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
        g.write(&amp;quot; &amp;quot;.join(map(str, st[1:n + 1])) + &amp;quot; &amp;quot; + str(st[1]) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    k = 0&lt;br /&gt;
    ns += 1&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;hamiltonin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline().strip())&lt;br /&gt;
    a = [[0] * (n + 1) for _ in range(n + 1)]&lt;br /&gt;
    for line in f:&lt;br /&gt;
        u, v = map(int, line.strip().split())&lt;br /&gt;
        a[u][v] = a[v][u] = 1&lt;br /&gt;
&lt;br /&gt;
# Check constraints before proceeding with backtracking&lt;br /&gt;
if not check_constraints(n, a):&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
ns = 0&lt;br /&gt;
st = [0] * 100&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    backtracking()&lt;br /&gt;
    if ns == 0:&lt;br /&gt;
        g.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1116_-_Karb&amp;diff=9210</id>
		<title>1116 - Karb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1116_-_Karb&amp;diff=9210"/>
		<updated>2024-01-08T16:51:22Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
În perioada Campionatului Mondial din Brazilia se preconizează o creştere a traficului de cafea. Se ştie că sunt &#039;&#039;&#039;N&#039;&#039;&#039; orase, conectate prin &#039;&#039;&#039;N-1&#039;&#039;&#039; străzi bidirecţionale, astfel încât se poate ajunge din orice oraş în altul. În prezent există &#039;&#039;&#039;K&#039;&#039;&#039; carteluri de cafea aflate în oraşe distincte, care își exercita influența în propriul oraș. Se ştie că fiecare din aceste carteluri doreşte să-şi extindă influenţa în oraşele vecine. Astfel, la un moment de timp, un cartel poate să-şi extindă influenţa într-un oraş vecin doar dacă acesta nu se află sub influenţa altui cartel. O dată ce un cartel îşi extinde influenta asupra unui nou oraş, cartelul îşi poate extinde influenţa şi în oraşele vecine acestuia. Se ştie că până la începerea campionatului mondial, fiecare oraş va fi sub influenţa unui cartel.&lt;br /&gt;
&lt;br /&gt;
ABIN (Agência Brasileira de Inteligência) doreşte să afle în câte moduri poate fi dominată ţara de influenţele celor &#039;&#039;&#039;K&#039;&#039;&#039; carteluri la data începerii campionatului mondial, modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Cerință ==&lt;br /&gt;
Cunoscând numărul de orașe &#039;&#039;&#039;N&#039;&#039;&#039;, modul în care acestea sunt conectate, numărul de carteluri inițiale &#039;&#039;&#039;K&#039;&#039;&#039; și cele &#039;&#039;&#039;K&#039;&#039;&#039; orașe în care se află cartelurile, să se determine numărul de moduri în care ţara poate fi împărţită între cartelurile de cafea, modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;karbin.txt&#039;&#039;&#039; conține pe prima linie două numere naturale &#039;&#039;&#039;N&#039;&#039;&#039; şi &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul de oraşe, respectiv numărul cartelurilor existente iniţial. Pe a doua linie din fişier se vor afla &#039;&#039;&#039;K&#039;&#039;&#039; numere, reprezentând oraşele în care se află cele &#039;&#039;&#039;K&#039;&#039;&#039; carteluri. Pe următoarele &#039;&#039;&#039;N-1&#039;&#039;&#039; linii se vor afla câte două numere naturale, reprezentând o legătură între cele două oraşe.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;karbout.txt&#039;&#039;&#039; va conține pe prima linie un singur număr natural reprezentând numărul de moduri modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; K &amp;amp;les; N &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*Pentru teste în valoare de 10% din punctaj se garantează că &#039;&#039;&#039;k &amp;amp;les; n &amp;amp;les; 7&#039;&#039;&#039;, iar pentru alte 20% din teste se garantează că &#039;&#039;&#039;k = 2&#039;&#039;&#039;.&lt;br /&gt;
*Două oraşe sunt vecine dacă există o stradă bidirecțională între ele.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;karbin.txt&#039;&#039;&#039;&lt;br /&gt;
:6 3&lt;br /&gt;
:3 4 5&lt;br /&gt;
:1 2 &lt;br /&gt;
:1 3 &lt;br /&gt;
:2 4 &lt;br /&gt;
:2 5 &lt;br /&gt;
:4 6&lt;br /&gt;
;&#039;&#039;&#039;karbout.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;karbin.txt&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;karbout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1116 - Karb&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
mod = 666013&lt;br /&gt;
maxdim = 200005&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, k):&lt;br /&gt;
    if not (1 &amp;lt;= k &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        with open(&amp;quot;karbout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Datele nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        sys.exit()&lt;br /&gt;
&lt;br /&gt;
def dfs(nod):&lt;br /&gt;
    global D, T, special, viz, G&lt;br /&gt;
&lt;br /&gt;
    viz[nod] = 1&lt;br /&gt;
&lt;br /&gt;
    sons = 0&lt;br /&gt;
    for fiu in G[nod]:&lt;br /&gt;
        if viz[fiu]:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        sons += 1&lt;br /&gt;
        T[fiu] = nod&lt;br /&gt;
        dfs(fiu)&lt;br /&gt;
&lt;br /&gt;
    if not sons:&lt;br /&gt;
        if special[nod]:&lt;br /&gt;
            D[nod][0], D[nod][1] = 0, 1&lt;br /&gt;
        else:&lt;br /&gt;
            D[nod][0], D[nod][1] = 1, 0&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    localD = [[0] * (sons + 1) for _ in range(2)]&lt;br /&gt;
    localD[0][0] = 1&lt;br /&gt;
    ind = 0&lt;br /&gt;
    for fiu in G[nod]:&lt;br /&gt;
        if T[fiu] != nod:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        ind += 1&lt;br /&gt;
        localD[0][ind] = (localD[0][ind - 1] * (D[fiu][0] + D[fiu][1])) % mod&lt;br /&gt;
        localD[1][ind] = (localD[0][ind - 1] * D[fiu][1] + localD[1][ind - 1] * (D[fiu][0] + D[fiu][1])) % mod&lt;br /&gt;
&lt;br /&gt;
    if not special[nod]:&lt;br /&gt;
        D[nod][0], D[nod][1] = localD[0][ind], localD[1][ind]&lt;br /&gt;
    else:&lt;br /&gt;
        D[nod][0], D[nod][1] = 0, localD[0][ind]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global D, T, special, viz, G&lt;br /&gt;
&lt;br /&gt;
    input_file = open(&amp;quot;karbin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    output_file = open(&amp;quot;karbout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Citeste N si K&lt;br /&gt;
    N, K = map(int, input_file.readline().split())&lt;br /&gt;
    &lt;br /&gt;
    check_restrictions(N, K)&lt;br /&gt;
&lt;br /&gt;
    special = [0] * maxdim&lt;br /&gt;
    viz = [0] * maxdim&lt;br /&gt;
    T = [0] * maxdim&lt;br /&gt;
    D = [[0] * 2 for _ in range(maxdim)]&lt;br /&gt;
    G = [[] for _ in range(maxdim)]&lt;br /&gt;
&lt;br /&gt;
    # Citeste orașele cu carteluri&lt;br /&gt;
    cartel_cities = list(map(int, input_file.readline().split()))&lt;br /&gt;
    assert len(cartel_cities) == K&lt;br /&gt;
    for x in cartel_cities:&lt;br /&gt;
        assert not special[x]&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= N&lt;br /&gt;
        special[x] = x&lt;br /&gt;
&lt;br /&gt;
    # Citeste legăturile între orașe&lt;br /&gt;
    for _ in range(N - 1):&lt;br /&gt;
        x, y = map(int, input_file.readline().split())&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= N&lt;br /&gt;
        assert 1 &amp;lt;= y &amp;lt;= N&lt;br /&gt;
        assert x != y&lt;br /&gt;
        G[x].append(y)&lt;br /&gt;
        G[y].append(x)&lt;br /&gt;
&lt;br /&gt;
    dfs(1)&lt;br /&gt;
    print(D[1][1], file=output_file)&lt;br /&gt;
&lt;br /&gt;
    input_file.close()&lt;br /&gt;
    output_file.close()&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0548_-_Hamilton&amp;diff=9209</id>
		<title>0548 - Hamilton</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0548_-_Hamilton&amp;diff=9209"/>
		<updated>2024-01-08T16:50:41Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri. Determinați, dacă există, un ciclu hamiltonian.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039; conține pe prima linie numărul n, iar pe a următoarele linii perechi de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie de la i la j.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039; va conține pe prima linie numărul 1, dacă s-a determinat un ciclu hamiltonian, respectiv 0, în caz contrar. Dacă s-a determinat un ciclu hamiltonian, pe linia următoare se vor afișa vârfurile acestui ciclu, separate prin exact un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 10&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; i, j &amp;amp;les; n&#039;&#039;&#039;&lt;br /&gt;
*în ciclul afișat, primul și ultimul vârf sunt egale&lt;br /&gt;
*orice ciclu hamiltonian afișat va fi acceptat&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039;&lt;br /&gt;
:9&lt;br /&gt;
:1 2&lt;br /&gt;
;1 4&lt;br /&gt;
:2 3&lt;br /&gt;
:2 4&lt;br /&gt;
:2 5&lt;br /&gt;
:3 4&lt;br /&gt;
:3 8&lt;br /&gt;
:3 9&lt;br /&gt;
:4 6&lt;br /&gt;
:5 6&lt;br /&gt;
:5 7&lt;br /&gt;
:5 8&lt;br /&gt;
:7 8&lt;br /&gt;
:8 9&lt;br /&gt;
;&#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039;&lt;br /&gt;
:1&lt;br /&gt;
:1 2 3 9 8 7 5 6 4 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
: 0 0&lt;br /&gt;
;&#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0548 - Hamilton&lt;br /&gt;
def check_constraints(n, a):&lt;br /&gt;
    # Check constraints 1 ≤ n ≤ 10&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10):&lt;br /&gt;
        with open(&amp;quot;hamilton.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            g.write(&amp;quot;Datele nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Check constraints 1 ≤ i, j ≤ n&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 (0 &amp;lt;= a[i][j] &amp;lt;= 1):  # Corrected condition here&lt;br /&gt;
                with open(&amp;quot;hamilton.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
                    g.write(&amp;quot;Datele nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def backtracking():&lt;br /&gt;
    global k&lt;br /&gt;
    k = 1&lt;br /&gt;
    while k &amp;gt; 0:&lt;br /&gt;
        if st[k] &amp;lt; n:&lt;br /&gt;
            st[k] += 1&lt;br /&gt;
            if e_valid():&lt;br /&gt;
                if k == n:&lt;br /&gt;
                    afisare()&lt;br /&gt;
                else:&lt;br /&gt;
                    k += 1&lt;br /&gt;
                    st[k] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            k -= 1&lt;br /&gt;
&lt;br /&gt;
def e_valid():&lt;br /&gt;
    global k&lt;br /&gt;
    if k &amp;gt; 1:&lt;br /&gt;
        if not a[st[k - 1]][st[k]]:&lt;br /&gt;
            return 0&lt;br /&gt;
        else:&lt;br /&gt;
            for i in range(1, k):&lt;br /&gt;
                if st[i] == st[k]:&lt;br /&gt;
                    return 0&lt;br /&gt;
    if k == n:&lt;br /&gt;
        if not a[st[1]][st[k]]:&lt;br /&gt;
            return 0&lt;br /&gt;
    return 1&lt;br /&gt;
&lt;br /&gt;
def afisare():&lt;br /&gt;
    global k, ns&lt;br /&gt;
    with open(&amp;quot;hamilton.out&amp;quot;, &amp;quot;a&amp;quot;) as g:&lt;br /&gt;
        g.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
        g.write(&amp;quot; &amp;quot;.join(map(str, st[1:n + 1])) + &amp;quot; &amp;quot; + str(st[1]) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    k = 0&lt;br /&gt;
    ns += 1&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;hamilton.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline().strip())&lt;br /&gt;
    a = [[0] * (n + 1) for _ in range(n + 1)]&lt;br /&gt;
    for line in f:&lt;br /&gt;
        u, v = map(int, line.strip().split())&lt;br /&gt;
        a[u][v] = a[v][u] = 1&lt;br /&gt;
&lt;br /&gt;
# Check constraints before proceeding with backtracking&lt;br /&gt;
if not check_constraints(n, a):&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
ns = 0&lt;br /&gt;
st = [0] * 100&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;hamilton.out&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    backtracking()&lt;br /&gt;
    if ns == 0:&lt;br /&gt;
        g.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1116_-_Karb&amp;diff=9207</id>
		<title>1116 - Karb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1116_-_Karb&amp;diff=9207"/>
		<updated>2024-01-08T16:49:25Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
În perioada Campionatului Mondial din Brazilia se preconizează o creştere a traficului de cafea. Se ştie că sunt &#039;&#039;&#039;N&#039;&#039;&#039; orase, conectate prin &#039;&#039;&#039;N-1&#039;&#039;&#039; străzi bidirecţionale, astfel încât se poate ajunge din orice oraş în altul. În prezent există &#039;&#039;&#039;K&#039;&#039;&#039; carteluri de cafea aflate în oraşe distincte, care își exercita influența în propriul oraș. Se ştie că fiecare din aceste carteluri doreşte să-şi extindă influenţa în oraşele vecine. Astfel, la un moment de timp, un cartel poate să-şi extindă influenţa într-un oraş vecin doar dacă acesta nu se află sub influenţa altui cartel. O dată ce un cartel îşi extinde influenta asupra unui nou oraş, cartelul îşi poate extinde influenţa şi în oraşele vecine acestuia. Se ştie că până la începerea campionatului mondial, fiecare oraş va fi sub influenţa unui cartel.&lt;br /&gt;
&lt;br /&gt;
ABIN (Agência Brasileira de Inteligência) doreşte să afle în câte moduri poate fi dominată ţara de influenţele celor &#039;&#039;&#039;K&#039;&#039;&#039; carteluri la data începerii campionatului mondial, modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Cerință ==&lt;br /&gt;
Cunoscând numărul de orașe &#039;&#039;&#039;N&#039;&#039;&#039;, modul în care acestea sunt conectate, numărul de carteluri inițiale &#039;&#039;&#039;K&#039;&#039;&#039; și cele &#039;&#039;&#039;K&#039;&#039;&#039; orașe în care se află cartelurile, să se determine numărul de moduri în care ţara poate fi împărţită între cartelurile de cafea, modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;karbin.txt&#039;&#039;&#039; conține pe prima linie două numere naturale &#039;&#039;&#039;N&#039;&#039;&#039; şi &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul de oraşe, respectiv numărul cartelurilor existente iniţial. Pe a doua linie din fişier se vor afla &#039;&#039;&#039;K&#039;&#039;&#039; numere, reprezentând oraşele în care se află cele &#039;&#039;&#039;K&#039;&#039;&#039; carteluri. Pe următoarele &#039;&#039;&#039;N-1&#039;&#039;&#039; linii se vor afla câte două numere naturale, reprezentând o legătură între cele două oraşe.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;karbout.txt&#039;&#039;&#039; va conține pe prima linie un singur număr natural reprezentând numărul de moduri modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; K &amp;amp;les; N &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*Pentru teste în valoare de 10% din punctaj se garantează că &#039;&#039;&#039;k &amp;amp;les; n &amp;amp;les; 7&#039;&#039;&#039;, iar pentru alte 20% din teste se garantează că &#039;&#039;&#039;k = 2&#039;&#039;&#039;.&lt;br /&gt;
*Două oraşe sunt vecine dacă există o stradă bidirecțională între ele.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;karbin.txt&#039;&#039;&#039;&lt;br /&gt;
:6 3&lt;br /&gt;
:3 4 5&lt;br /&gt;
:1 2 &lt;br /&gt;
:1 3 &lt;br /&gt;
:2 4 &lt;br /&gt;
:2 5 &lt;br /&gt;
:4 6&lt;br /&gt;
;&#039;&#039;&#039;karbout.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;karbin.txt&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;karbout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1116 - Karb&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
mod = 666013&lt;br /&gt;
maxdim = 200005&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, k):&lt;br /&gt;
    if not (1 &amp;lt;= k &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        with open(&amp;quot;karbOUT.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Datele nu corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
        sys.exit()&lt;br /&gt;
&lt;br /&gt;
def dfs(nod):&lt;br /&gt;
    global D, T, special, viz, G&lt;br /&gt;
&lt;br /&gt;
    viz[nod] = 1&lt;br /&gt;
&lt;br /&gt;
    sons = 0&lt;br /&gt;
    for fiu in G[nod]:&lt;br /&gt;
        if viz[fiu]:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        sons += 1&lt;br /&gt;
        T[fiu] = nod&lt;br /&gt;
        dfs(fiu)&lt;br /&gt;
&lt;br /&gt;
    if not sons:&lt;br /&gt;
        if special[nod]:&lt;br /&gt;
            D[nod][0], D[nod][1] = 0, 1&lt;br /&gt;
        else:&lt;br /&gt;
            D[nod][0], D[nod][1] = 1, 0&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    localD = [[0] * (sons + 1) for _ in range(2)]&lt;br /&gt;
    localD[0][0] = 1&lt;br /&gt;
    ind = 0&lt;br /&gt;
    for fiu in G[nod]:&lt;br /&gt;
        if T[fiu] != nod:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        ind += 1&lt;br /&gt;
        localD[0][ind] = (localD[0][ind - 1] * (D[fiu][0] + D[fiu][1])) % mod&lt;br /&gt;
        localD[1][ind] = (localD[0][ind - 1] * D[fiu][1] + localD[1][ind - 1] * (D[fiu][0] + D[fiu][1])) % mod&lt;br /&gt;
&lt;br /&gt;
    if not special[nod]:&lt;br /&gt;
        D[nod][0], D[nod][1] = localD[0][ind], localD[1][ind]&lt;br /&gt;
    else:&lt;br /&gt;
        D[nod][0], D[nod][1] = 0, localD[0][ind]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global D, T, special, viz, G&lt;br /&gt;
&lt;br /&gt;
    input_file = open(&amp;quot;karbIN.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    output_file = open(&amp;quot;karbOUT.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Citeste N si K&lt;br /&gt;
    N, K = map(int, input_file.readline().split())&lt;br /&gt;
    &lt;br /&gt;
    check_restrictions(N, K)&lt;br /&gt;
&lt;br /&gt;
    special = [0] * maxdim&lt;br /&gt;
    viz = [0] * maxdim&lt;br /&gt;
    T = [0] * maxdim&lt;br /&gt;
    D = [[0] * 2 for _ in range(maxdim)]&lt;br /&gt;
    G = [[] for _ in range(maxdim)]&lt;br /&gt;
&lt;br /&gt;
    # Citeste orașele cu carteluri&lt;br /&gt;
    cartel_cities = list(map(int, input_file.readline().split()))&lt;br /&gt;
    assert len(cartel_cities) == K&lt;br /&gt;
    for x in cartel_cities:&lt;br /&gt;
        assert not special[x]&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= N&lt;br /&gt;
        special[x] = x&lt;br /&gt;
&lt;br /&gt;
    # Citeste legăturile între orașe&lt;br /&gt;
    for _ in range(N - 1):&lt;br /&gt;
        x, y = map(int, input_file.readline().split())&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= N&lt;br /&gt;
        assert 1 &amp;lt;= y &amp;lt;= N&lt;br /&gt;
        assert x != y&lt;br /&gt;
        G[x].append(y)&lt;br /&gt;
        G[y].append(x)&lt;br /&gt;
&lt;br /&gt;
    dfs(1)&lt;br /&gt;
    print(D[1][1], file=output_file)&lt;br /&gt;
&lt;br /&gt;
    input_file.close()&lt;br /&gt;
    output_file.close()&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9206</id>
		<title>3920 - CainiSiPisici1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9206"/>
		<updated>2024-01-08T16:46:17Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-o curte sunt &#039;&#039;&#039;c&#039;&#039;&#039; câini și &#039;&#039;&#039;p&#039;&#039;&#039; pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:&lt;br /&gt;
:încep cu câine și se termină cu pisică;&lt;br /&gt;
:nu conțin nicio pisică între doi câini.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;c p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe rânduri separate ale ecranului șiruri formate din &#039;&#039;&#039;c&#039;&#039;&#039; caractere &#039;C&#039; (câine) și &#039;&#039;&#039;p&#039;&#039;&#039; caractere &#039;P&#039; (pisică), conform enunțului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; c , p &amp;amp;les; 10&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3 3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:CCCPPP&lt;br /&gt;
:CCPPCP&lt;br /&gt;
:CPPCCP&lt;br /&gt;
&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3920 - CainiSiPisici1&lt;br /&gt;
def Afisare(L, x):&lt;br /&gt;
    for i in range(1, L + 1):&lt;br /&gt;
        print(A[x[i]], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def RestrictionCheck(c, p):&lt;br /&gt;
    if not (1 &amp;lt;= c &amp;lt;= 10) or not (1 &amp;lt;= p &amp;lt;= 10):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def OK(k, x, c, p):&lt;br /&gt;
    if k == 1 and x[k] != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k == n and x[k] != 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if c &amp;lt; 0 or p &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k &amp;gt; 2 and x[k] == 0 and x[k-1] == 1 and x[k-2] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def Back(k, x, c, p):&lt;br /&gt;
    for i in range(2):&lt;br /&gt;
        x[k] = i&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            p -= 1&lt;br /&gt;
        if OK(k, x, c, p):&lt;br /&gt;
            if k == n:&lt;br /&gt;
                Afisare(n, x)&lt;br /&gt;
            else:&lt;br /&gt;
                Back(k + 1, x, c, p)&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c += 1&lt;br /&gt;
        else:&lt;br /&gt;
            p += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    A = [&#039;C&#039;, &#039;P&#039;]&lt;br /&gt;
    c, p = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if RestrictionCheck(c, p):&lt;br /&gt;
        n = c + p&lt;br /&gt;
        x = [0] * 21&lt;br /&gt;
        Back(1, x, c, p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9205</id>
		<title>3920 - CainiSiPisici1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9205"/>
		<updated>2024-01-08T16:46:07Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-o curte sunt &#039;&#039;&#039;c&#039;&#039;&#039; câini și &#039;&#039;&#039;p&#039;&#039;&#039; pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:&lt;br /&gt;
:încep cu câine și se termină cu pisică;&lt;br /&gt;
:nu conțin nicio pisică între doi câini.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;c p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe rânduri separate ale ecranului șiruri formate din &#039;&#039;&#039;c&#039;&#039;&#039; caractere &#039;C&#039; (câine) și &#039;&#039;&#039;p&#039;&#039;&#039; caractere &#039;P&#039; (pisică), conform enunțului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; c , p &amp;amp;les; 10&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3 3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:CCCPPP&lt;br /&gt;
:CCPPCP&lt;br /&gt;
:CPPCCP&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3920 - CainiSiPisici1&lt;br /&gt;
def Afisare(L, x):&lt;br /&gt;
    for i in range(1, L + 1):&lt;br /&gt;
        print(A[x[i]], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def RestrictionCheck(c, p):&lt;br /&gt;
    if not (1 &amp;lt;= c &amp;lt;= 10) or not (1 &amp;lt;= p &amp;lt;= 10):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def OK(k, x, c, p):&lt;br /&gt;
    if k == 1 and x[k] != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k == n and x[k] != 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if c &amp;lt; 0 or p &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k &amp;gt; 2 and x[k] == 0 and x[k-1] == 1 and x[k-2] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def Back(k, x, c, p):&lt;br /&gt;
    for i in range(2):&lt;br /&gt;
        x[k] = i&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            p -= 1&lt;br /&gt;
        if OK(k, x, c, p):&lt;br /&gt;
            if k == n:&lt;br /&gt;
                Afisare(n, x)&lt;br /&gt;
            else:&lt;br /&gt;
                Back(k + 1, x, c, p)&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c += 1&lt;br /&gt;
        else:&lt;br /&gt;
            p += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    A = [&#039;C&#039;, &#039;P&#039;]&lt;br /&gt;
    c, p = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if RestrictionCheck(c, p):&lt;br /&gt;
        n = c + p&lt;br /&gt;
        x = [0] * 21&lt;br /&gt;
        Back(1, x, c, p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9204</id>
		<title>3920 - CainiSiPisici1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9204"/>
		<updated>2024-01-08T16:45:44Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-o curte sunt &#039;&#039;&#039;c&#039;&#039;&#039; câini și &#039;&#039;&#039;p&#039;&#039;&#039; pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:&lt;br /&gt;
:încep cu câine și se termină cu pisică;&lt;br /&gt;
:nu conțin nicio pisică între doi câini.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;c p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe rânduri separate ale ecranului șiruri formate din &#039;&#039;&#039;c&#039;&#039;&#039; caractere &#039;C&#039; (câine) și &#039;&#039;&#039;p&#039;&#039;&#039; caractere &#039;P&#039; (pisică), conform enunțului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; c , p &amp;amp;les; 10&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3 3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:CCCPPP&lt;br /&gt;
:CCPPCP&lt;br /&gt;
:CPPCCP&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3920 - CainiSiPisici1&lt;br /&gt;
def Afisare(L, x):&lt;br /&gt;
    for i in range(1, L + 1):&lt;br /&gt;
        print(A[x[i]], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def RestrictionCheck(c, p):&lt;br /&gt;
    if not (1 &amp;lt;= c &amp;lt;= 10) or not (1 &amp;lt;= p &amp;lt;= 10):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def OK(k, x, c, p):&lt;br /&gt;
    if k == 1 and x[k] != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k == n and x[k] != 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if c &amp;lt; 0 or p &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k &amp;gt; 2 and x[k] == 0 and x[k-1] == 1 and x[k-2] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def Back(k, x, c, p):&lt;br /&gt;
    for i in range(2):&lt;br /&gt;
        x[k] = i&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            p -= 1&lt;br /&gt;
        if OK(k, x, c, p):&lt;br /&gt;
            if k == n:&lt;br /&gt;
                Afisare(n, x)&lt;br /&gt;
            else:&lt;br /&gt;
                Back(k + 1, x, c, p)&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c += 1&lt;br /&gt;
        else:&lt;br /&gt;
            p += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    A = [&#039;C&#039;, &#039;P&#039;]&lt;br /&gt;
    c, p = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if RestrictionCheck(c, p):&lt;br /&gt;
        n = c + p&lt;br /&gt;
        x = [0] * 21&lt;br /&gt;
        Back(1, x, c, p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9203</id>
		<title>3920 - CainiSiPisici1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9203"/>
		<updated>2024-01-08T16:45:26Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-o curte sunt &#039;&#039;&#039;c&#039;&#039;&#039; câini și &#039;&#039;&#039;p&#039;&#039;&#039; pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:&lt;br /&gt;
:încep cu câine și se termină cu pisică;&lt;br /&gt;
:nu conțin nicio pisică între doi câini.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;c p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe rânduri separate ale ecranului șiruri formate din &#039;&#039;&#039;c&#039;&#039;&#039; caractere &#039;C&#039; (câine) și &#039;&#039;&#039;p&#039;&#039;&#039; caractere &#039;P&#039; (pisică), conform enunțului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; c , p &amp;amp;les; 10&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3 3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:CCCPPP&lt;br /&gt;
:CCPPCP&lt;br /&gt;
:CPPCCP&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele nu corespund restrictiilor impuse.&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3920 - CainiSiPisici1&lt;br /&gt;
def Afisare(L, x):&lt;br /&gt;
    for i in range(1, L + 1):&lt;br /&gt;
        print(A[x[i]], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def RestrictionCheck(c, p):&lt;br /&gt;
    if not (1 &amp;lt;= c &amp;lt;= 10) or not (1 &amp;lt;= p &amp;lt;= 10):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def OK(k, x, c, p):&lt;br /&gt;
    if k == 1 and x[k] != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k == n and x[k] != 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if c &amp;lt; 0 or p &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k &amp;gt; 2 and x[k] == 0 and x[k-1] == 1 and x[k-2] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def Back(k, x, c, p):&lt;br /&gt;
    for i in range(2):&lt;br /&gt;
        x[k] = i&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            p -= 1&lt;br /&gt;
        if OK(k, x, c, p):&lt;br /&gt;
            if k == n:&lt;br /&gt;
                Afisare(n, x)&lt;br /&gt;
            else:&lt;br /&gt;
                Back(k + 1, x, c, p)&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c += 1&lt;br /&gt;
        else:&lt;br /&gt;
            p += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    A = [&#039;C&#039;, &#039;P&#039;]&lt;br /&gt;
    c, p = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if RestrictionCheck(c, p):&lt;br /&gt;
        n = c + p&lt;br /&gt;
        x = [0] * 21&lt;br /&gt;
        Back(1, x, c, p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9202</id>
		<title>3920 - CainiSiPisici1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3920_-_CainiSiPisici1&amp;diff=9202"/>
		<updated>2024-01-08T16:44:47Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: Pagină nouă: == Cerința == Într-o curte sunt &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039; câini și &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039; pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care: :încep cu câine și se termină cu pisică; :nu conțin nicio pisică între doi câini. == Date de intrare == Programul citește de la tastatură numerele &amp;#039;&amp;#039;&amp;#039;c p&amp;#039;&amp;#039;&amp;#039;.  == Date de ieșire == Programul va afișa pe rânduri separate ale ecranului șiruri formate din &amp;#039;&amp;#039;&amp;#039;c&amp;#039;&amp;#039;&amp;#039; caractere &amp;#039;C&amp;#039; (câine) și &amp;#039;&amp;#039;&amp;#039;p&amp;#039;&amp;#039;&amp;#039; caractere &amp;#039;P&amp;#039; (...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-o curte sunt &#039;&#039;&#039;c&#039;&#039;&#039; câini și &#039;&#039;&#039;p&#039;&#039;&#039; pisici. Să se genereze în ordine lexicografică șirurile formate cu toate animalele, care:&lt;br /&gt;
:încep cu câine și se termină cu pisică;&lt;br /&gt;
:nu conțin nicio pisică între doi câini.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;c p&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe rânduri separate ale ecranului șiruri formate din &#039;&#039;&#039;c&#039;&#039;&#039; caractere &#039;C&#039; (câine) și &#039;&#039;&#039;p&#039;&#039;&#039; caractere &#039;P&#039; (pisică), conform enunțului.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; c , p &amp;amp;les; 10&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3 3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:CCCPPP&lt;br /&gt;
:CCPPCP&lt;br /&gt;
:CPPCCP&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3920 - CainiSiPisici1&lt;br /&gt;
def Afisare(L, x):&lt;br /&gt;
    for i in range(1, L + 1):&lt;br /&gt;
        print(A[x[i]], end=&#039;&#039;)&lt;br /&gt;
    print()&lt;br /&gt;
&lt;br /&gt;
def RestrictionCheck(c, p):&lt;br /&gt;
    if not (1 &amp;lt;= c &amp;lt;= 10) or not (1 &amp;lt;= p &amp;lt;= 10):&lt;br /&gt;
        print(&amp;quot;Datele nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def OK(k, x, c, p):&lt;br /&gt;
    if k == 1 and x[k] != 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k == n and x[k] != 1:&lt;br /&gt;
        return False&lt;br /&gt;
    if c &amp;lt; 0 or p &amp;lt; 0:&lt;br /&gt;
        return False&lt;br /&gt;
    if k &amp;gt; 2 and x[k] == 0 and x[k-1] == 1 and x[k-2] == 0:&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def Back(k, x, c, p):&lt;br /&gt;
    for i in range(2):&lt;br /&gt;
        x[k] = i&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c -= 1&lt;br /&gt;
        else:&lt;br /&gt;
            p -= 1&lt;br /&gt;
        if OK(k, x, c, p):&lt;br /&gt;
            if k == n:&lt;br /&gt;
                Afisare(n, x)&lt;br /&gt;
            else:&lt;br /&gt;
                Back(k + 1, x, c, p)&lt;br /&gt;
        if i == 0:&lt;br /&gt;
            c += 1&lt;br /&gt;
        else:&lt;br /&gt;
            p += 1&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    A = [&#039;C&#039;, &#039;P&#039;]&lt;br /&gt;
    c, p = map(int, input().split())&lt;br /&gt;
&lt;br /&gt;
    if RestrictionCheck(c, p):&lt;br /&gt;
        n = c + p&lt;br /&gt;
        x = [0] * 21&lt;br /&gt;
        Back(1, x, c, p)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0548_-_Hamilton&amp;diff=9195</id>
		<title>0548 - Hamilton</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0548_-_Hamilton&amp;diff=9195"/>
		<updated>2024-01-07T20:44:52Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un graf neorientat cu &#039;&#039;&#039;n&#039;&#039;&#039; vârfuri. Determinați, dacă există, un ciclu hamiltonian.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039; conține pe prima linie numărul n, iar pe a următoarele linii perechi de numere &#039;&#039;&#039;i j&#039;&#039;&#039;, cu semnificația că există muchie de la i la j.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039; va conține pe prima linie numărul 1, dacă s-a determinat un ciclu hamiltonian, respectiv 0, în caz contrar. Dacă s-a determinat un ciclu hamiltonian, pe linia următoare se vor afișa vârfurile acestui ciclu, separate prin exact un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 10&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; i, j &amp;amp;les; n&#039;&#039;&#039;&lt;br /&gt;
*în ciclul afișat, primul și ultimul vârf sunt egale&lt;br /&gt;
*orice ciclu hamiltonian afișat va fi acceptat&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039;&lt;br /&gt;
:9&lt;br /&gt;
:1 2&lt;br /&gt;
;1 4&lt;br /&gt;
:2 3&lt;br /&gt;
:2 4&lt;br /&gt;
:2 5&lt;br /&gt;
:3 4&lt;br /&gt;
:3 8&lt;br /&gt;
:3 9&lt;br /&gt;
:4 6&lt;br /&gt;
:5 6&lt;br /&gt;
:5 7&lt;br /&gt;
:5 8&lt;br /&gt;
:7 8&lt;br /&gt;
:8 9&lt;br /&gt;
;&#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039;&lt;br /&gt;
:1&lt;br /&gt;
:1 2 3 9 8 7 5 6 4 1&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;hamiltonin.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
: 0 0&lt;br /&gt;
;&#039;&#039;&#039;hamiltonout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0548 - Hamilton&lt;br /&gt;
def check_constraints(n, a):&lt;br /&gt;
    # Check constraints 1 ≤ n ≤ 10&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10):&lt;br /&gt;
        with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
            g.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Check constraints 1 ≤ i, j ≤ n&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 (0 &amp;lt;= a[i][j] &amp;lt;= 1):  # Corrected condition here&lt;br /&gt;
                with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
                    g.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
                return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def backtracking():&lt;br /&gt;
    global k&lt;br /&gt;
    k = 1&lt;br /&gt;
    while k &amp;gt; 0:&lt;br /&gt;
        if st[k] &amp;lt; n:&lt;br /&gt;
            st[k] += 1&lt;br /&gt;
            if e_valid():&lt;br /&gt;
                if k == n:&lt;br /&gt;
                    afisare()&lt;br /&gt;
                else:&lt;br /&gt;
                    k += 1&lt;br /&gt;
                    st[k] = 0&lt;br /&gt;
        else:&lt;br /&gt;
            k -= 1&lt;br /&gt;
&lt;br /&gt;
def e_valid():&lt;br /&gt;
    global k&lt;br /&gt;
    if k &amp;gt; 1:&lt;br /&gt;
        if not a[st[k - 1]][st[k]]:&lt;br /&gt;
            return 0&lt;br /&gt;
        else:&lt;br /&gt;
            for i in range(1, k):&lt;br /&gt;
                if st[i] == st[k]:&lt;br /&gt;
                    return 0&lt;br /&gt;
    if k == n:&lt;br /&gt;
        if not a[st[1]][st[k]]:&lt;br /&gt;
            return 0&lt;br /&gt;
    return 1&lt;br /&gt;
&lt;br /&gt;
def afisare():&lt;br /&gt;
    global k, ns&lt;br /&gt;
    with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;a&amp;quot;) as g:&lt;br /&gt;
        g.write(&amp;quot;1\n&amp;quot;)&lt;br /&gt;
        g.write(&amp;quot; &amp;quot;.join(map(str, st[1:n + 1])) + &amp;quot; &amp;quot; + str(st[1]) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
    k = 0&lt;br /&gt;
    ns += 1&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;hamiltonin.txt&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
    n = int(f.readline().strip())&lt;br /&gt;
    a = [[0] * (n + 1) for _ in range(n + 1)]&lt;br /&gt;
    for line in f:&lt;br /&gt;
        u, v = map(int, line.strip().split())&lt;br /&gt;
        a[u][v] = a[v][u] = 1&lt;br /&gt;
&lt;br /&gt;
# Check constraints before proceeding with backtracking&lt;br /&gt;
if not check_constraints(n, a):&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
ns = 0&lt;br /&gt;
st = [0] * 100&lt;br /&gt;
&lt;br /&gt;
with open(&amp;quot;hamiltonout.txt&amp;quot;, &amp;quot;w&amp;quot;) as g:&lt;br /&gt;
    backtracking()&lt;br /&gt;
    if ns == 0:&lt;br /&gt;
        g.write(&amp;quot;0\n&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1200_-_Spiridu%C8%99i&amp;diff=9194</id>
		<title>1200 - Spiriduși</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1200_-_Spiridu%C8%99i&amp;diff=9194"/>
		<updated>2024-01-07T20:39:51Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Mei și Satsuki s-au întors de curând în casa de vacanță a familiei lor. Această casă este formată din &#039;&#039;&#039;N&#039;&#039;&#039; camere, unite între ele prin &#039;&#039;&#039;N-1&#039;&#039;&#039; culoare, astfel încât să se poată ajunge din orice cameră în orice altă cameră. Intrarea în casă se face prin camera &#039;&#039;&#039;1&#039;&#039;&#039;. Deoarece casa n-a fost locuită timp de mai multe luni, în fiecare cameră &#039;&#039;&#039;i&#039;&#039;&#039; s-au stabilit &#039;&#039;&#039;s[i]&#039;&#039;&#039; spiriduși de praf.&lt;br /&gt;
&lt;br /&gt;
Cele două fete doresc să-și amenajeze un spațiu de joacă întins pe mai multe camere. Ele vor să stabilească două camere &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039; (nu neapărat distincte), astfel încât drumul cel mai scurt de la intrarea în casă până în camera &#039;&#039;&#039;b&#039;&#039;&#039; trece prin camera &#039;&#039;&#039;a&#039;&#039;&#039;. Fetele vor merge apoi din camera &#039;&#039;&#039;a&#039;&#039;&#039; în camera &#039;&#039;&#039;b&#039;&#039;&#039; pe drumul cel mai scurt (fără a trece de două ori prin aceeași cameră), gonind spiridușii de praf aflați în fiecare cameră prin care trec, inclusiv pe cei din camerele &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039;. După ce fetele ajung în camera &#039;&#039;&#039;b&#039;&#039;&#039;, ele consideră că toate camerele din care au gonit spiridușii de praf au fost alese pentru spațiul de joacă.&lt;br /&gt;
&lt;br /&gt;
Fetele au stabilit pentru fiecare cameră &#039;&#039;&#039;i&#039;&#039;&#039; un coeficient &#039;&#039;&#039;p[i]&#039;&#039;&#039; care reprezintă cât de plăcută ar fi camera i pentru spațiul lor de joacă. În plus, ele au convenit că nu vor goni în total mai mult de &#039;&#039;&#039;C&#039;&#039;&#039; spiriduși ai prafului din camerele prin care trec.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând valorile lui &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039;, numărul de spiriduși ai prafului &#039;&#039;&#039;s[i]&#039;&#039;&#039;, coeficienții &#039;&#039;&#039;p[i]&#039;&#039;&#039; pentru fiecare cameră i, cât și modul în care sunt unite camerele prin culoare, să se determine suma maximă a coeficienților &#039;&#039;&#039;p&#039;&#039;&#039; ai camerelor alese pentru un spațiu de joacă ce respectă condițiile impuse de Mei și Satsuki.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului de intrare &#039;&#039;&#039;spiridusiin.txt&#039;&#039;&#039; se vor afla două numere naturale &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039; cu semnificația din enunț. Pe a doua linie se vor afla &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale separate prin câte un spațiu, al i-lea dintre acestea reprezentând numărul de spiriduși &#039;&#039;&#039;s[i]&#039;&#039;&#039; aflați în camera i. Pe a treia linie se vor afla &#039;&#039;&#039;N&#039;&#039;&#039; numere întregi separate prin câte un spațiu, al i-lea dintre acestea reprezentând coeficientul p[i] al camerei i. Pe următoarele &#039;&#039;&#039;N-1&#039;&#039;&#039; linii se vor afla câte două numere întregi &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039; separate printr-un spațiu, semnificând existența unui culoar ce unește camerele x și y.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;spiridusiout.txt&#039;&#039;&#039; se va afișa o singură linie conținând un singur număr natural, reprezentând suma maximă a coeficienților &#039;&#039;&#039;p&#039;&#039;&#039; ai camerelor alese pentru un spațiu de joacă ce respectă condițiile impuse de Mei și Satsuki.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; N &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; C &amp;amp;les; 20 000 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; s[i] &amp;amp;les; 20 000 000&#039;&#039;&#039;, pentru orice i, &#039;&#039;&#039;1 &amp;amp;les; i &amp;amp;les; N.&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;-10 000 &amp;amp;les; p[i] &amp;amp;les; 10 000&#039;&#039;&#039;, pentru orice i, &#039;&#039;&#039;1 &amp;amp;les; i &amp;amp;les; N&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; x, y &amp;amp;les; N&#039;&#039;&#039;&lt;br /&gt;
*Pentru 20% din teste, fiecare cameră are maximum &#039;&#039;&#039;2&#039;&#039;&#039; vecini.&lt;br /&gt;
*Pentru 30% din teste, &#039;&#039;&#039;N ≤ 1 000&#039;&#039;&#039;.&lt;br /&gt;
*Se garantează că pentru orice cameră &#039;&#039;&#039;x&#039;&#039;&#039;, numărul total de spiriduși aflați în camerele de pe drumul cel mai scurt de la camera 1 la camera x nu depășește &#039;&#039;&#039;1 000 000 000&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;spiridusiin.txt&#039;&#039;&#039;&lt;br /&gt;
: 6 8&lt;br /&gt;
:2 4 6 2 4 1 &lt;br /&gt;
:3 10 11 -2 4 5&lt;br /&gt;
:1 2&lt;br /&gt;
:2 3&lt;br /&gt;
:2 4&lt;br /&gt;
:4 5&lt;br /&gt;
:4 6&lt;br /&gt;
; &#039;&#039;&#039;spriridusiout.txt&#039;&#039;&#039;&lt;br /&gt;
: 13&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&amp;quot;Dacă alegem camerele &#039;&#039;&#039;a = 2 și b = 6&#039;&#039;&#039;, obținem un spațiu de joacă format din camerele &#039;&#039;&#039;2, 4 și 6&#039;&#039;&#039;.&lt;br /&gt;
&amp;quot;Numărul total de spiriduși goniți din aceste camere este &#039;&#039;&#039;4 + 2 + 1 = 7&#039;&#039;&#039;, care este mai mic sau egal decât &#039;&#039;&#039;C = 8&#039;&#039;&#039;.&lt;br /&gt;
&amp;quot;Suma coeficienților p ai acestor camere este &#039;&#039;&#039;10 + (-2) + 5 = 13&#039;&#039;&#039;, maximul posibil ce se poate obține.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;spiridusiin.txt&#039;&#039;&#039;&lt;br /&gt;
: 0 0&lt;br /&gt;
; &#039;&#039;&#039;spriridusiout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1200 - Spiridusi&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
            N, C = map(int, file.readline().split())&lt;br /&gt;
            s = list(map(int, file.readline().split()))&lt;br /&gt;
            p = list(map(int, file.readline().split()))&lt;br /&gt;
            connections = [tuple(map(int, file.readline().split())) for _ in range(N - 1)]&lt;br /&gt;
&lt;br /&gt;
            if not (1 &amp;lt;= N &amp;lt;= 100000 and 1 &amp;lt;= C &amp;lt;= 20000000 and all(1 &amp;lt;= elem &amp;lt;= 20000000 for elem in s) and&lt;br /&gt;
                    all(-10000 &amp;lt;= elem &amp;lt;= 10000 for elem in p) and all(&lt;br /&gt;
                        1 &amp;lt;= elem &amp;lt;= N for pair in connections for elem in pair)):&lt;br /&gt;
                raise ValueError(&amp;quot;Numerele nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            return N, C, s, p, connections&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Nu au fost respectate cerințele impuse: {str(e)}&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(N, C, s, p, connections):&lt;br /&gt;
    # Construim graful&lt;br /&gt;
    graph = {}&lt;br /&gt;
    for x, y in connections:&lt;br /&gt;
        if x not in graph:&lt;br /&gt;
            graph[x] = []&lt;br /&gt;
        if y not in graph:&lt;br /&gt;
            graph[y] = []&lt;br /&gt;
        graph[x].append(y)&lt;br /&gt;
        graph[y].append(x)&lt;br /&gt;
&lt;br /&gt;
    # Funcție pentru calculul sumei maxime a coeficienților&lt;br /&gt;
    def dfs(node, parent, current_path, current_dust):&lt;br /&gt;
        nonlocal max_sum&lt;br /&gt;
        current_path.append(node)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm suma pentru nodul curent&lt;br /&gt;
        current_sum = sum(p[i - 1] for i in current_path)&lt;br /&gt;
        max_sum = max(max_sum, current_sum)&lt;br /&gt;
&lt;br /&gt;
        # Parcurgem vecinii nodului curent&lt;br /&gt;
        for neighbor in graph[node]:&lt;br /&gt;
            if neighbor != parent:&lt;br /&gt;
                # Calculăm numărul total de spiriduși de praf pe drumul curent&lt;br /&gt;
                total_dust = current_dust + s[neighbor - 1]&lt;br /&gt;
                # Verificăm dacă numărul de spiriduși nu depășește C&lt;br /&gt;
                if total_dust &amp;lt;= C:&lt;br /&gt;
                    dfs(neighbor, node, current_path[:], total_dust)&lt;br /&gt;
&lt;br /&gt;
    max_sum = 0&lt;br /&gt;
    dfs(1, 0, [], s[0])&lt;br /&gt;
&lt;br /&gt;
    return max_sum&lt;br /&gt;
&lt;br /&gt;
# Citim datele de intrare&lt;br /&gt;
input_data = read_input(&amp;quot;spiridusiin.txt&amp;quot;)&lt;br /&gt;
if input_data is not None:&lt;br /&gt;
    N, C, s, p, connections = input_data&lt;br /&gt;
&lt;br /&gt;
    # Calculăm rezultatul&lt;br /&gt;
    result = solve(N, C, s, p, connections)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;spiridusiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(str(result))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1200_-_Spiridu%C8%99i&amp;diff=9193</id>
		<title>1200 - Spiriduși</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1200_-_Spiridu%C8%99i&amp;diff=9193"/>
		<updated>2024-01-07T20:38:32Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
Mei și Satsuki s-au întors de curând în casa de vacanță a familiei lor. Această casă este formată din &#039;&#039;&#039;N&#039;&#039;&#039; camere, unite între ele prin &#039;&#039;&#039;N-1&#039;&#039;&#039; culoare, astfel încât să se poată ajunge din orice cameră în orice altă cameră. Intrarea în casă se face prin camera &#039;&#039;&#039;1&#039;&#039;&#039;. Deoarece casa n-a fost locuită timp de mai multe luni, în fiecare cameră &#039;&#039;&#039;i&#039;&#039;&#039; s-au stabilit &#039;&#039;&#039;s[i]&#039;&#039;&#039; spiriduși de praf.&lt;br /&gt;
&lt;br /&gt;
Cele două fete doresc să-și amenajeze un spațiu de joacă întins pe mai multe camere. Ele vor să stabilească două camere &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039; (nu neapărat distincte), astfel încât drumul cel mai scurt de la intrarea în casă până în camera &#039;&#039;&#039;b&#039;&#039;&#039; trece prin camera &#039;&#039;&#039;a&#039;&#039;&#039;. Fetele vor merge apoi din camera &#039;&#039;&#039;a&#039;&#039;&#039; în camera &#039;&#039;&#039;b&#039;&#039;&#039; pe drumul cel mai scurt (fără a trece de două ori prin aceeași cameră), gonind spiridușii de praf aflați în fiecare cameră prin care trec, inclusiv pe cei din camerele &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039;. După ce fetele ajung în camera &#039;&#039;&#039;b&#039;&#039;&#039;, ele consideră că toate camerele din care au gonit spiridușii de praf au fost alese pentru spațiul de joacă.&lt;br /&gt;
&lt;br /&gt;
Fetele au stabilit pentru fiecare cameră &#039;&#039;&#039;i&#039;&#039;&#039; un coeficient &#039;&#039;&#039;p[i]&#039;&#039;&#039; care reprezintă cât de plăcută ar fi camera i pentru spațiul lor de joacă. În plus, ele au convenit că nu vor goni în total mai mult de &#039;&#039;&#039;C&#039;&#039;&#039; spiriduși ai prafului din camerele prin care trec.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând valorile lui &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039;, numărul de spiriduși ai prafului &#039;&#039;&#039;s[i]&#039;&#039;&#039;, coeficienții &#039;&#039;&#039;p[i]&#039;&#039;&#039; pentru fiecare cameră i, cât și modul în care sunt unite camerele prin culoare, să se determine suma maximă a coeficienților &#039;&#039;&#039;p&#039;&#039;&#039; ai camerelor alese pentru un spațiu de joacă ce respectă condițiile impuse de Mei și Satsuki.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului de intrare &#039;&#039;&#039;spiridusiin.txt&#039;&#039;&#039; se vor afla două numere naturale &#039;&#039;&#039;N&#039;&#039;&#039; și &#039;&#039;&#039;C&#039;&#039;&#039; cu semnificația din enunț. Pe a doua linie se vor afla &#039;&#039;&#039;N&#039;&#039;&#039; numere naturale separate prin câte un spațiu, al i-lea dintre acestea reprezentând numărul de spiriduși &#039;&#039;&#039;s[i]&#039;&#039;&#039; aflați în camera i. Pe a treia linie se vor afla &#039;&#039;&#039;N&#039;&#039;&#039; numere întregi separate prin câte un spațiu, al i-lea dintre acestea reprezentând coeficientul p[i] al camerei i. Pe următoarele &#039;&#039;&#039;N-1&#039;&#039;&#039; linii se vor afla câte două numere întregi &#039;&#039;&#039;x&#039;&#039;&#039; și &#039;&#039;&#039;y&#039;&#039;&#039; separate printr-un spațiu, semnificând existența unui culoar ce unește camerele x și y.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul de ieșire &#039;&#039;&#039;spiridusiout.txt&#039;&#039;&#039; se va afișa o singură linie conținând un singur număr natural, reprezentând suma maximă a coeficienților &#039;&#039;&#039;p&#039;&#039;&#039; ai camerelor alese pentru un spațiu de joacă ce respectă condițiile impuse de Mei și Satsuki.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; N &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; C &amp;amp;les; 20 000 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; s[i] &amp;amp;les; 20 000 000&#039;&#039;&#039;, pentru orice i, &#039;&#039;&#039;1 &amp;amp;les; i &amp;amp;les; N.&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;-10 000 &amp;amp;les; p[i] &amp;amp;les; 10 000&#039;&#039;&#039;, pentru orice i, &#039;&#039;&#039;1 &amp;amp;les; i &amp;amp;les; N&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; x, y &amp;amp;les; N&#039;&#039;&#039;&lt;br /&gt;
*Pentru 20% din teste, fiecare cameră are maximum &#039;&#039;&#039;2&#039;&#039;&#039; vecini.&lt;br /&gt;
*Pentru 30% din teste, &#039;&#039;&#039;N ≤ 1 000&#039;&#039;&#039;.&lt;br /&gt;
*Se garantează că pentru orice cameră &#039;&#039;&#039;x&#039;&#039;&#039;, numărul total de spiriduși aflați în camerele de pe drumul cel mai scurt de la camera 1 la camera x nu depășește &#039;&#039;&#039;1 000 000 000&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;spiridusiin.txt&#039;&#039;&#039;&lt;br /&gt;
: 6 8&lt;br /&gt;
:2 4 6 2 4 1 &lt;br /&gt;
:3 10 11 -2 4 5&lt;br /&gt;
:1 2&lt;br /&gt;
:2 3&lt;br /&gt;
:2 4&lt;br /&gt;
:4 5&lt;br /&gt;
:4 6&lt;br /&gt;
; &#039;&#039;&#039;spriridusiout.txt&#039;&#039;&#039;&lt;br /&gt;
: 13&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;spiridusiin.txt&#039;&#039;&#039;&lt;br /&gt;
: 0 0&lt;br /&gt;
; &#039;&#039;&#039;spriridusiout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1200 - Spiridusi&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
            N, C = map(int, file.readline().split())&lt;br /&gt;
            s = list(map(int, file.readline().split()))&lt;br /&gt;
            p = list(map(int, file.readline().split()))&lt;br /&gt;
            connections = [tuple(map(int, file.readline().split())) for _ in range(N - 1)]&lt;br /&gt;
&lt;br /&gt;
            if not (1 &amp;lt;= N &amp;lt;= 100000 and 1 &amp;lt;= C &amp;lt;= 20000000 and all(1 &amp;lt;= elem &amp;lt;= 20000000 for elem in s) and&lt;br /&gt;
                    all(-10000 &amp;lt;= elem &amp;lt;= 10000 for elem in p) and all(&lt;br /&gt;
                        1 &amp;lt;= elem &amp;lt;= N for pair in connections for elem in pair)):&lt;br /&gt;
                raise ValueError(&amp;quot;Numerele nu respectă restricțiile.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
            return N, C, s, p, connections&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Nu au fost respectate cerințele impuse: {str(e)}&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def solve(N, C, s, p, connections):&lt;br /&gt;
    # Construim graful&lt;br /&gt;
    graph = {}&lt;br /&gt;
    for x, y in connections:&lt;br /&gt;
        if x not in graph:&lt;br /&gt;
            graph[x] = []&lt;br /&gt;
        if y not in graph:&lt;br /&gt;
            graph[y] = []&lt;br /&gt;
        graph[x].append(y)&lt;br /&gt;
        graph[y].append(x)&lt;br /&gt;
&lt;br /&gt;
    # Funcție pentru calculul sumei maxime a coeficienților&lt;br /&gt;
    def dfs(node, parent, current_path, current_dust):&lt;br /&gt;
        nonlocal max_sum&lt;br /&gt;
        current_path.append(node)&lt;br /&gt;
&lt;br /&gt;
        # Calculăm suma pentru nodul curent&lt;br /&gt;
        current_sum = sum(p[i - 1] for i in current_path)&lt;br /&gt;
        max_sum = max(max_sum, current_sum)&lt;br /&gt;
&lt;br /&gt;
        # Parcurgem vecinii nodului curent&lt;br /&gt;
        for neighbor in graph[node]:&lt;br /&gt;
            if neighbor != parent:&lt;br /&gt;
                # Calculăm numărul total de spiriduși de praf pe drumul curent&lt;br /&gt;
                total_dust = current_dust + s[neighbor - 1]&lt;br /&gt;
                # Verificăm dacă numărul de spiriduși nu depășește C&lt;br /&gt;
                if total_dust &amp;lt;= C:&lt;br /&gt;
                    dfs(neighbor, node, current_path[:], total_dust)&lt;br /&gt;
&lt;br /&gt;
    max_sum = 0&lt;br /&gt;
    dfs(1, 0, [], s[0])&lt;br /&gt;
&lt;br /&gt;
    return max_sum&lt;br /&gt;
&lt;br /&gt;
# Citim datele de intrare&lt;br /&gt;
input_data = read_input(&amp;quot;spiridusiin.txt&amp;quot;)&lt;br /&gt;
if input_data is not None:&lt;br /&gt;
    N, C, s, p, connections = input_data&lt;br /&gt;
&lt;br /&gt;
    # Calculăm rezultatul&lt;br /&gt;
    result = solve(N, C, s, p, connections)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatul în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;spiridusiout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(str(result))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1116_-_Karb&amp;diff=9192</id>
		<title>1116 - Karb</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1116_-_Karb&amp;diff=9192"/>
		<updated>2024-01-07T20:05:19Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
În perioada Campionatului Mondial din Brazilia se preconizează o creştere a traficului de cafea. Se ştie că sunt &#039;&#039;&#039;N&#039;&#039;&#039; orase, conectate prin &#039;&#039;&#039;N-1&#039;&#039;&#039; străzi bidirecţionale, astfel încât se poate ajunge din orice oraş în altul. În prezent există &#039;&#039;&#039;K&#039;&#039;&#039; carteluri de cafea aflate în oraşe distincte, care își exercita influența în propriul oraș. Se ştie că fiecare din aceste carteluri doreşte să-şi extindă influenţa în oraşele vecine. Astfel, la un moment de timp, un cartel poate să-şi extindă influenţa într-un oraş vecin doar dacă acesta nu se află sub influenţa altui cartel. O dată ce un cartel îşi extinde influenta asupra unui nou oraş, cartelul îşi poate extinde influenţa şi în oraşele vecine acestuia. Se ştie că până la începerea campionatului mondial, fiecare oraş va fi sub influenţa unui cartel.&lt;br /&gt;
&lt;br /&gt;
ABIN (Agência Brasileira de Inteligência) doreşte să afle în câte moduri poate fi dominată ţara de influenţele celor &#039;&#039;&#039;K&#039;&#039;&#039; carteluri la data începerii campionatului mondial, modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Cerință ==&lt;br /&gt;
Cunoscând numărul de orașe &#039;&#039;&#039;N&#039;&#039;&#039;, modul în care acestea sunt conectate, numărul de carteluri inițiale &#039;&#039;&#039;K&#039;&#039;&#039; și cele &#039;&#039;&#039;K&#039;&#039;&#039; orașe în care se află cartelurile, să se determine numărul de moduri în care ţara poate fi împărţită între cartelurile de cafea, modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;karbin.txt&#039;&#039;&#039; conține pe prima linie două numere naturale &#039;&#039;&#039;N&#039;&#039;&#039; şi &#039;&#039;&#039;K&#039;&#039;&#039;, reprezentând numărul de oraşe, respectiv numărul cartelurilor existente iniţial. Pe a doua linie din fişier se vor afla &#039;&#039;&#039;K&#039;&#039;&#039; numere, reprezentând oraşele în care se află cele &#039;&#039;&#039;K&#039;&#039;&#039; carteluri. Pe următoarele &#039;&#039;&#039;N-1&#039;&#039;&#039; linii se vor afla câte două numere naturale, reprezentând o legătură între cele două oraşe.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;karbout.txt&#039;&#039;&#039; va conține pe prima linie un singur număr natural reprezentând numărul de moduri modulo &#039;&#039;&#039;666013&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; K &amp;amp;les; N &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*Pentru teste în valoare de 10% din punctaj se garantează că &#039;&#039;&#039;k &amp;amp;les; n &amp;amp;les; 7&#039;&#039;&#039;, iar pentru alte 20% din teste se garantează că &#039;&#039;&#039;k = 2&#039;&#039;&#039;.&lt;br /&gt;
*Două oraşe sunt vecine dacă există o stradă bidirecțională între ele.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;karbin.txt&#039;&#039;&#039;&lt;br /&gt;
:6 3&lt;br /&gt;
:3 4 5&lt;br /&gt;
:1 2 &lt;br /&gt;
:1 3 &lt;br /&gt;
:2 4 &lt;br /&gt;
:2 5 &lt;br /&gt;
:4 6&lt;br /&gt;
;&#039;&#039;&#039;karbout.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;karbin.txt&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;karbout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1116 - Karb&lt;br /&gt;
import sys&lt;br /&gt;
&lt;br /&gt;
mod = 666013&lt;br /&gt;
maxdim = 200005&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(n, k):&lt;br /&gt;
    if not (1 &amp;lt;= k &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        with open(&amp;quot;karbout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
        sys.exit()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def dfs(nod):&lt;br /&gt;
    global D, T, special, viz, G&lt;br /&gt;
&lt;br /&gt;
    viz[nod] = 1&lt;br /&gt;
&lt;br /&gt;
    sons = 0&lt;br /&gt;
    for fiu in G[nod]:&lt;br /&gt;
        if viz[fiu]:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        sons += 1&lt;br /&gt;
        T[fiu] = nod&lt;br /&gt;
        dfs(fiu)&lt;br /&gt;
&lt;br /&gt;
    if not sons:&lt;br /&gt;
        if special[nod]:&lt;br /&gt;
            D[nod][0], D[nod][1] = 0, 1&lt;br /&gt;
        else:&lt;br /&gt;
            D[nod][0], D[nod][1] = 1, 0&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    localD = [[0] * (sons + 1) for _ in range(2)]&lt;br /&gt;
    localD[0][0] = 1&lt;br /&gt;
    ind = 0&lt;br /&gt;
    for fiu in G[nod]:&lt;br /&gt;
        if T[fiu] != nod:&lt;br /&gt;
            continue&lt;br /&gt;
&lt;br /&gt;
        ind += 1&lt;br /&gt;
        localD[0][ind] = (localD[0][ind - 1] * (D[fiu][0] + D[fiu][1])) % mod&lt;br /&gt;
        localD[1][ind] = (localD[0][ind - 1] * D[fiu][1] + localD[1][ind - 1] * (D[fiu][0] + D[fiu][1])) % mod&lt;br /&gt;
&lt;br /&gt;
    if not special[nod]:&lt;br /&gt;
        D[nod][0], D[nod][1] = localD[0][ind], localD[1][ind]&lt;br /&gt;
    else:&lt;br /&gt;
        D[nod][0], D[nod][1] = 0, localD[0][ind]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    global D, T, special, viz, G&lt;br /&gt;
&lt;br /&gt;
    input_file = open(&amp;quot;karbin.txt&amp;quot;, &amp;quot;r&amp;quot;)&lt;br /&gt;
    output_file = open(&amp;quot;karbout.txt&amp;quot;, &amp;quot;w&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    # Citeste N si K&lt;br /&gt;
    N, K = map(int, input_file.readline().split())&lt;br /&gt;
&lt;br /&gt;
    check_restrictions(N, K)&lt;br /&gt;
&lt;br /&gt;
    special = [0] * maxdim&lt;br /&gt;
    viz = [0] * maxdim&lt;br /&gt;
    T = [0] * maxdim&lt;br /&gt;
    D = [[0] * 2 for _ in range(maxdim)]&lt;br /&gt;
    G = [[] for _ in range(maxdim)]&lt;br /&gt;
&lt;br /&gt;
    # Citeste orașele cu carteluri&lt;br /&gt;
    cartel_cities = list(map(int, input_file.readline().split()))&lt;br /&gt;
    assert len(cartel_cities) == K&lt;br /&gt;
    for x in cartel_cities:&lt;br /&gt;
        assert not special[x]&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= N&lt;br /&gt;
        special[x] = x&lt;br /&gt;
&lt;br /&gt;
    # Citeste legăturile între orașe&lt;br /&gt;
    for _ in range(N - 1):&lt;br /&gt;
        x, y = map(int, input_file.readline().split())&lt;br /&gt;
        assert 1 &amp;lt;= x &amp;lt;= N&lt;br /&gt;
        assert 1 &amp;lt;= y &amp;lt;= N&lt;br /&gt;
        assert x != y&lt;br /&gt;
        G[x].append(y)&lt;br /&gt;
        G[y].append(x)&lt;br /&gt;
&lt;br /&gt;
    dfs(1)&lt;br /&gt;
    print(D[1][1], file=output_file)&lt;br /&gt;
&lt;br /&gt;
    input_file.close()&lt;br /&gt;
    output_file.close()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0696_-_Mario&amp;diff=9122</id>
		<title>0696 - Mario</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0696_-_Mario&amp;diff=9122"/>
		<updated>2024-01-06T15:21:46Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Jocurile cu Mario sunt jocuri on-line pentru copii de toate vârstele. Acum, Mario-personajul din joc, are nevoie de ajutorul vostru pentru a ajunge din turnul castelului unde se află, la sol, unde îl așteaptă cu nerăbdare prințesa Peach.&lt;br /&gt;
&lt;br /&gt;
Coborârea din turn se face cu ajutorul unor platforme orizontale, de diferite lungimi, fiecare dintre ele aflându-se la o anumită înălțime față de sol. Deplasarea din turn spre sol se va face astfel:&lt;br /&gt;
&lt;br /&gt;
Mario își dă drumul în cădere liberă din turn și cade sub efectul greutății sale;&lt;br /&gt;
dacă în cădere, el ajunge pe o platformă, se va deplasa pe suprafața acesteia spre unul din capetele din stânga sau din dreapta ale acesteia, urmând ca de acolo să procedeze la fel, lăsându-se din nou în cădere liberă spre sol.&lt;br /&gt;
Dacă Mario cade pe o distanță mai mare decât H, atunci își pierde toată energia și nu mai poate continua jocul.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând poziția în care se află Mario și modul de așezare al platformelor (date în coordonate carteziene), determinați numărul drumurilor distincte pe care le poate parcurge Mario pentru a ajunge la prințesă.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Din fişierul marioin.txt se va citi:&lt;br /&gt;
*de pe prima linie trei numere naturale hM,@xM@ și H reprezentând în ordine: înălțimea la care se află Mario față de sol, abscisa poziției sale și înălțimea maximă pe care o poate parcurge în cădere;&lt;br /&gt;
*de pe cea de-a doua linie un număr natural N ce reprezintă numărul de platforme;&lt;br /&gt;
*de pe următoarele N linii câte trei numere naturale hp x1 x2 cu semnificația: la înălțimea hp față de sol se află o platformă orizontală cu extremitatea stângă în x1 și extremitatea dreaptă în x2.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fişierul marioout.txt se va scrie pe prima linie un singur număr natural reprezentând numărul drumurilor distincte pe care le poate parcurge Mario până la prințesă.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;amp;les; N &amp;amp;les; 10 000&lt;br /&gt;
*0 &amp;lt; H, hp, hM &amp;amp;les; 20 000 (hM &amp;gt; hp)&lt;br /&gt;
*0 &amp;lt; xM, x1, x2 &amp;amp;les; 200 000&lt;br /&gt;
*dacă există mai multe platforme la aceeași înălțime se garantează că ele nu se suprapun în niciun punct;&lt;br /&gt;
*numărul drumurilor este întotdeauna mai mare decât 0 și mai mic decât 263&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;marioin.txt&lt;br /&gt;
:14 8 7&lt;br /&gt;
:4&lt;br /&gt;
:9 8 15&lt;br /&gt;
:2 10 13&lt;br /&gt;
:12 6 11&lt;br /&gt;
:4 2 10&lt;br /&gt;
;marioout.txt&lt;br /&gt;
:3&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Turnul se află la înălțimea 14 față de sol și are abscisa 8. Mario poate coborî liber cel mult 7 de unități.&lt;br /&gt;
&lt;br /&gt;
Există 4 platforme:&lt;br /&gt;
*o platformă e situată la înălțimea 9 față de sol și are extremitățile în 8 și 15&lt;br /&gt;
*Altă platformă se află la înălțimea 2 față de sol și are extremițățile în 10 și 13.&lt;br /&gt;
*Următoarea platformă se află la o înălțime de 12 și are extremitatea stângă în 6 iar cea dreaptă în 11.&lt;br /&gt;
*Ultima platformă se află la 4 unități față de sol și are extremitățile în 2 și 10.&lt;br /&gt;
*Sunt 3 drumuri distincte pe care Mario poate coborî din turn până la sol.&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;marioin.txt&lt;br /&gt;
:0 0 0&lt;br /&gt;
;marioout.txt&lt;br /&gt;
:Nu au fost respectate cerintele impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0696 - Mario&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
            hM, xM, H = map(int, file.readline().split())&lt;br /&gt;
            N = int(file.readline())&lt;br /&gt;
            platforms = [list(map(int, file.readline().split())) for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
            return hM, xM, H, N, platforms&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Nu au fost respectate cerintele impuse: {str(e)}&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
def write_output(file_name, result):&lt;br /&gt;
    with open(file_name, &#039;w&#039;) as file:&lt;br /&gt;
        if result is not None:&lt;br /&gt;
            file.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def count_paths(hM, xM, H, N, platforms):&lt;br /&gt;
    dp = [0] * (hM + 1)&lt;br /&gt;
    dp[hM] = 3&lt;br /&gt;
&lt;br /&gt;
    platforms.sort(key=lambda x: x[0])&lt;br /&gt;
&lt;br /&gt;
    for h in range(hM, 0, -1):&lt;br /&gt;
        for platform in platforms:&lt;br /&gt;
            hp, x1, x2 = platform&lt;br /&gt;
            if h &amp;lt;= hp and xM &amp;gt;= x1 and xM &amp;lt;= x2:&lt;br /&gt;
                for i in range(h - 1, max(0, h - H) - 1, -1):&lt;br /&gt;
                    dp[i] += dp[h]&lt;br /&gt;
&lt;br /&gt;
    return sum(dp)&lt;br /&gt;
&lt;br /&gt;
def main(input_file, output_file):&lt;br /&gt;
    result = read_input(input_file)&lt;br /&gt;
    if result is not None:&lt;br /&gt;
        hM, xM, H, N, platforms = result&lt;br /&gt;
        result = count_paths(hM, xM, H, N, platforms)&lt;br /&gt;
        write_output(output_file, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main(&amp;quot;marioin.txt&amp;quot;, &amp;quot;marioout.txt&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0713_-_SecvPal1&amp;diff=9121</id>
		<title>0713 - SecvPal1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0713_-_SecvPal1&amp;diff=9121"/>
		<updated>2024-01-06T15:09:02Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Pentru un şir de caractere S, vom nota cu lmax[S] lungimea maximă a unei secvenţe palindromice conţinută în şirul S. Astfel, pentru şirul S=”abAabaabC”, lmax[S]=4, iar pentru şirul S=”a”, lmax[S]=1.&lt;br /&gt;
&lt;br /&gt;
Prin secvenţa palindromică a unui şir S înţelegem un subşir de caractere aflate pe poziţii consecutive, ce formează un palindrom.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Date fiind N şiruri de caractere S[1], S[2],…, S[n] şi o valoare naturală L, se cere să se determine numărul de secvenţe de şiruri de caractere de forma: S[i], S[i+1], … , S[j], cu i&amp;lt;=j, pentru care lmax[S[i]]+lmax[S[i+1]]+... +lmax[S[j]]=L.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare secvpal1in.txt conține pe prima linie două numere naturale N, L cu semnificaţia din enunţ, iar pe fiecare dintre următoarele N linii, câte un şir de caractere.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire secvpal1out.txt va conține pe prima linie un număr natural nr ce reprezintă numărul de secvenţe de şiruri de caractere ce îndeplinesc condiţia cerută.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 &amp;amp;les; N &amp;amp;les; 50 000;&lt;br /&gt;
*0 &amp;amp;les; nr &amp;amp;les; 10 000;&lt;br /&gt;
*1 &amp;amp;les; lungimea maximă a oricărui şir S[i] &amp;amp;les; 10 000, 1&amp;amp;les;i&amp;amp;les;N;&lt;br /&gt;
*1 &amp;amp;les; lungimea maximă a unei secvenţe palindromice lmax[S[i]] &amp;amp;les; 1 000;&lt;br /&gt;
*1 &amp;amp;les; (lungimea maximă şir S[i]) × N &amp;amp;les; 1 000 000;&lt;br /&gt;
*Cele N şiruri de caractere conţin doar caracterele ‘A’..’Z’, ’a’..’z’;&lt;br /&gt;
*Un palindrom este un şir de caractere care citit de la stânga la dreapta sau de la dreapta la stânga este acelaşi.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;secvpal1in.txt&lt;br /&gt;
:5 11&lt;br /&gt;
:aCCACCACaBa&lt;br /&gt;
:AAPAPAACCAA&lt;br /&gt;
:acaacc&lt;br /&gt;
:capac&lt;br /&gt;
:CACAACAACACCAACP&lt;br /&gt;
;secvpal1out.txt&lt;br /&gt;
:2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
:1. lmax(”aCCACCACaBa”)=6&lt;br /&gt;
:2. lmax(”AAPAPAACCAA”)=7&lt;br /&gt;
:3. lmax(”acaacc”)=4&lt;br /&gt;
:4. lmax(”capac”)=5&lt;br /&gt;
:5. lmax(”CACAACAACACCAACP”)=11&lt;br /&gt;
&lt;br /&gt;
Cele două secvenţe de lungime 11 sunt: (2,3) şi (5)&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;secvpal1in.txt&lt;br /&gt;
: 0&lt;br /&gt;
;secvpal1out.txt&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0713 - SecvPal1&lt;br /&gt;
def is_palindrome(s):&lt;br /&gt;
    return s == s[::-1]&lt;br /&gt;
&lt;br /&gt;
def calculate_lmax(s):&lt;br /&gt;
    lmax = 0&lt;br /&gt;
    current_length = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(len(s)):&lt;br /&gt;
        current_length = 0&lt;br /&gt;
        while i - current_length &amp;gt;= 0 and i + current_length &amp;lt; len(s) and s[i - current_length] == s[i + current_length]:&lt;br /&gt;
            current_length += 1&lt;br /&gt;
&lt;br /&gt;
        lmax = max(lmax, current_length * 2 - 1)&lt;br /&gt;
&lt;br /&gt;
    return lmax&lt;br /&gt;
&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
            N, L = map(int, file.readline().split())&lt;br /&gt;
            strings = [file.readline().strip() for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
            return N, L, strings&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Nu au fost respectate cerintele impuse: {str(e)}&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
def write_output(file_name, result):&lt;br /&gt;
    with open(file_name, &#039;w&#039;) as file:&lt;br /&gt;
        if result is not None:&lt;br /&gt;
            file.write(f&amp;quot;{result}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def count_sequences(N, L, strings):&lt;br /&gt;
    count = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(i, N):&lt;br /&gt;
            lmax_sum = sum(calculate_lmax(s) for s in strings[i:j+1])&lt;br /&gt;
            if lmax_sum == L:&lt;br /&gt;
                count += 2&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
def main(input_file, output_file):&lt;br /&gt;
    result = read_input(input_file)&lt;br /&gt;
    if result is not None:&lt;br /&gt;
        N, L, strings = result&lt;br /&gt;
        result = count_sequences(N, L, strings)&lt;br /&gt;
        write_output(output_file, result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main(&amp;quot;secvpal1in.txt&amp;quot;, &amp;quot;secvpal1out.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1112_-_Puteri4&amp;diff=9120</id>
		<title>1112 - Puteri4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1112_-_Puteri4&amp;diff=9120"/>
		<updated>2024-01-06T15:04:37Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Nu e un secret pentru nimeni faptul că Mireluş se antrenează în timpul liber cu probleme de algoritmică. De curând a aflat că un număr natural &#039;&#039;&#039;N&#039;&#039;&#039;, pentru care există două numere naturale nenule &#039;&#039;&#039;A&#039;&#039;&#039; şi &#039;&#039;&#039;B&#039;&#039;&#039; (B&amp;gt;1) astfel încât &#039;&#039;&#039;N = A^B&#039;&#039;&#039;, se numeşte &#039;&#039;&#039;putere&#039;&#039;&#039;. Mireluş şi-a propus să determine numărul de puteri din intervalul &#039;&#039;&#039;[X, Y]&#039;&#039;&#039;, unde &#039;&#039;&#039;X şi Y&#039;&#039;&#039; sunt numere naturale nenule.&lt;br /&gt;
&lt;br /&gt;
Cum probabil v-aţi imaginat deja, Mireluş nu a reuşit să rezolve această problemă şi a decis să ceară ajutorul Olimpiei D’Info. Pentru a fi sigur că nici ea nu greşeşte, i-a dat un set de intervale şi i-a cerut să determine pentru fiecare interval numărul de puteri corespunzător.&lt;br /&gt;
&lt;br /&gt;
== Cerință ==&lt;br /&gt;
Dându-se numărul de intervale &#039;&#039;&#039;T&#039;&#039;&#039; şi pentru fiecare din cele T intervale cele două extremităţi, determinaţi numărul de &#039;&#039;&#039;puteri&#039;&#039;&#039; corespunzător fiecărui interval dat de Mireluş Olimpiei.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;puteri4in.txt&#039;&#039;&#039; conține pe prima linie numărul de intervale &#039;&#039;&#039;T&#039;&#039;&#039;, iar pe fiecare din următoarele &#039;&#039;&#039;T&#039;&#039;&#039; linii câte 2 numere naturale nenule &#039;&#039;&#039;X şi Y&#039;&#039;&#039;, separate prin exact un spaţiu, reprezentând extremităţile intervalelor.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;puteri4out.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;T&#039;&#039;&#039; linii. Fiecare linie va conţine numărul de puteri care aparţin intervalului corespunzător din fişierul de intrare.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; T &amp;amp;les; 131&#039;&#039;&#039;.&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; X &amp;amp;les; Y &amp;amp;les; 10^18.&#039;&#039;&#039;&lt;br /&gt;
*Intervalul &#039;&#039;&#039;[X, Y]&#039;&#039;&#039; conţine şi numerele X şi Y.&lt;br /&gt;
*Pentru 10% din teste &#039;&#039;&#039;Y &amp;amp;les; 5000.&#039;&#039;&#039;&lt;br /&gt;
*Pentru alte 25% din teste &#039;&#039;&#039;Y &amp;amp;les; 100 000&#039;&#039;&#039;.&lt;br /&gt;
*Pentru alte 20% din teste &#039;&#039;&#039;Y &amp;amp;les; 10 000 000&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;puteri4in.txt&#039;&#039;&#039;&lt;br /&gt;
:1&lt;br /&gt;
:1 36&lt;br /&gt;
;&#039;&#039;&#039;puteri4out.txt&#039;&#039;&#039;&lt;br /&gt;
:9&lt;br /&gt;
:Datele corespund&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;puteri4in.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;puteri4out.txt&#039;&#039;&#039;&lt;br /&gt;
:Datele nu corespund&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1112 - Puteri4&lt;br /&gt;
def este_putere(numar):&lt;br /&gt;
    # Verifică dacă un număr este putere&lt;br /&gt;
    for baza in range(2, int(numar ** 0.5) + 1):&lt;br /&gt;
        exponent = 2&lt;br /&gt;
        putere = baza ** exponent&lt;br /&gt;
        while putere &amp;lt;= numar:&lt;br /&gt;
            if putere == numar:&lt;br /&gt;
                return True&lt;br /&gt;
            exponent += 1&lt;br /&gt;
            putere = baza ** exponent&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def numar_puteri_in_interval(X, Y):&lt;br /&gt;
    numar_puteri = 1&lt;br /&gt;
    for numar in range(X, Y + 1):&lt;br /&gt;
        if este_putere(numar):&lt;br /&gt;
            numar_puteri += 1&lt;br /&gt;
    return numar_puteri&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;puteri4in.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
            T = int(fin.readline().strip())&lt;br /&gt;
            intervale = [list(map(int, fin.readline().strip().split())) for _ in range(T)]&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fișierul puteri4in.txt nu a fost găsit.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele din fișierul de intrare nu sunt corecte.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;puteri4out.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            for interval in intervale:&lt;br /&gt;
                numar_puteri = numar_puteri_in_interval(interval[0], interval[1])&lt;br /&gt;
                fout.write(str(numar_puteri) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        print(&amp;quot;Datele corespund.&amp;quot;)&lt;br /&gt;
    except IOError:&lt;br /&gt;
        print(&amp;quot;Nu s-a putut scrie în fișierul de ieșire.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1765_-_Cutie&amp;diff=9119</id>
		<title>1765 - Cutie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1765_-_Cutie&amp;diff=9119"/>
		<updated>2024-01-06T14:42:50Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
După ce au vizitat toate obiectivele turistice din municipiul Iaşi, Ioana şi Maria au inventat un joc.&lt;br /&gt;
&lt;br /&gt;
Ele au la dispoziţie un număr de &#039;&#039;&#039;n&#039;&#039;&#039; cutii aranjate în linie dreaptă, numerotate în ordine de la 1 la n, şi un număr de m bile ce pot fi aşezate în unele dintre aceste cutii. Unele cutii sunt deteriorate, astfel că bilele dispar dacă sunt puse în acele cutii.&lt;br /&gt;
&lt;br /&gt;
O mutare constă în alegerea unei bile şi poziţionarea ei în una din cutiile învecinate (precedenta sau următoarea ). Bilele pot fi mutate după următoarea regulă: când o bilă a fost mutată pentru prima dată într-o anumită direcţie, atunci bila îşi păstrează direcţia de deplasare la următoarele mutări (de exemplu, dacă o bilă a fost mutată pentru prima dată spre stânga atunci orice mutări ulterioare ale acestei bile se pot face doar spre stânga).&lt;br /&gt;
&lt;br /&gt;
Jocul se termină atunci când nici un jucător nu mai poate face nici o mutare. Pierde primul jucător care nu mai poate face nici o mutare. Fetele joacă un număr de T astfel de jocuri. Ştiind că Ioana este prima care face o mutare, iar apoi fetele mută alternativ, se cere să se stabilească pentru fiecare din cele T jocuri dacă ea are sau nu o strategie sigură de câştig.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul &#039;&#039;&#039;cutiein.txt&#039;&#039;&#039; conţine pe prima linie un număr natural &#039;&#039;&#039;T&#039;&#039;&#039;, care reprezintă numărul de jocuri pe care le joacă cele două fete.&lt;br /&gt;
&lt;br /&gt;
Pe următoarele linii fişierul conţine, în ordine, descrierea celor &#039;&#039;&#039;T&#039;&#039;&#039; jocuri. Fiecare joc este descris prin câte 3 linii:&lt;br /&gt;
&lt;br /&gt;
*prima linie va conţine, în ordine, trei numere naturale &#039;&#039;&#039;n, k, m&#039;&#039;&#039; separate prin câte un singur spaţiu (n reprezintă numărul de cutii, k reprezintă numărul de cutii deteriorate şi m reprezintă numărul de bile)&lt;br /&gt;
*a doua linie va conţine &#039;&#039;&#039;k&#039;&#039;&#039; numere naturale, separate prin câte un singur spaţiu, reprezentând numerele de ordine ale cutiilor deteriorate&lt;br /&gt;
*a treia linie va conţine m numere naturale reprezentând numerele de ordine ale cutiilor care conţin bile la începutul jocului.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul &#039;&#039;&#039;cutieout.txt&#039;&#039;&#039; va conţine pe prima linie un şir de &#039;&#039;&#039;T&#039;&#039;&#039; valori de &#039;&#039;&#039;0&#039;&#039;&#039; şi &#039;&#039;&#039;1&#039;&#039;&#039; neseparate prin spaţii, având următoarea semnificaţie: valoarea de pe poziţia i din şir (&#039;&#039;&#039;i={1,2,…,T}&#039;&#039;&#039;) este 1 daca jocul &#039;&#039;&#039;i&#039;&#039;&#039; este câştigat de Ioana sau 0 dacă jocul i este pierdut de Ioana.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; T &amp;amp;les; 10&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n ,m &amp;amp;les; 10000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;amp;les; k &amp;amp;les; 10000&#039;&#039;&#039;&lt;br /&gt;
*se consideră că din prima nu poate fi mutată o bilă spre stânga, iar din ultima nu se poate muta o bila spre dreapta;&lt;br /&gt;
*iniţial nici o bilă nu se află în prima , în ultima sau într-o deteriorată;&lt;br /&gt;
*în fişierul de intrare poziţiile bilelor şi cele ale cutiilor deteriorate sunt sortate crescător;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;cutiein.txt&#039;&#039;&#039;&lt;br /&gt;
:2&lt;br /&gt;
:10 1 1&lt;br /&gt;
:6&lt;br /&gt;
:3&lt;br /&gt;
:10 1 2 &lt;br /&gt;
:5 &lt;br /&gt;
:4 4 &lt;br /&gt;
;&#039;&#039;&#039;cutieout.txt&#039;&#039;&#039;&lt;br /&gt;
:10&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;cutiein.txt&#039;&#039;&#039;&lt;br /&gt;
: 0&lt;br /&gt;
: 0 0 -1&lt;br /&gt;
;&#039;&#039;&#039;cutieout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1765 - Cutie&lt;br /&gt;
def afiseaza_mesaj(rezultat):&lt;br /&gt;
    if not rezultat:&lt;br /&gt;
        with open(&amp;quot;cutieout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
    if rezultat:&lt;br /&gt;
        with open(&amp;quot;cutieout.txt&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
            fout.write(&amp;quot;Datele corespund\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def verifica_joc(joc):&lt;br /&gt;
    n, k, m = joc[0]&lt;br /&gt;
    cutii_deteriorate = joc[1]&lt;br /&gt;
    bile_initiale = joc[2]&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă datele de intrare respectă restricțiile&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 10000 and 0 &amp;lt;= k &amp;lt;= 10000 and 1 &amp;lt;= m &amp;lt;= 10000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă nu există bile în prima, ultima sau în cutiile deteriorate&lt;br /&gt;
    if 1 in bile_initiale or n in bile_initiale or any(c in cutii_deteriorate for c in bile_initiale):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Verificăm dacă datele sunt sortate crescător&lt;br /&gt;
    if any(bile_initiale[i] &amp;gt;= bile_initiale[i + 1] for i in range(m - 1)):&lt;br /&gt;
        return False&lt;br /&gt;
    if any(cutii_deteriorate[i] &amp;gt;= cutii_deteriorate[i + 1] for i in range(k - 1)):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    # Determinăm dacă Ioana are o strategie sigură de câștig&lt;br /&gt;
    return (n - k) % 2 == 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Functia main()&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;cutiein.txt&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        T = int(fin.readline().strip())&lt;br /&gt;
        jocuri = []&lt;br /&gt;
        for _ in range(T):&lt;br /&gt;
            n, k, m = map(int, fin.readline().strip().split())&lt;br /&gt;
            cutii_deteriorate = list(map(int, fin.readline().strip().split()))&lt;br /&gt;
            bile_initiale = list(map(int, fin.readline().strip().split()))&lt;br /&gt;
            jocuri.append(((n, k, m), cutii_deteriorate, bile_initiale))&lt;br /&gt;
&lt;br /&gt;
    rezultate = [1 if verifica_joc(joc) else 0 for joc in jocuri]&lt;br /&gt;
&lt;br /&gt;
    afiseaza_mesaj(any(rezultat == 0 for rezultat in rezultate))&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;cutieout.txt&amp;quot;, &amp;quot;a&amp;quot;) as fout:&lt;br /&gt;
        fout.write(&amp;quot;&amp;quot;.join(map(str, rezultate)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1677_-_Tort&amp;diff=9118</id>
		<title>1677 - Tort</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1677_-_Tort&amp;diff=9118"/>
		<updated>2024-01-06T14:27:25Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;br /&gt;
Pentru că s-a calificat la Olimpiada Națională de Informatică de la Craiova, NN îi pregătește lui XORin un tort. Tortul este dreptunghiular, format din linii și coloane numerotate de la &amp;lt;code&amp;gt;1&amp;lt;/code&amp;gt; la &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; pentru linii ș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; pentru coloane. Tortul este format din bucăți de dimensiune &amp;lt;code&amp;gt;1x1&amp;lt;/code&amp;gt;, fiecare fiind acoperită cu un alt tip de glazură. În fiecare zi NN îi taie lui XORin câte o felie, alegând cel mai mare pătrat care conține bucăți acoperite cu același tip de glazură. În cazul în care există mai multe astfel de felii, NN o alege pe cea care are colțul din dreapta jos situat pe linia cu indicele cel mai mic. Dacă și în acest caz există mai multe posibilități, el o va alege pe cea cu colțul din dreapta jos situat în coloana cu indicele cel mai mic.&lt;br /&gt;
&lt;br /&gt;
= Cerința =&lt;br /&gt;
Precizați latura și coordonatele colțului din dreapta jos pentru fiecare felie de tort primită, în ordinea specificată mai sus.&lt;br /&gt;
&lt;br /&gt;
= Date de intrare =&lt;br /&gt;
Fișierul de intrare &amp;lt;code&amp;gt;tortin.txt&amp;lt;/code&amp;gt; conține pe prima linie numerele naturale &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; și &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt;, separate printr-un spațiu, reprezentând lungimea și lățimea tortului. Pe următoarele &amp;lt;code&amp;gt;N&amp;lt;/code&amp;gt; linii se vor afla câte &amp;lt;code&amp;gt;M&amp;lt;/code&amp;gt; caractere din mulțimea &amp;lt;code&amp;gt;{‘0’, ..., ‘9’}&amp;lt;/code&amp;gt; reprezentând tipul de glazură cu care este acoperită bucata de pe linia &amp;lt;code&amp;gt;i&amp;lt;/code&amp;gt; și coloana &amp;lt;code&amp;gt;j&amp;lt;/code&amp;gt; a tortului. Liniile și coloanele sunt 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;, respectiv 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;. Pe linii nu există spațiu între oricare două caractere alăturate.&lt;br /&gt;
&lt;br /&gt;
= Date de ieșire =&lt;br /&gt;
În fișierul de ieșire &amp;lt;code&amp;gt;tortout.txt&amp;lt;/code&amp;gt; se vor afișa feliile de tort în ordinea în care XORin le va primi. Pentru fiecare felie se va afișa latura feliei, precum și coordonatele colțului din dreapta jos, valori separate prin câte un singur spațiu.&lt;br /&gt;
&lt;br /&gt;
= Restricții și precizări =&lt;br /&gt;
&lt;br /&gt;
* &amp;lt;code&amp;gt;1 ≤ N,M ≤ 500&amp;lt;/code&amp;gt;&lt;br /&gt;
* Numerotarea liniilor și coloanelor nu se schimbă în urma operațiilor de eliminare.&lt;br /&gt;
* Pentru 30% din teste se garantează că &amp;lt;code&amp;gt;1 ≤ N,M ≤ 35&amp;lt;/code&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Exemplu 1: =&lt;br /&gt;
&amp;lt;code&amp;gt;tortin.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 4 7&lt;br /&gt;
 1111111&lt;br /&gt;
 1112333&lt;br /&gt;
 1112333&lt;br /&gt;
 4444333&lt;br /&gt;
&amp;lt;code&amp;gt;tortout.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Datele de intrare sunt corecte&lt;br /&gt;
&lt;br /&gt;
 3 3 3&lt;br /&gt;
 3 4 7&lt;br /&gt;
 1 1 4&lt;br /&gt;
 1 1 5&lt;br /&gt;
 1 1 6&lt;br /&gt;
 1 1 7&lt;br /&gt;
 1 2 4&lt;br /&gt;
 1 3 4&lt;br /&gt;
 1 4 1&lt;br /&gt;
 1 4 2&lt;br /&gt;
 1 4 3&lt;br /&gt;
 1 4 4&lt;br /&gt;
= Explicatie =&lt;br /&gt;
*Prima felie primită de &amp;lt;code&amp;gt;XORin&amp;lt;/code&amp;gt; va fi cea care are colțul din dreapta jos &amp;lt;code&amp;gt;(3,3)&amp;lt;/code&amp;gt; și latura 3.&lt;br /&gt;
*A doua felie va fi cea cu colțul din dreapta jos &amp;lt;code&amp;gt;(4,7)&amp;lt;/code&amp;gt; și latura 3.&lt;br /&gt;
*Următoarea felie va fi cea cu colțul din dreapta jos &amp;lt;code&amp;gt;(1,4)&amp;lt;/code&amp;gt; și latură 1. ș.a.m.d.&lt;br /&gt;
= Exemplu 2: =&lt;br /&gt;
&amp;lt;code&amp;gt;tortin.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 0 0&lt;br /&gt;
&amp;lt;code&amp;gt;tortout.txt&amp;lt;/code&amp;gt;&lt;br /&gt;
 Nu au fost respectate cerintele impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
#1677 - Tort&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    try:&lt;br /&gt;
        with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
            N, M = map(int, file.readline().split())&lt;br /&gt;
            tort = [list(map(int, line.strip())) for line in file]&lt;br /&gt;
        &lt;br /&gt;
        if 1 &amp;lt;= N &amp;lt;= 500 and 1 &amp;lt;= M &amp;lt;= 500:&lt;br /&gt;
            return N, M, tort&lt;br /&gt;
        else:&lt;br /&gt;
            raise ValueError(&amp;quot;Numerele nu respecta restricțiile.&amp;quot;)&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        print(f&amp;quot;Nu au fost respectate cerintele impuse: {str(e)}&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
def write_output(file_name, result):&lt;br /&gt;
    with open(file_name, &#039;w&#039;) as file:&lt;br /&gt;
        if result is not None:&lt;br /&gt;
            for item in result:&lt;br /&gt;
                file.write(&amp;quot; &amp;quot;.join(map(str, item)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def find_largest_square(N, M, tort, i, j):&lt;br /&gt;
    size = 1&lt;br /&gt;
&lt;br /&gt;
    while i + size &amp;lt;= N and j + size &amp;lt;= M:&lt;br /&gt;
        if all(tort[x][y] == tort[i][j] for x in range(i, i + size) for y in range(j, j + size)):&lt;br /&gt;
            size += 1&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
#1677 - Tort&lt;br /&gt;
    return size - 1  # Return the side length of the largest square&lt;br /&gt;
&lt;br /&gt;
def find_felii(N, M, tort):&lt;br /&gt;
    felii = []&lt;br /&gt;
&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(M):&lt;br /&gt;
            side_length = find_largest_square(N, M, tort, i, j)&lt;br /&gt;
            if side_length &amp;gt; 0:&lt;br /&gt;
                felii.append((side_length, i + side_length, j + side_length))&lt;br /&gt;
&lt;br /&gt;
    felii.sort(key=lambda x: (x[0], x[1], x[2]))&lt;br /&gt;
    return felii&lt;br /&gt;
&lt;br /&gt;
def main(input_file, output_file):&lt;br /&gt;
    result = read_input(input_file)&lt;br /&gt;
    if result is not None:&lt;br /&gt;
        N, M, tort = result&lt;br /&gt;
        felii = find_felii(N, M, tort)&lt;br /&gt;
        write_output(output_file, felii)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main(&amp;quot;tortin.txt&amp;quot;, &amp;quot;tortout.txt&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2928_-_SqrtXXL&amp;diff=9117</id>
		<title>2928 - SqrtXXL</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2928_-_SqrtXXL&amp;diff=9117"/>
		<updated>2024-01-06T14:15:25Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă numărul real &#039;&#039;&#039;n&#039;&#039;&#039;. Calculați &#039;&#039;&#039;√n&#039;&#039;&#039; cu &#039;&#039;&#039;8&#039;&#039;&#039; zecimale exacte.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran &#039;&#039;&#039;√n&#039;&#039;&#039; cu &#039;&#039;&#039;8&#039;&#039;&#039; zecimale exacte.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*Dacă numărul citit este negativ se calculează ca pentru un număr pozitiv și se afișează &#039;&#039;&#039;i&#039;&#039;&#039; după el.&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; nrcif(n)+&#039;.&#039; &amp;amp;les; 100.001&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 26&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
: Datele de intrare corespund restricțiilor impuse&lt;br /&gt;
: 5.09901951&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: -25&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele de intrare corespund restricțiilor impuse&lt;br /&gt;
:5.00000000i&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 0&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Datele de intrare nu corespund restricțiilor impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2928 - SqrtXXL&lt;br /&gt;
import cmath&lt;br /&gt;
&lt;br /&gt;
def calculate_square_root(n):&lt;br /&gt;
    if n &amp;lt; 0:&lt;br /&gt;
        result = cmath.sqrt(n)&lt;br /&gt;
        return f&amp;quot;{result.real:.8f}{result.imag:+.8f}i&amp;quot;&lt;br /&gt;
    else:&lt;br /&gt;
        result = cmath.sqrt(n)&lt;br /&gt;
        return f&amp;quot;{result.real:.8f}&amp;quot;&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        n = float(input(&amp;quot;Introduceti numarul n: &amp;quot;))&lt;br /&gt;
        if 1 &amp;lt;= len(str(n)) &amp;lt;= 100001:&lt;br /&gt;
            result = calculate_square_root(n)&lt;br /&gt;
            print(result)&lt;br /&gt;
        else:&lt;br /&gt;
            print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse&amp;quot;)&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu sunt valide.&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1265_-_giovanacci&amp;diff=9116</id>
		<title>1265 - giovanacci</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1265_-_giovanacci&amp;diff=9116"/>
		<updated>2024-01-06T14:09:29Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Șirul Fibonacci este definit după regula:&lt;br /&gt;
*&#039;&#039;&#039;F1=1&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;F2=1&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;Fn=Fn–1+Fn–2&#039;&#039;&#039;&lt;br /&gt;
Comisia mafioților îl supune pe Giovanni la &#039;&#039;&#039;T&#039;&#039;&#039; teste. Pentru fiecare test se dau &#039;&#039;&#039;n&#039;&#039;&#039; și apoi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale &#039;&#039;&#039;pos1,pos2,…,posn&#039;&#039;&#039; reprezentând poziții în șirul Fibonacci. Se cere să se găsească cel mai mare număr &#039;&#039;&#039;g&#039;&#039;&#039; care divide &#039;&#039;&#039;Fpos1,Fpos2,…,Fposn&#039;&#039;&#039;. Comisia a înțeles că Giovanni nu poate reține numere mari, așa că îi cere să afișeze restul împărțirii lui &#039;&#039;&#039;g&#039;&#039;&#039; la numărul &#039;&#039;&#039;p&#039;&#039;&#039;. Fiind depășit de cerință, mafiotul are opțiunea să sune publicul și vă contactează pe voi. Ajutați-l pe Giovanni să-și mențină demnitatea și el vă va răsplăti cu un punctaj pe măsură.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;giovanacciin.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;T&#039;&#039;&#039; și &#039;&#039;&#039;p&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;T&#039;&#039;&#039; linii &#039;&#039;&#039;n&#039;&#039;&#039;, urmat de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;giovanacciout.txt&#039;&#039;&#039; va conține cele &#039;&#039;&#039;T&#039;&#039;&#039; răspunsuri, câte unul pe linie.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; T &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;2 &amp;amp;les; p &amp;amp;les; 100000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; posi &amp;amp;les; 100000000000000000&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;giovanacciin.txt&#039;&#039;&#039;&lt;br /&gt;
:2 2&lt;br /&gt;
:3 6 9 12&lt;br /&gt;
:2 5 10&lt;br /&gt;
;&#039;&#039;&#039;giovanacciout.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
:1&lt;br /&gt;
:Datele corespund&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;giovanacciin.txt&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;giovanacciout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1265 - Giovanacci&lt;br /&gt;
def fibonacci(n):&lt;br /&gt;
    fib = [0, 1]&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        fib.append(fib[i - 1] + fib[i - 2])&lt;br /&gt;
    return fib&lt;br /&gt;
&lt;br /&gt;
def find_largest_divisor_modulo_p(n, positions, p):&lt;br /&gt;
    fib_sequence = fibonacci(max(positions))&lt;br /&gt;
    largest_divisor = 0&lt;br /&gt;
&lt;br /&gt;
    for pos in positions:&lt;br /&gt;
        if fib_sequence[pos] &amp;gt; largest_divisor:&lt;br /&gt;
            largest_divisor = fib_sequence[pos]&lt;br /&gt;
&lt;br /&gt;
    return largest_divisor % p&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        # Citirea datelor de intrare din fișier&lt;br /&gt;
        with open(&amp;quot;giovanacciin.txt&amp;quot;, &amp;quot;r&amp;quot;) as input_file:&lt;br /&gt;
            T, p = map(int, input_file.readline().strip().split())&lt;br /&gt;
            tests = [list(map(int, input_file.readline().strip().split()[1:])) for _ in range(T)]&lt;br /&gt;
    except FileNotFoundError:&lt;br /&gt;
        print(&amp;quot;Fișierul giovanacciin.txt nu există.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu sunt valide.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Verificare dacă datele de intrare corespund cerințelor impuse&lt;br /&gt;
    if 1 &amp;lt;= T &amp;lt;= 1000 and 2 &amp;lt;= p &amp;lt;= 100000 and all(1 &amp;lt;= len(test) &amp;lt;= 1000 and all(1 &amp;lt;= posi &amp;lt;= 100000000000000000 for posi in test) for test in tests):&lt;br /&gt;
        # Calcularea rezultatelor și scrierea în fișierul de ieșire&lt;br /&gt;
        with open(&amp;quot;giovanacciout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            for test in tests:&lt;br /&gt;
                result = find_largest_divisor_modulo_p(test[0], test[1:], p)&lt;br /&gt;
                output_file.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
            output_file.write(&amp;quot;Datele corespund\n&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        with open(&amp;quot;giovanacciout.txt&amp;quot;, &amp;quot;w&amp;quot;) as output_file:&lt;br /&gt;
            output_file.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0705_-_2D&amp;diff=9115</id>
		<title>0705 - 2D</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0705_-_2D&amp;diff=9115"/>
		<updated>2024-01-06T13:58:03Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Gigel îşi imaginează lumea în varianta &#039;&#039;&#039;2d&#039;&#039;&#039;, adică reprezentată în sistem de coordonate cartezian &#039;&#039;&#039;XOY&#039;&#039;&#039;. Fiecare persoană din grupul celor &#039;&#039;&#039;N&#039;&#039;&#039; prieteni ai săi este reprezentată în plan printr-un punct identificat prin abscisa şi ordonata sa. În lumea sa &#039;&#039;&#039;2d&#039;&#039;&#039;, plouă ca în Anglia, iar picăturile de ploaie pică paralel cu axa &#039;&#039;&#039;OY&#039;&#039;&#039;, de la o înălţime infinită. Ca să îi ferească pe prietenii săi de ploaie, îşi propune să le construiască apărători pe care le va reprezenta pe hartă prin segmente de dreaptă.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Ştiind că nu poate să deseneze pe hartă decât segmente de lungimi egale, determinaţi care este lungimea minimă a unui segment astfel încât trasând cel mult &#039;&#039;&#039;K&#039;&#039;&#039; segmente, toți cei &#039;&#039;&#039;N&#039;&#039;&#039; prieteni ai săi să fie protejați de ploaie.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;2din.txt&#039;&#039;&#039; conţine:&lt;br /&gt;
*pe prima linie numerele naturale &#039;&#039;&#039;N&#039;&#039;&#039; şi &#039;&#039;&#039;K&#039;&#039;&#039;;&lt;br /&gt;
*pe următoarele &#039;&#039;&#039;N&#039;&#039;&#039; linii se află perechi de numere reale &#039;&#039;&#039;x y&#039;&#039;&#039;, cu exact trei zecimale fiecare, reprezentând abscisa şi ordonata punctului corespunzător fiecărui prieten al lui Gigel;&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;2dout.txt&#039;&#039;&#039; va conţine pe prima linie un singur număr real, cu trei zecimale reprezentând lungimea minimă a unui segment din cele trasate de Gigel.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; K &amp;lt; N &amp;amp;les; 200000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;-1000000.000 &amp;amp;les; x,y &amp;amp;les; 1000000.000&#039;&#039;&#039;&lt;br /&gt;
*Lungimea minimă a unui segment pe care îl va trasa Gigel este &#039;&#039;&#039;1.000&#039;&#039;&#039;&lt;br /&gt;
*Rezultatul va fi afişat cu o eroare de cel mult &#039;&#039;&#039;0.001&#039;&#039;&#039;&lt;br /&gt;
*Un segment trasat între punctele &#039;&#039;&#039;(x1, y1)&#039;&#039;&#039; şi &#039;&#039;&#039;(x2, y2)&#039;&#039;&#039; protejează toate punctele de pe segment şi din semiplanul “de sub” dreapta ce trece prin aceste puncte şi care au abscisele în intervalul închis &#039;&#039;&#039;[x1, x2]&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;2din.txt&#039;&#039;&#039;&lt;br /&gt;
:5 3&lt;br /&gt;
:-5.000 1.000&lt;br /&gt;
:-2.000 3.000&lt;br /&gt;
:3.000 2.000&lt;br /&gt;
:3.000 -2.000&lt;br /&gt;
:1.000 2.000&lt;br /&gt;
;&#039;&#039;&#039;2d.out&#039;&#039;&#039;&lt;br /&gt;
:2.000&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;2din.txt&#039;&#039;&#039;&lt;br /&gt;
:0 0&lt;br /&gt;
:0 0&lt;br /&gt;
:0 0&lt;br /&gt;
;&#039;&#039;&#039;2dout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0705 - 2D&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def is_covered(points, length, K):&lt;br /&gt;
    points.sort()&lt;br /&gt;
&lt;br /&gt;
    last_point = points[0]&lt;br /&gt;
    segments = 1&lt;br /&gt;
&lt;br /&gt;
    for point in points:&lt;br /&gt;
        if point - last_point &amp;gt; length:&lt;br /&gt;
            segments += 1&lt;br /&gt;
            last_point = point&lt;br /&gt;
&lt;br /&gt;
    return segments &amp;lt;= K&lt;br /&gt;
&lt;br /&gt;
def find_min_segment_length(N, K, points):&lt;br /&gt;
    left, right = 0, max(points)&lt;br /&gt;
&lt;br /&gt;
    while abs(left - right) &amp;gt; 0.001:&lt;br /&gt;
        mid = (left + right) / 2&lt;br /&gt;
&lt;br /&gt;
        if is_covered(points, mid, K):&lt;br /&gt;
            right = mid&lt;br /&gt;
        else:&lt;br /&gt;
            left = mid&lt;br /&gt;
&lt;br /&gt;
    return round(right, 3)&lt;br /&gt;
&lt;br /&gt;
def check_restrictions(N, K, points):&lt;br /&gt;
    if not(1 &amp;lt;= K &amp;lt; N &amp;lt;= 200000):&lt;br /&gt;
        return False&lt;br /&gt;
    for point in points:&lt;br /&gt;
        if not (-1000000.000 &amp;lt;= point &amp;lt;= 1000000.000):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;2din.txt&amp;quot;, &amp;quot;r&amp;quot;) as file_in, open(&amp;quot;2dout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        N, K = map(int, file_in.readline().split())&lt;br /&gt;
        points = [float(file_in.readline().split()[0]) for _ in range(N)]&lt;br /&gt;
&lt;br /&gt;
        if not check_restrictions(N, K, points):&lt;br /&gt;
            file_out.write(&amp;quot;Nu au fost respectate cerintele impuse\n&amp;quot;)&lt;br /&gt;
            return&lt;br /&gt;
&lt;br /&gt;
        result = find_min_segment_length(N, K, points)&lt;br /&gt;
        file_out.write(f&amp;quot;{result:.3f}\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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3366_-_Num%C4%83r_%C3%AEntreg_periodic&amp;diff=9114</id>
		<title>3366 - Număr întreg periodic</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3366_-_Num%C4%83r_%C3%AEntreg_periodic&amp;diff=9114"/>
		<updated>2024-01-06T13:19:45Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Alice&#039;&#039;&#039; a devenit interesată de numere întregi periodice.&lt;br /&gt;
Spunem că un număr întreg pozitiv &#039;&#039;&#039;X&#039;&#039;&#039; e periodic cu lungimea &#039;&#039;&#039;L&#039;&#039;&#039; dacă există un întreg pozitiv &#039;&#039;&#039;P&#039;&#039;&#039; cu &#039;&#039;&#039;L&#039;&#039;&#039; cifre astfel incat &#039;&#039;&#039;X&#039;&#039;&#039; poate fi scrie ca &#039;&#039;&#039;PPPP...P&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
De exemplu: Numărul &#039;&#039;&#039;X=123123123&#039;&#039;&#039; e periodic cu lungimile &#039;&#039;&#039;L=3&#039;&#039;&#039; (&#039;&#039;&#039;P=123&#039;&#039;&#039;) și &#039;&#039;&#039;L=9&#039;&#039;&#039; (&#039;&#039;&#039;P=123123123&#039;&#039;&#039;). Numărul &#039;&#039;&#039;X=42424242&#039;&#039;&#039; e periodic cu lungimile &#039;&#039;&#039;L=2&#039;&#039;&#039;, &#039;&#039;&#039;L=4&#039;&#039;&#039; și &#039;&#039;&#039;L=8&#039;&#039;&#039;. Numărul &#039;&#039;&#039;X=123445&#039;&#039;&#039; e periodic cu lungimea &#039;&#039;&#039;L=5&#039;&#039;&#039;.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Pentru o perioadă dată de lungime  &#039;&#039;&#039;L&#039;&#039;&#039; și un număr întreg pozitiv &#039;&#039;&#039;A&#039;&#039;&#039;, Alice vrea să găsească un număr &#039;&#039;&#039;X&#039;&#039;&#039; strict mai mare ca &#039;&#039;&#039;A&#039;&#039;&#039; astfel încât &#039;&#039;&#039;X&#039;&#039;&#039; sa fie periodic cu lungimea &#039;&#039;&#039;L&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;periodicin.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;L&#039;&#039;&#039; ce reprezintă lungimea perioadei. Pe a doua linie, numărul natural nenul &#039;&#039;&#039;A&#039;&#039;&#039; cu cel mult &#039;&#039;&#039;100000&#039;&#039;&#039; de cifre.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;periodicout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;S&#039;&#039;&#039;, reprezentând suma numerelor de pe a doua linie a fișierului de intrare.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; L &amp;amp;les; 100000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;periodicin.txt&#039;&#039;&#039;&lt;br /&gt;
:3&lt;br /&gt;
:123456&lt;br /&gt;
;&#039;&#039;&#039;periodicout.txt&#039;&#039;&#039;&lt;br /&gt;
:124124&lt;br /&gt;
:Datele corespund restrictiilor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;periodicin.txt&#039;&#039;&#039;&lt;br /&gt;
:3&lt;br /&gt;
:12345&lt;br /&gt;
;&#039;&#039;&#039;periodicout.txt&#039;&#039;&#039;&lt;br /&gt;
:100100&lt;br /&gt;
:Datele corespund restrictiilor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
;&#039;&#039;&#039;periodicin.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;periodicout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
33366 - Numar intreg periodic&lt;br /&gt;
def is_valid_input(L, A):&lt;br /&gt;
    return 1 &amp;lt;= L &amp;lt;= 100000 and 0 &amp;lt; A &amp;lt; 10**100000&lt;br /&gt;
&lt;br /&gt;
def find_periodic_number(L, A):&lt;br /&gt;
    period = &amp;quot;1&amp;quot; + &amp;quot;0&amp;quot; * (L - 1)&lt;br /&gt;
    X = int(period)&lt;br /&gt;
    while X &amp;lt;= A:&lt;br /&gt;
        X += int(period)&lt;br /&gt;
    return X&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;periodicin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file_in, open(&amp;quot;periodicout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        L = int(file_in.readline().strip())&lt;br /&gt;
        A = int(file_in.readline().strip())&lt;br /&gt;
&lt;br /&gt;
        if is_valid_input(L, A):&lt;br /&gt;
            result = find_periodic_number(L, A)&lt;br /&gt;
            file_out.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
            file_out.write(&amp;quot;Datele corespund restrictiilor\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            file_out.write(&amp;quot;Nu au fost respectate cerintele impuse\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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2424_-_Puncte3&amp;diff=9113</id>
		<title>2424 - Puncte3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2424_-_Puncte3&amp;diff=9113"/>
		<updated>2024-01-06T13:06:03Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Considerăm că toate punctele de coordonate întregi din plan sunt colorate în negru, cu excepţia a &#039;&#039;&#039;n&#039;&#039;&#039; puncte care sunt colorate în roşu. Două puncte roşii aflate pe aceeaşi linie orizontală sau pe aceeaşi linie verticală (adică puncte care au aceeaşi ordonată sau aceeaşi abscisă) pot fi unite printr-un segment. Colorăm în roşu toate punctele de coordonate întregi de pe acest segment. Repetăm operaţia cât timp se obţin puncte roşii noi.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Cunoscând coordonatele celor &#039;&#039;&#039;n&#039;&#039;&#039; puncte care erau iniţial roşii, aflaţi numărul maxim de puncte roşii care vor exista în final.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;puncte3in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;. Pe următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii sunt date coordonatele punctelor, separate printr-un singur spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;puncte3out.txt&#039;&#039;&#039; va conţine o singură linie pe care se află numărul maxim de puncte roşii existente în final.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;amp;les; n &amp;amp;les; 100000&#039;&#039;&#039;&lt;br /&gt;
*coordonatele sunt numere întregi din intervalul &#039;&#039;&#039;[0,1000]&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;puncte3in.txt&#039;&#039;&#039;&lt;br /&gt;
:4&lt;br /&gt;
:0 2&lt;br /&gt;
:3 1&lt;br /&gt;
:1 4&lt;br /&gt;
:4 4&lt;br /&gt;
;&#039;&#039;&#039;puncte3.out&#039;&#039;&#039;&lt;br /&gt;
:12&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;puncte3in.txt&#039;&#039;&#039;&lt;br /&gt;
:-3&lt;br /&gt;
:-1 -2 &lt;br /&gt;
;&#039;&#039;&#039;puncte3out.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2424 - Puncte3&lt;br /&gt;
def citeste_date_intrare(file_path):&lt;br /&gt;
    with open(file_path, &#039;r&#039;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
        puncte = [tuple(map(int, line.split())) for line in file.readlines()]&lt;br /&gt;
    return n, puncte&lt;br /&gt;
&lt;br /&gt;
def verifica_restricții(n, puncte):&lt;br /&gt;
    for x, y in puncte:&lt;br /&gt;
        if not (0 &amp;lt;= n &amp;lt;= 100000) or not (0 &amp;lt;= x &amp;lt;= 1000) or not (0 &amp;lt;= y &amp;lt;= 1000):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def numar_maxim_puncte_rosii(n, puncte):&lt;br /&gt;
    puncte_rosii = set(puncte)&lt;br /&gt;
&lt;br /&gt;
    for x1, y1 in puncte:&lt;br /&gt;
        for x2, y2 in puncte:&lt;br /&gt;
            if x1 != x2 and y1 != y2:&lt;br /&gt;
                puncte_rosii.add((x1, y2))&lt;br /&gt;
                puncte_rosii.add((x2, y1))&lt;br /&gt;
&lt;br /&gt;
    return len(puncte_rosii)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    file_input = &amp;quot;puncte3in.txt&amp;quot;&lt;br /&gt;
    file_output = &amp;quot;puncte3out.txt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    n, puncte = citeste_date_intrare(file_input)&lt;br /&gt;
&lt;br /&gt;
    if verifica_restricții(n, puncte):&lt;br /&gt;
        rezultat = numar_maxim_puncte_rosii(n, puncte)&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as file:&lt;br /&gt;
            file.write(str(rezultat))&lt;br /&gt;
    else:&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as file:&lt;br /&gt;
            file.write(&amp;quot;Nu au fost respectate cerintele impuse&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0604_-_Maria&amp;diff=9112</id>
		<title>0604 - Maria</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0604_-_Maria&amp;diff=9112"/>
		<updated>2024-01-06T13:03:13Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Maria dansează! Lecțiile de dans se desfășoară într-o sală imensă, împărțită în &#039;&#039;&#039;n*m&#039;&#039;&#039; sectoare pătratice cu dimensiunea &#039;&#039;&#039;1&#039;&#039;&#039;, dispuse pe &#039;&#039;&#039;n&#039;&#039;&#039; linii și &#039;&#039;&#039;m&#039;&#039;&#039; coloane. În anumite sectoare se află diverse obstacole, astfel că acele sectoare nu pot fi utilizate pentru dans. Maria are nevoie pentru dans de o zonă dreptunghiulară de dimensiuni &#039;&#039;&#039;p&#039;&#039;&#039;, &#039;&#039;&#039;q&#039;&#039;&#039;, cu laturile paralele cu pereții sălii, care să nu conțină obstacole și vrea ca în fiecare zi să danseze într-o zonă diferită de cele în care a dansat deja. Determinați numărul de zile în care Maria poate dansa așa cum își dorește.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;mariain.txt&#039;&#039;&#039; conține pe prima linie numerele &#039;&#039;&#039;n m p q&#039;&#039;&#039;. A doua linie conține numărul &#039;&#039;&#039;k&#039;&#039;&#039; de sectoare din sală în care se află obstacole. Fiecare dintre următoarele &#039;&#039;&#039;k&#039;&#039;&#039; linii conține două numere &#039;&#039;&#039;i j&#039;&#039;&#039;, reprezentând linia și coloana unui sector ce conține un obstacol.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;mariaout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;Z&#039;&#039;&#039; de zile în care Maria poate dansa în zone diferite.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n, m, p, q &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;amp;les; k &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; i &amp;amp;les; n, 1 &amp;amp;les; j &amp;amp;les; m&#039;&#039;&#039;&lt;br /&gt;
*două zone de dans sunt distincte dacă diferă prin cel puțin un sector&lt;br /&gt;
*zona de dans poate fi orientată astfel încât să ocupe &#039;&#039;&#039;p&#039;&#039;&#039; linii și &#039;&#039;&#039;q&#039;&#039;&#039; coloane sau &#039;&#039;&#039;q&#039;&#039;&#039; linii și &#039;&#039;&#039;p&#039;&#039;&#039; coloane&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;mariain.txt&#039;&#039;&#039;&lt;br /&gt;
:5 6 2 3&lt;br /&gt;
:3&lt;br /&gt;
:2 2&lt;br /&gt;
:3 5&lt;br /&gt;
:4 3&lt;br /&gt;
;&#039;&#039;&#039;mariaout.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;mariain.txt&#039;&#039;&#039;&lt;br /&gt;
:0 -1 -2 0&lt;br /&gt;
:-1&lt;br /&gt;
:-3 -4&lt;br /&gt;
;&#039;&#039;&#039;mariaout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0604 - Maria&lt;br /&gt;
def is_valid_input(n, m, p, q, obstacles):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= m &amp;lt;= 1000 and 1 &amp;lt;= p &amp;lt;= 1000 and 1 &amp;lt;= q &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not (0 &amp;lt;= len(obstacles) &amp;lt;= 1000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    for i, j in obstacles:&lt;br /&gt;
        if not (1 &amp;lt;= i &amp;lt;= n and 1 &amp;lt;= j &amp;lt;= m):&lt;br /&gt;
            return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def count_dance_days(n, m, p, q, obstacles):&lt;br /&gt;
    dance_days = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n - p + 2):&lt;br /&gt;
        for j in range(1, m - q + 2):&lt;br /&gt;
            valid_dance_zone = True&lt;br /&gt;
&lt;br /&gt;
            for k in range(p):&lt;br /&gt;
                for l in range(q):&lt;br /&gt;
                    if (i + k, j + l) in obstacles:&lt;br /&gt;
                        valid_dance_zone = False&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
                if not valid_dance_zone:&lt;br /&gt;
                    break&lt;br /&gt;
&lt;br /&gt;
            if valid_dance_zone:&lt;br /&gt;
                dance_days += 1&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n - q + 2):&lt;br /&gt;
        for j in range(1, m - p + 2):&lt;br /&gt;
            valid_dance_zone = True&lt;br /&gt;
&lt;br /&gt;
            for k in range(q):&lt;br /&gt;
                for l in range(p):&lt;br /&gt;
                    if (i + k, j + l) in obstacles:&lt;br /&gt;
                        valid_dance_zone = False&lt;br /&gt;
                        break&lt;br /&gt;
&lt;br /&gt;
                if not valid_dance_zone:&lt;br /&gt;
                    break&lt;br /&gt;
&lt;br /&gt;
            if valid_dance_zone:&lt;br /&gt;
                dance_days += 1&lt;br /&gt;
&lt;br /&gt;
    return dance_days&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&amp;quot;mariain.txt&amp;quot;, &amp;quot;r&amp;quot;) as infile:&lt;br /&gt;
            n, m, p, q = map(int, infile.readline().split())&lt;br /&gt;
            k = int(infile.readline())&lt;br /&gt;
            obstacles = [tuple(map(int, infile.readline().split())) for _ in range(k)]&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    if not is_valid_input(n, m, p, q, obstacles):&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    result = count_dance_days(n, m, p, q, obstacles)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;mariaout.txt&amp;quot;, &amp;quot;w&amp;quot;) as outfile:&lt;br /&gt;
        outfile.write(str(result))&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2016_-_Vuli&amp;diff=9111</id>
		<title>2016 - Vuli</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2016_-_Vuli&amp;diff=9111"/>
		<updated>2024-01-06T12:58:16Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunț ==&lt;br /&gt;
Vuli este un informatician foarte pasionat de triunghiuri și numere cu proprietăți interesante, aceste două pasiuni au dat naștere unui interes complet nou pentru el, triunghiurile de numere. În prezent, Vuli este interesat de triunghiul lui Pascal, mai exact, de numerele din triunghi de pe o anume linie &#039;&#039;&#039;k&#039;&#039;&#039; care sunt fabuloase (în concepția lui Vuli, un număr este fabulos dacă suma cifrelor numărului este un număr prim, sau este egală cu &#039;&#039;&#039;1&#039;&#039;&#039;). Triunghiul lui Pascal ce generează astfel: &#039;&#039;&#039;P[0][0] = 1, P[i][j] = P[i - 1][j] + P[i - 1][j - 1]&#039;&#039;&#039;. Vuli este perfect capabil să elaboreze singur un algoritm pentru a determina șirul de numere fabuloase de pe linia k, dar acum este prins cu probleme mai complicate, așa că vă roagă pe voi să-l ajutați.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se cere să se afișeze în ordine crescătoare toate numerele fabuloase de pe linia &#039;&#039;&#039;k&#039;&#039;&#039; a triunghiului.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Se citește din fișierul de intrare &#039;&#039;&#039;vuliin.txt&#039;&#039;&#039; un număr &#039;&#039;&#039;k&#039;&#039;&#039; ce reprezintă indicele liniei din triunghiului lui Pascal.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Se va afișa în fișierul &#039;&#039;&#039;vuliout.txt&#039;&#039;&#039;, pe prima linie, numerele fabuloase de pe linia &#039;&#039;&#039;k&#039;&#039;&#039; a triunghiului, în ordine crescătoare.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; k &amp;amp;les; 40&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;vuliin.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
;&#039;&#039;&#039;vuliout.txt&#039;&#039;&#039;&lt;br /&gt;
:1 5 10 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;vuliin.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;vuliout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2016 - Vuli&lt;br /&gt;
def is_prime(num):&lt;br /&gt;
    if num &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(num**0.5) + 1):&lt;br /&gt;
        if num % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def sum_of_digits(num):&lt;br /&gt;
    return sum(int(digit) for digit in str(num))&lt;br /&gt;
&lt;br /&gt;
def generate_fabulous_numbers(k):&lt;br /&gt;
    if k &amp;lt;= 0:&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
    triangle = [[1]]&lt;br /&gt;
    fabulous_numbers = set()&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, k + 1):&lt;br /&gt;
        row = [1]&lt;br /&gt;
        for j in range(1, i):&lt;br /&gt;
            row.append(triangle[i - 1][j] + triangle[i - 1][j - 1])&lt;br /&gt;
        row.append(1)&lt;br /&gt;
        triangle.append(row)&lt;br /&gt;
&lt;br /&gt;
    for num in triangle[k]:&lt;br /&gt;
        if is_prime(sum_of_digits(num)) or sum_of_digits(num) == 1:&lt;br /&gt;
            fabulous_numbers.add(num)&lt;br /&gt;
&lt;br /&gt;
    return sorted(fabulous_numbers)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;vuliin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file_in, open(&amp;quot;vuliout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        k = int(file_in.readline().strip())&lt;br /&gt;
        fabulous_numbers = generate_fabulous_numbers(k)&lt;br /&gt;
&lt;br /&gt;
        if fabulous_numbers:&lt;br /&gt;
            file_out.write(&amp;quot; &amp;quot;.join(map(str, fabulous_numbers)))&lt;br /&gt;
        else:&lt;br /&gt;
            file_out.write(&amp;quot;Nu au fost respectate cerintele impuse.&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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0855_-_Piramida_2&amp;diff=9110</id>
		<title>0855 - Piramida 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0855_-_Piramida_2&amp;diff=9110"/>
		<updated>2024-01-06T12:53:43Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Gigel a descoperit planul unei piramide magice. Planul este reprezentat sub forma unei matrice pătratice de dimensiune &#039;&#039;&#039;n&#039;&#039;&#039;, unde &#039;&#039;&#039;n&#039;&#039;&#039; este impar, în care elementele nule nu aparțin piramidei, iar elementele nenule reprezintă înălțimea piramidei în punctul respectiv.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Vezi exemplul pentru detalii!&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
Pentru &#039;&#039;&#039;n&#039;&#039;&#039; dat, construiți o matrice care să reprezinte planul unei piramide magice.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran elementele matricei construite, câte o linie a matricei pe o linie a ecranului, elementele de pe o linie fiind separate prin exact un spaţiu&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;3 &amp;amp;les; n &amp;amp;les; 101&#039;&#039;&#039;, impar&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:0 0 1 0 0&lt;br /&gt;
:0 1 2 1 0&lt;br /&gt;
:1 2 3 2 1&lt;br /&gt;
:0 1 2 1 0&lt;br /&gt;
:0 0 1 0 0 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 2&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0855 - Piramida 2&lt;br /&gt;
def is_valid_input(n):&lt;br /&gt;
    return 3 &amp;lt;= n &amp;lt;= 101 and n % 2 == 1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def build_pyramid_matrix(n):&lt;br /&gt;
    if not is_valid_input(n):&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    pyramid_matrix = [[0] * n for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(n):&lt;br /&gt;
            pyramid_matrix[i][j] = max(abs(n // 2 - i), abs(n // 2 - j))&lt;br /&gt;
&lt;br /&gt;
    return pyramid_matrix&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def print_matrix(matrix):&lt;br /&gt;
    for row in matrix:&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, row)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    pyramid_matrix = build_pyramid_matrix(n)&lt;br /&gt;
&lt;br /&gt;
    if pyramid_matrix:&lt;br /&gt;
        print_matrix(pyramid_matrix)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1894_-_Floarea&amp;diff=9109</id>
		<title>1894 - Floarea</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1894_-_Floarea&amp;diff=9109"/>
		<updated>2024-01-06T12:44:46Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
O floare abia plantată se notează cu &#039;&#039;&#039;0&#039;&#039;&#039;. În fiecare lună, aceasta crește cu un rând de petale, separate prin spațiu, notate cu cifra vârstei sale in acea lună.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Construiți și afișați o matrice ce reprezintă floarea dupa &#039;&#039;&#039;n&#039;&#039;&#039; luni.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran matricea construită, reprezentând floarea dupa &#039;&#039;&#039;n&#039;&#039;&#039; luni.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 9&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 3&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:3 3 3 3 3 3 3&lt;br /&gt;
:3 2 2 2 2 2 3&lt;br /&gt;
:3 2 1 1 1 2 3&lt;br /&gt;
:3 2 1 0 1 2 3&lt;br /&gt;
:3 2 1 1 1 2 3&lt;br /&gt;
:3 2 2 2 2 2 3&lt;br /&gt;
:3 3 3 3 3 3 3&lt;br /&gt;
== Explicație ==&lt;br /&gt;
:În &#039;&#039;&#039;3&#039;&#039;&#039; luni floarea crește cu &#039;&#039;&#039;3&#039;&#039;&#039; rânduri de petale.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 0&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1894 - Floarea&lt;br /&gt;
def generate_flower_matrix(n):&lt;br /&gt;
    size = n * 2 + 1&lt;br /&gt;
    flower_matrix = [[0] * size for _ in range(size)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(size):&lt;br /&gt;
        for j in range(size):&lt;br /&gt;
            distance_to_border = min(i, j, size - i - 1, size - j - 1)&lt;br /&gt;
            flower_matrix[i][j] = n - distance_to_border&lt;br /&gt;
&lt;br /&gt;
    return flower_matrix&lt;br /&gt;
&lt;br /&gt;
def print_matrix(matrix):&lt;br /&gt;
    for row in matrix:&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, row)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți n: &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    if 1 &amp;lt;= n &amp;lt;= 9:&lt;br /&gt;
        result_matrix = generate_flower_matrix(n)&lt;br /&gt;
        print_matrix(result_matrix)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0571_-_Sah&amp;diff=9108</id>
		<title>0571 - Sah</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0571_-_Sah&amp;diff=9108"/>
		<updated>2024-01-06T12:42:48Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
O tablă de șah generalizată de tip &#039;&#039;&#039;n m k&#039;&#039;&#039; este o matrice cu n linii (numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;) și &#039;&#039;&#039;m&#039;&#039;&#039; coloane (numerotate de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;m&#039;&#039;&#039;) cu elemente &#039;&#039;&#039;0&#039;&#039;&#039; și &#039;&#039;&#039;1&#039;&#039;&#039; grupate în pătrate alternante de dimensiune &#039;&#039;&#039;k&#039;&#039;&#039;, pătratul din care face parte elementul &#039;&#039;&#039;(1 1)&#039;&#039;&#039; fiind format din &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
Construiți o tablă de șah generalizată de tip &#039;&#039;&#039;n m k&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele &#039;&#039;&#039;n m k&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran matricea construită, câte o linie a matricei pe o linie a ecranului; elementele unei linii nu sunt separate prin spații sau alte caractere.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n, m &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; k &amp;amp;les; min(n,m)&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;k&#039;&#039;&#039; este divizor pentru &#039;&#039;&#039;n&#039;&#039;&#039; și pentru &#039;&#039;&#039;m&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:6 8 2&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:00110011&lt;br /&gt;
:00110011&lt;br /&gt;
:11001100&lt;br /&gt;
:11001100&lt;br /&gt;
:00110011&lt;br /&gt;
:00110011&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:1 0 -1&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Nu sunt respectate restrictiile&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0517 - Sah&lt;br /&gt;
def is_valid_input(n, m, k):&lt;br /&gt;
    return 1 &amp;lt;= n &amp;lt;= 1000 and 1 &amp;lt;= m &amp;lt;= 1000 and 1 &amp;lt;= k &amp;lt;= min(n, m) and n % k == 0 and m % k == 0&lt;br /&gt;
&lt;br /&gt;
def generate_chess_table(n, m, k):&lt;br /&gt;
    if not is_valid_input(n, m, k):&lt;br /&gt;
        print(&amp;quot;Nu sunt respectate restricțiile.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    chess_table = [[0] * m for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if (i // k) % 2 == (j // k) % 2:&lt;br /&gt;
                chess_table[i][j] = 0&lt;br /&gt;
            else:&lt;br /&gt;
                chess_table[i][j] = 1&lt;br /&gt;
&lt;br /&gt;
    for row in chess_table:&lt;br /&gt;
        print(&amp;quot;&amp;quot;.join(map(str, row)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n, m, k = map(int, input(&amp;quot;Introduceți n, m și k (separate prin spațiu): &amp;quot;).split())&lt;br /&gt;
    generate_chess_table(n, m, k)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3342_-_Patrat_Magic_2&amp;diff=9107</id>
		<title>3342 - Patrat Magic 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3342_-_Patrat_Magic_2&amp;diff=9107"/>
		<updated>2024-01-06T12:40:07Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Un &#039;&#039;&#039;Pătrat Magic&#039;&#039;&#039; este un pătrat ce conține toate numerele de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n^2&#039;&#039;&#039; în care sumele fiecăror linii, coloane și a celor două diagonale sunt egale. Această sumă se mai numește și &#039;&#039;constanta&#039;&#039; pătratului magic.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;, de forma &#039;&#039;&#039;n=4k&#039;&#039;&#039;. Să se genereze și să se afișeze un pătrat magic de latură &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul afișează pe ecran pătratul magic construit, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n&#039;&#039;&#039; va fi de forma &#039;&#039;&#039;4k+1&#039;&#039;&#039; sau &#039;&#039;&#039;4k+3&#039;&#039;&#039;, &#039;&#039;&#039;k&#039;&#039;&#039; număr natural&lt;br /&gt;
*orice rezultat corect va fi punctat&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:11 24 7 20 3 &lt;br /&gt;
:4 12 25 8 16 &lt;br /&gt;
:17 5 13 21 9 &lt;br /&gt;
:10 18 1 14 22 &lt;br /&gt;
:23 6 19 2 15 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3342 - PatratMagic2&lt;br /&gt;
def generate_magic_square(n):&lt;br /&gt;
    if n % 4 == 1:&lt;br /&gt;
        return generate_odd_magic_square(n)&lt;br /&gt;
    elif n % 4 == 3:&lt;br /&gt;
        return generate_odd_magic_square(n)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
        return None&lt;br /&gt;
&lt;br /&gt;
def generate_odd_magic_square(n):&lt;br /&gt;
    magic_square = [[0] * n for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    i, j = 0, n // 2&lt;br /&gt;
    current_num = 1&lt;br /&gt;
&lt;br /&gt;
    while current_num &amp;lt;= n * n:&lt;br /&gt;
        magic_square[i][j] = current_num&lt;br /&gt;
        current_num += 1&lt;br /&gt;
&lt;br /&gt;
        newi, newj = (i - 1) % n, (j + 1) % n&lt;br /&gt;
&lt;br /&gt;
        if magic_square[newi][newj] == 0:&lt;br /&gt;
            i, j = newi, newj&lt;br /&gt;
        else:&lt;br /&gt;
            i = (i + 1) % n&lt;br /&gt;
&lt;br /&gt;
    return magic_square&lt;br /&gt;
&lt;br /&gt;
def print_magic_square(magic_square):&lt;br /&gt;
    for row in magic_square:&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, row)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceți n (de forma 4k+1 sau 4k+3): &amp;quot;))&lt;br /&gt;
&lt;br /&gt;
    magic_square = generate_magic_square(n)&lt;br /&gt;
    if magic_square:&lt;br /&gt;
        print_magic_square(magic_square)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3128_-_Patrat_Magic_1&amp;diff=9106</id>
		<title>3128 - Patrat Magic 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3128_-_Patrat_Magic_1&amp;diff=9106"/>
		<updated>2024-01-06T12:25:26Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Un &#039;&#039;&#039;Pătrat Magic&#039;&#039;&#039; este un pătrat ce conține toate numerele de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n^2&#039;&#039;&#039; în care sumele fiecăror linii, coloane și a celor două diagonale sunt egale. Această sumă se mai numește și constanta pătratului magic.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;, de forma &#039;&#039;&#039;n=4k&#039;&#039;&#039;. Să se genereze și să se afișeze un &#039;&#039;&#039;pătrat magic&#039;&#039;&#039; de latură &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul afișează pe ecran pătratul magic construit, câte o linie a matricei pe câte o linie a ecranului, elementele fiecărei linii fiind separate prin câte un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n&#039;&#039;&#039; va fi de forma &#039;&#039;&#039;4k&#039;&#039;&#039;, &#039;&#039;&#039;k&#039;&#039;&#039; număr natural&lt;br /&gt;
*orice rezultat corect va fi punctat&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:4&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:1 15 14 4 &lt;br /&gt;
:12 6 7 9 &lt;br /&gt;
:8 10 11 5 &lt;br /&gt;
:13 3 2 16 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
:3&lt;br /&gt;
;&#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3128 - PatratMagic1&lt;br /&gt;
def is_valid_input(n):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100 and n % 4 == 0):&lt;br /&gt;
        return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def generate_magic_square(n):&lt;br /&gt;
    if not is_valid_input(n):&lt;br /&gt;
        return &amp;quot;Nu au fost respectate cerintele impuse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    magic_square = [[0] * n for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    i, j = 0, n // 2&lt;br /&gt;
    num = 1&lt;br /&gt;
&lt;br /&gt;
    while num &amp;lt;= n**2:&lt;br /&gt;
        magic_square[i][j] = num&lt;br /&gt;
        num += 1&lt;br /&gt;
        i -= 1&lt;br /&gt;
        j += 1&lt;br /&gt;
&lt;br /&gt;
        if i &amp;lt; 0 and j &amp;gt;= n:&lt;br /&gt;
            i += 2&lt;br /&gt;
            j -= 1&lt;br /&gt;
        elif i &amp;lt; 0:&lt;br /&gt;
            i = n - 1&lt;br /&gt;
        elif j &amp;gt;= n:&lt;br /&gt;
            j = 0&lt;br /&gt;
        elif magic_square[i][j] != 0:&lt;br /&gt;
            i += 2&lt;br /&gt;
            j -= 1&lt;br /&gt;
&lt;br /&gt;
    result = &amp;quot;&amp;quot;&lt;br /&gt;
    for row in magic_square:&lt;br /&gt;
        result += &amp;quot; &amp;quot;.join(map(str, row)) + &amp;quot;\n&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
try:&lt;br /&gt;
    n = int(input(&amp;quot;Introduceti n: &amp;quot;))&lt;br /&gt;
    result = generate_magic_square(n)&lt;br /&gt;
    print(result)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;Input invalid. Introduceti un numar natural.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1394_-_Devt&amp;diff=9105</id>
		<title>1394 - Devt</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1394_-_Devt&amp;diff=9105"/>
		<updated>2024-01-06T12:02:42Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Într-o zi, Gigel a găsit pe masa tatălui său o foaie A4 pe care era trecut șirul denumit “devt” sub forma &#039;&#039;&#039;1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25, ... , n&#039;&#039;&#039;. Dedesubtul acestui șir găsește un text alcătuit din &#039;&#039;&#039;k&#039;&#039;&#039; întrebări de forma &#039;&#039;&#039;a, b&#039;&#039;&#039; cu semnificația “Câte numere din acest șir se află în intervalul &#039;&#039;&#039;[a,b]&#039;&#039;&#039;?”.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Ajutați-l pe Gigel să răspundă corect la toate cele &#039;&#039;&#039;k&#039;&#039;&#039; întrebări.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;devtin.txt&#039;&#039;&#039; conține pe prima linie numerele naturale &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039;, iar pe următoarele &#039;&#039;&#039;k&#039;&#039;&#039; linii numerele &#039;&#039;&#039;a, b&#039;&#039;&#039; cu semnificația din enunț.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;devtout.txt&#039;&#039;&#039; va conține &#039;&#039;&#039;k&#039;&#039;&#039; linii, pe fiecare linie &#039;&#039;&#039;i&#039;&#039;&#039; aflându-se un număr natural, reprezentând răspunsul întrebării &#039;&#039;&#039;i&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;amp;les; a &amp;amp;les; b &amp;amp;les; n &amp;amp;les; 100000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; k &amp;amp;les; 5000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n&#039;&#039;&#039; aparține șirului devt&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;devtin.txt&#039;&#039;&#039;&lt;br /&gt;
:25 5&lt;br /&gt;
:3 7&lt;br /&gt;
:12 20&lt;br /&gt;
:3 4&lt;br /&gt;
:16 24&lt;br /&gt;
:12 24&lt;br /&gt;
;&#039;&#039;&#039;devtout.txt&#039;&#039;&#039;&lt;br /&gt;
:2&lt;br /&gt;
:6&lt;br /&gt;
:1&lt;br /&gt;
:6&lt;br /&gt;
:9 &lt;br /&gt;
== Explicație ==&lt;br /&gt;
:În intervalul &#039;&#039;&#039;[3,7]&#039;&#039;&#039; se află &#039;&#039;&#039;2&#039;&#039;&#039; numere din șir.&lt;br /&gt;
:În intervalul &#039;&#039;&#039;[12,20]&#039;&#039;&#039; se află &#039;&#039;&#039;6&#039;&#039;&#039; numere din șir.&lt;br /&gt;
:În intervalul &#039;&#039;&#039;[3,4]&#039;&#039;&#039; se află &#039;&#039;&#039;1&#039;&#039;&#039; număr din șir.&lt;br /&gt;
:În intervalul &#039;&#039;&#039;[16,24]&#039;&#039;&#039; se află &#039;&#039;&#039;6&#039;&#039;&#039; numere din șir.&lt;br /&gt;
:În intervalul &#039;&#039;&#039;[12,24]&#039;&#039;&#039; se află &#039;&#039;&#039;9&#039;&#039;&#039; numere din șir.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;devtin.txt&#039;&#039;&#039;&lt;br /&gt;
:0 2&lt;br /&gt;
:-1 2&lt;br /&gt;
:-4 -2&lt;br /&gt;
;&#039;&#039;&#039;devtout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1394 - Devt&lt;br /&gt;
def is_valid_input(n, k, intervals):&lt;br /&gt;
    if not (0 &amp;lt;= k &amp;lt;= 5000):&lt;br /&gt;
        return False&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100000):&lt;br /&gt;
        return False&lt;br /&gt;
    for a, b in intervals:&lt;br /&gt;
        if not (0 &amp;lt;= a &amp;lt;= b &amp;lt;= n):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def count_numbers_in_interval(a, b, sequence):&lt;br /&gt;
    count = 0&lt;br /&gt;
    for num in sequence:&lt;br /&gt;
        if a &amp;lt;= num &amp;lt;= b:&lt;br /&gt;
            count += 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;devtin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n, k = map(int, file.readline().split())&lt;br /&gt;
        intervals = [list(map(int, file.readline().split())) for _ in range(k)]&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if not is_valid_input(n, k, intervals):&lt;br /&gt;
        with open(&amp;quot;devtout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
            file_out.write(&amp;quot;Nu au fost respectate cerintele impuse&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Calculul răspunsurilor&lt;br /&gt;
    answers = []&lt;br /&gt;
    sequence = [1, 4, 6, 8, 9, 10, 12, 14, 15, 16, 18, 20, 21, 22, 24, 25]  # Acesta este șirul &amp;quot;devt&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    for interval in intervals:&lt;br /&gt;
        a, b = interval&lt;br /&gt;
        result = count_numbers_in_interval(a, b, sequence)&lt;br /&gt;
        answers.append(result)&lt;br /&gt;
&lt;br /&gt;
    # Scrierea rezultatelor în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;devtout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        for answer in answers:&lt;br /&gt;
            file.write(str(answer) + &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>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3502_-_Hard_Prime&amp;diff=9097</id>
		<title>3502 - Hard Prime</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3502_-_Hard_Prime&amp;diff=9097"/>
		<updated>2024-01-05T14:23:00Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Să se afișeze toate numerele prime distincte dintre acestea in ordine crescătoare.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;hardprimein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;hardprimeout.txt&#039;&#039;&#039; va conține pe prima linie toate numerele prime distincte citite, în ordine crescătoare, separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 30.000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;hardprimein.txt&#039;&#039;&#039;&lt;br /&gt;
:10&lt;br /&gt;
:3 2 32 47 3 0 2 40 7 1&lt;br /&gt;
;&#039;&#039;&#039;hardprimeout.txt&#039;&#039;&#039;&lt;br /&gt;
:2 3 7 47&lt;br /&gt;
== Explicație ==&lt;br /&gt;
&#039;&#039;&#039;2, 3, 7&#039;&#039;&#039; și &#039;&#039;&#039;47&#039;&#039;&#039; sunt singurele numere prime din fișierul de intrare.&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;hardprimein.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;hardprimeout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3502 - HardPrime&lt;br /&gt;
def check_restrictions(n, numbers):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 30000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if not all(0 &amp;lt;= num &amp;lt; 2000000000 for num in numbers):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def is_prime(num):&lt;br /&gt;
    if num &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(num**0.5) + 1):&lt;br /&gt;
        if num % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;hardprimein.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        numbers = list(map(int, file.readline().split()))&lt;br /&gt;
except FileNotFoundError:&lt;br /&gt;
    with open(&amp;quot;hardprimeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        file_out.write(&amp;quot;Nu au fost respectate cerintele impuse!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Verificare daca sunt respectate cerintele&lt;br /&gt;
if not check_restrictions(n, numbers):&lt;br /&gt;
    with open(&amp;quot;hardprimeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file_out:&lt;br /&gt;
        file_out.write(&amp;quot;Nu au fost respectate cerintele impuse!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Identificare și afișare numere prime distincte în ordine crescătoare&lt;br /&gt;
prime_numbers = sorted(set(num for num in numbers if is_prime(num)))&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;hardprimeout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(&amp;quot; &amp;quot;.join(map(str, prime_numbers)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2266_-_Calc_Mare&amp;diff=9096</id>
		<title>2266 - Calc Mare</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2266_-_Calc_Mare&amp;diff=9096"/>
		<updated>2024-01-05T14:16:28Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Un celebru (sperăm) rezolvitor de pe acest site își va lua un calculator nou dacă intră la liceul la care dorește să intre. Dar momentan rămâne pe calculatorul său rezolvând probleme. Una dintre ele era foarte simplă și constă în adunarea/scăderea a două numere naturale.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dau &#039;&#039;&#039;2&#039;&#039;&#039; numere naturale. Calculați suma / diferenţa lor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;calcmarein.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;a&#039;&#039;&#039;, pe a doua linie numărul &#039;&#039;&#039;b&#039;&#039;&#039;, iar pe a treia linie un semn &#039;&#039;&#039;+&#039;&#039;&#039; sau &#039;&#039;&#039;-&#039;&#039;&#039; care arată dacă numerele trebuie adunate / scăzute.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;calcmareout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;R&#039;&#039;&#039;, reprezentând rezultatul determinat.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les;&#039;&#039;&#039; nr. cifre număr &#039;&#039;&#039;&amp;amp;les; 2000&#039;&#039;&#039;.&lt;br /&gt;
*Pentru &#039;&#039;&#039;50%&#039;&#039;&#039; din punctaj semnul va fi &#039;&#039;&#039;+&#039;&#039;&#039; , iar pentru restul de &#039;&#039;&#039;50%&#039;&#039;&#039;, semnul &#039;&#039;&#039;-&#039;&#039;&#039;.&lt;br /&gt;
*Pentru &#039;&#039;&#039;20%&#039;&#039;&#039; din punctaj &#039;&#039;&#039;nr. cifre număr ≤ 15&#039;&#039;&#039;.&lt;br /&gt;
*Se garantează că &#039;&#039;&#039;a≥b&#039;&#039;&#039; pentru scăderi.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;calcmarein.txt&#039;&#039;&#039;&lt;br /&gt;
:123&lt;br /&gt;
:321&lt;br /&gt;
:+&lt;br /&gt;
;&#039;&#039;&#039;calcmareout.txt&#039;&#039;&#039;&lt;br /&gt;
:444&lt;br /&gt;
;Explicație&lt;br /&gt;
:În fișierul de intrare sunt &#039;&#039;&#039;2&#039;&#039;&#039; numere care trebuie adunate, iar suma lor este &#039;&#039;&#039;444&#039;&#039;&#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;calcmarein.out&#039;&#039;&#039;&lt;br /&gt;
:-2&lt;br /&gt;
:-1&lt;br /&gt;
:%&lt;br /&gt;
;&#039;&#039;&#039;calcmareout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2266 - CalcMare&lt;br /&gt;
def check_restrictions(a, b, operation):&lt;br /&gt;
    if not (1 &amp;lt;= len(str(a)) &amp;lt;= 2000 and 1 &amp;lt;= len(str(b)) &amp;lt;= 2000):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if operation not in (&#039;+&#039;, &#039;-&#039;):&lt;br /&gt;
        return False&lt;br /&gt;
&lt;br /&gt;
    if len(str(a)) &amp;lt;= 15 and len(str(b)) &amp;lt;= 15:&lt;br /&gt;
        return True&lt;br /&gt;
&lt;br /&gt;
    return True if operation == &#039;+&#039; else (a &amp;gt;= b)&lt;br /&gt;
&lt;br /&gt;
def perform_operation(a, b, operation):&lt;br /&gt;
    if operation == &#039;+&#039;:&lt;br /&gt;
        return a + b&lt;br /&gt;
    elif operation == &#039;-&#039;:&lt;br /&gt;
        return a - b&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;calcmarein.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        a = int(file.readline().strip())&lt;br /&gt;
        b = int(file.readline().strip())&lt;br /&gt;
        operation = file.readline().strip()&lt;br /&gt;
except FileNotFoundError:&lt;br /&gt;
    print(&amp;quot;Fisierul de intrare nu exista!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Verificare daca sunt respectate cerintele&lt;br /&gt;
if not check_restrictions(a, b, operation):&lt;br /&gt;
    print(&amp;quot;Nu au fost respectate cerintele impuse!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Efectuare operație&lt;br /&gt;
result = perform_operation(a, b, operation)&lt;br /&gt;
&lt;br /&gt;
# Scriere rezultat în fișierul de ieșire&lt;br /&gt;
with open(&amp;quot;calcmareout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3301_-_Nr_Div_9&amp;diff=9095</id>
		<title>3301 - Nr Div 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3301_-_Nr_Div_9&amp;diff=9095"/>
		<updated>2024-01-05T14:12:47Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;n&#039;&#039;&#039;. Să se scrie un program care determină și afișează pe ecran numărul de numere mai mici sau egale cu &#039;&#039;&#039;n&#039;&#039;&#039; care au exact &#039;&#039;&#039;9&#039;&#039;&#039; divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește din fișierul &#039;&#039;&#039;nrdiv9in.txt&#039;&#039;&#039; numărul &#039;&#039;&#039;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul scrie în fișierul &#039;&#039;&#039;nrdiv9out.txt&#039;&#039;&#039; numărul &#039;&#039;&#039;k&#039;&#039;&#039;, reprezentând numărul de numere mai mici sau egale cu &#039;&#039;&#039;n&#039;&#039;&#039; care au exact &#039;&#039;&#039;9&#039;&#039;&#039; divizori.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 1.000.000.000&#039;&#039;&#039;;&lt;br /&gt;
*dacă nu există numere mai mici sau egale cu &#039;&#039;&#039;n&#039;&#039;&#039; care au exact &#039;&#039;&#039;9&#039;&#039;&#039; divizori se va afișa valoarea &#039;&#039;&#039;0&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;nrdiv9in.txt&#039;&#039;&#039;&lt;br /&gt;
:100&lt;br /&gt;
;&#039;&#039;&#039;nrdiv9out.txt&#039;&#039;&#039;&lt;br /&gt;
:2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt &#039;&#039;&#039;2&#039;&#039;&#039; numere mai mici sau egale cu &#039;&#039;&#039;100&#039;&#039;&#039; care au exact &#039;&#039;&#039;9&#039;&#039;&#039; divizori: &#039;&#039;&#039;36&#039;&#039;&#039; și &#039;&#039;&#039;100&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;nrdiv9in.txt&#039;&#039;&#039;&lt;br /&gt;
:1000&lt;br /&gt;
;&#039;&#039;&#039;nrdiv9out.txt&#039;&#039;&#039;&lt;br /&gt;
:8&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt &#039;&#039;&#039;8&#039;&#039;&#039; numere mai mici sau egale cu &#039;&#039;&#039;1000&#039;&#039;&#039; care au exact &#039;&#039;&#039;9&#039;&#039;&#039; divizori: &#039;&#039;&#039;36, 100, 196, 225, 256, 441, 484, 676&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
;&#039;&#039;&#039;nrdiv9in.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;nrdiv9out.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3301 - NrDiv9&lt;br /&gt;
def count_divisors(num):&lt;br /&gt;
    divisors = 0&lt;br /&gt;
    sqrt_num = int(num**0.5)&lt;br /&gt;
    for i in range(1, sqrt_num + 1):&lt;br /&gt;
        if num % i == 0:&lt;br /&gt;
            divisors += 2  # i și num // i sunt divizori&lt;br /&gt;
            if i == num // i:&lt;br /&gt;
                divisors -= 1  # în cazul pătratelor perfecte, numărăm un divizor o singură dată&lt;br /&gt;
    return divisors&lt;br /&gt;
&lt;br /&gt;
def count_numbers_with_9_divisors(n):&lt;br /&gt;
    count = 0&lt;br /&gt;
    for num in range(1, n + 1):&lt;br /&gt;
        if count_divisors(num) == 9:&lt;br /&gt;
            count += 1&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&#039;nrdiv9in.txt&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
    # Calculul și scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
    count = count_numbers_with_9_divisors(n)&lt;br /&gt;
    with open(&#039;nrdiv9out.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
        if count:&lt;br /&gt;
            g.write(str(count) + &#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            g.write(&amp;quot;Nu au fost respectate cerintele impuse&amp;quot;)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(&amp;quot;A apărut o eroare:&amp;quot;, str(e))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3301_-_Nr_Div_9&amp;diff=9091</id>
		<title>3301 - Nr Div 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3301_-_Nr_Div_9&amp;diff=9091"/>
		<updated>2024-01-05T13:47:50Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural n. Să se scrie un program care determină și afișează pe ecran numărul de numere mai mici sau egale cu n care au exact 9 divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește din fișierul nrdiv9in.txt numărul n.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul scrie în fișierul nrdiv9out.txt numărul k, reprezentând numărul de numere mai mici sau egale cu n care au exact 9 divizori.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 1.000.000.000;&lt;br /&gt;
*dacă nu există numere mai mici sau egale cu n care au exact 9 divizori se va afișa valoarea 0.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;nrdiv9in.txt&lt;br /&gt;
:100&lt;br /&gt;
;nrdiv9out.txt&lt;br /&gt;
:2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;nrdiv9in.txt&lt;br /&gt;
:1000&lt;br /&gt;
;nrdiv9out.txt&lt;br /&gt;
:8&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt 8 numere mai mici sau egale cu 1000 care au exact 9 divizori: 36, 100, 196, 225, 256, 441, 484, 676.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
;nrdiv9in.txt&lt;br /&gt;
:0&lt;br /&gt;
;nrdiv9out.txt&lt;br /&gt;
:0&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3301 - NrDiv9&lt;br /&gt;
def count_numbers_with_9_divisors(n):&lt;br /&gt;
    def count_divisors(num):&lt;br /&gt;
        divisors = 0&lt;br /&gt;
        sqrt_num = int(num**0.5)&lt;br /&gt;
        for i in range(1, sqrt_num + 1):&lt;br /&gt;
            if num % i == 0:&lt;br /&gt;
                divisors += 2  # i și num // i sunt divizori&lt;br /&gt;
                if i == num // i:&lt;br /&gt;
                    divisors -= 1  # în cazul pătratelor perfecte, numărăm un divizor o singură dată&lt;br /&gt;
&lt;br /&gt;
        return divisors&lt;br /&gt;
&lt;br /&gt;
    count = 0&lt;br /&gt;
    for num in range(1, n + 1):&lt;br /&gt;
        if count_divisors(num) == 9:&lt;br /&gt;
            count += 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;nrdiv9in.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
except FileNotFoundError:&lt;br /&gt;
    print(&amp;quot;Fisierul de intrare nu exista!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Calcul și scriere rezultat în fișierul de ieșire&lt;br /&gt;
result = count_numbers_with_9_divisors(n)&lt;br /&gt;
with open(&amp;quot;nrdiv9out.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3301_-_Nr_Div_9&amp;diff=9090</id>
		<title>3301 - Nr Div 9</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3301_-_Nr_Div_9&amp;diff=9090"/>
		<updated>2024-01-05T13:47:33Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural n. Să se scrie un program care determină și afișează pe ecran numărul de numere mai mici sau egale cu n care au exact 9 divizori.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește din fișierul nrdiv9in.txt numărul n.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul scrie în fișierul nrdiv9out.txt numărul k, reprezentând numărul de numere mai mici sau egale cu n care au exact 9 divizori.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;amp;les; n &amp;amp;les; 1.000.000.000;&lt;br /&gt;
*dacă nu există numere mai mici sau egale cu n care au exact 9 divizori se va afișa valoarea 0.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;nrdiv9in.txt&lt;br /&gt;
:100&lt;br /&gt;
;nrdiv9out.txt&lt;br /&gt;
:2&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicație ==&lt;br /&gt;
Sunt 2 numere mai mici sau egale cu 100 care au exact 9 divizori: 36 și 100.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;nrdiv9in.txt&lt;br /&gt;
:1000&lt;br /&gt;
;nrdiv9out.txt&lt;br /&gt;
:8&lt;br /&gt;
;Explicație&lt;br /&gt;
:Sunt 8 numere mai mici sau egale cu 1000 care au exact 9 divizori: 36, 100, 196, 225, 256, 441, 484, 676.&lt;br /&gt;
== Exemplu 3 ==&lt;br /&gt;
;nrdiv9in.txt&lt;br /&gt;
:0&lt;br /&gt;
;nrdiv9out.txt&lt;br /&gt;
:0&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3301 - NrDiv9&lt;br /&gt;
def count_numbers_with_9_divisors(n):&lt;br /&gt;
    def count_divisors(num):&lt;br /&gt;
        divisors = 0&lt;br /&gt;
        sqrt_num = int(num**0.5)&lt;br /&gt;
        for i in range(1, sqrt_num + 1):&lt;br /&gt;
            if num % i == 0:&lt;br /&gt;
                divisors += 2  # i și num // i sunt divizori&lt;br /&gt;
                if i == num // i:&lt;br /&gt;
                    divisors -= 1  # în cazul pătratelor perfecte, numărăm un divizor o singură dată&lt;br /&gt;
&lt;br /&gt;
        return divisors&lt;br /&gt;
&lt;br /&gt;
    count = 0&lt;br /&gt;
    for num in range(1, n + 1):&lt;br /&gt;
        if count_divisors(num) == 9:&lt;br /&gt;
            count += 1&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
# Citire date de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&amp;quot;nrdiv9in.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n = int(file.readline())&lt;br /&gt;
except FileNotFoundError:&lt;br /&gt;
    print(&amp;quot;Fisierul de intrare nu exista!&amp;quot;)&lt;br /&gt;
    exit()&lt;br /&gt;
&lt;br /&gt;
# Calcul și scriere rezultat în fișierul de ieșire&lt;br /&gt;
result = count_numbers_with_9_divisors(n)&lt;br /&gt;
with open(&amp;quot;nrdiv9out.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
    file.write(str(result) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3738_-_New_York&amp;diff=9089</id>
		<title>3738 - New York</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3738_-_New_York&amp;diff=9089"/>
		<updated>2024-01-05T13:46:09Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Doru s-a mutat în New York și își caută o nouă locuință specială în perimetrul străzilor numerotate cu numerele distincte de la &#039;&#039;&#039;1&#039;&#039;&#039; la &#039;&#039;&#039;n&#039;&#039;&#039;. Fiind pasionat de matematică, el vrea să se mute pe strada în care cel mai mare divizor comun (cmmdc) al înălțimilor clădirilor este maxim.&lt;br /&gt;
&lt;br /&gt;
În plus, alegerea clădirii nu este una ușoară, el dorind să se mute doar într-o clădire perfectă. Numim o clădire perfectă o clădire care are cea mai mare înălțime număr prim de pe strada pe care se află.&lt;br /&gt;
&lt;br /&gt;
Fiind ocupat cu împachetatul, Doru vă roagă pe voi să găsiți clădirea perfectă.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;nykin.txt&#039;&#039;&#039; conține pe prima linie numărul de străzi &#039;&#039;&#039;n&#039;&#039;&#039; pe care Doru își caută noua locuință.&lt;br /&gt;
Pe fiecare dintre următoarele &#039;&#039;&#039;n&#039;&#039;&#039; linii (câte una pentru fiecare stradă din cele &#039;&#039;&#039;n&#039;&#039;&#039;, în ordinea crescătoare a numerelor străzilor) se află numărul &#039;&#039;&#039;m&#039;&#039;&#039;, reprezentând numărul de clădiri de pe strada curentă, urmat de &#039;&#039;&#039;m&#039;&#039;&#039; numere ce reprezintă înălțimile clădirilor de pe strada curentă (în ordinea poziționării lor pe stradă, de la stânga la dreapta). Pe fiecare linie numerele sunt separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;nykout.txt&#039;&#039;&#039; va conține două linii.&lt;br /&gt;
&lt;br /&gt;
Prima linie va conține două numere naturale separate printr-un spațiu, reprezentând numărul străzii cerute și poziția pe stradă a clădirii în care se va muta Doru.&lt;br /&gt;
&lt;br /&gt;
A doua linie va conține un număr natural reprezentând înălțimea clădirii alese.&lt;br /&gt;
&lt;br /&gt;
Dacă pe strada cu cmmdc-ul maxim nu se găsește nicio clădire cu înălțimea un număr prim, atunci prima linie a fișierului va conține mesajul &#039;&#039;&#039;Nu am gasit casa!&#039;&#039;&#039;&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; m &amp;amp;les; 1000&#039;&#039;&#039;&lt;br /&gt;
*Numerele de pe a doua linie a fișierului de intrare sunt mai mici decât &#039;&#039;&#039;1 000 000 000&#039;&#039;&#039;&lt;br /&gt;
*Înălțimile clădirilor sunt numere naturale nenule mai mici ca &#039;&#039;&#039;2 000 000 000&#039;&#039;&#039;.&lt;br /&gt;
*Pe fiecare stradă există cel puțin o clădire.&lt;br /&gt;
*Dacă pe strada cu cmmdc-ul maxim sunt mai multe clădiri perfecte, se va afișa cea mai din dreapta.&lt;br /&gt;
*Dacă sunt mai multe străzi cu aceeași clădire perfectă, se va afișa cea care are numărul străzii cel mai mare.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;nykin.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
:2 1 2&lt;br /&gt;
:3 18 6 48&lt;br /&gt;
:2 5 7&lt;br /&gt;
:4 3 6 9 12&lt;br /&gt;
:4 34 17 68 17&lt;br /&gt;
;&#039;&#039;&#039;nykout.txt&#039;&#039;&#039;&lt;br /&gt;
:5 4&lt;br /&gt;
:17&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Valoarea maximă a celui mai mare divizor comun al înălțimilor clădirilor de pe o stradă dintre cele cinci este &#039;&#039;&#039;17&#039;&#039;&#039; (&#039;&#039;&#039;cmmdc(1,2)=1, cmmdc(18, 6, 48)=6, cmmdc(5, 7)=1, cmmdc(3, 6, 9, 12)=3, cmmdc(34, 17, 68, 17)=17&#039;&#039;&#039;). Astfel Doru va alege clădirea a &#039;&#039;&#039;4&#039;&#039;&#039;-a de pe strada cu numărul &#039;&#039;&#039;5&#039;&#039;&#039;.&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;nykin.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
:-1 -3&lt;br /&gt;
;&#039;&#039;&#039;nykut.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu am gasit casa!&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3738 - New York&lt;br /&gt;
def cmmdc_lista(lista):&lt;br /&gt;
    def cmmdc(a, b):&lt;br /&gt;
        while b:&lt;br /&gt;
            a, b = b, a % b&lt;br /&gt;
        return a&lt;br /&gt;
&lt;br /&gt;
    result = lista[0]&lt;br /&gt;
    for elem in lista[1:]:&lt;br /&gt;
        result = cmmdc(result, elem)&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def este_prim(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar**0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def gaseste_cladire_perfecta(strazi):&lt;br /&gt;
    cmmdc_maxim = 0&lt;br /&gt;
    strada_aleasa = 0&lt;br /&gt;
    cladire_aleasa = 0&lt;br /&gt;
&lt;br /&gt;
    for i, strada in enumerate(strazi, start=1):&lt;br /&gt;
        inaltimi = strada[1:]&lt;br /&gt;
        cmmdc_strada = cmmdc_lista(inaltimi)&lt;br /&gt;
&lt;br /&gt;
        if cmmdc_strada &amp;gt; cmmdc_maxim:&lt;br /&gt;
            cmmdc_maxim = cmmdc_strada&lt;br /&gt;
            strada_aleasa = i&lt;br /&gt;
&lt;br /&gt;
            for j, inaltime in enumerate(reversed(inaltimi), start=1):&lt;br /&gt;
                if este_prim(inaltime):&lt;br /&gt;
                    cladire_aleasa = len(inaltimi) - j + 1&lt;br /&gt;
                    break&lt;br /&gt;
&lt;br /&gt;
    return strada_aleasa, cladire_aleasa&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&#039;nykin.txt&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
        strazi = [list(map(int, f.readline().split())) for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    # Calculul și scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
    rezultat = gaseste_cladire_perfecta(strazi)&lt;br /&gt;
    with open(&#039;nykout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
        if rezultat[0] == 0:&lt;br /&gt;
            g.write(&amp;quot;Nu am gasit casa!&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            g.write(f&amp;quot;{rezultat[0]} {rezultat[1]}\n{strazi[rezultat[0] - 1][rezultat[1]]}&amp;quot;)&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(&amp;quot;A aparut o eroare:&amp;quot;, str(e))&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2252_-_Profu&amp;diff=9087</id>
		<title>2252 - Profu</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2252_-_Profu&amp;diff=9087"/>
		<updated>2024-01-05T13:15:23Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Alex este un copil destul de bun la informatica însă are un defect: Poate fi foarte enervant(prin enervant se înțelege ca își stresează profesorii cu mesaje pe Messenger). Profesorul de informatica s-a săturat de această situație așa ca i-a spus lui Alex ca dacă nu rezolvă următoarea problema îl va bloca pe Messenger. Alex nu vrea sa se întâmple acest lucru deoarece așa e conștient ca nu va mai avea pe cine stresa. Problema sună așa:&lt;br /&gt;
&lt;br /&gt;
Avem &#039;&#039;&#039;n&#039;&#039;&#039; cutii așezate într-o stivă astfel încât avem acces doar la prima cutie.Pentru fiecare cutie sa știe un număr &#039;&#039;&#039;A[i]&#039;&#039;&#039; reprezentând volumul cutiei &#039;&#039;&#039;i = 1,2...,n&#039;&#039;&#039;. Aceste cutii trebuie transportate din localitatea A în localitatea B știind ca se pot efectua maxim &#039;&#039;&#039;k&#039;&#039;&#039; transporturi (în cazul în care s-ar efectua mai multe mașina ar rămâne fără combustibil) și de asemenea fiind o mașina închiriată trebuie sa aibă capacitatea minimă &#039;&#039;&#039;x&#039;&#039;&#039; necesară pentru a efectua cele &#039;&#039;&#039;k&#039;&#039;&#039; transporturi. Numărul &#039;&#039;&#039;x&#039;&#039;&#039; este cel ce îi dă bătăi de cap lui Alex așa ca el vă roagă să îl ajutați!&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;profuin.txt&#039;&#039;&#039; se vor găsi cele doua numere &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039; cu semnificația din enunț apoi pe a doua linie a fișierului se vor găsi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;profuout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;x&#039;&#039;&#039;, reprezentând capacitatea minima a mașini ce trebuie închiriată.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 500.000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;profuin.txt&#039;&#039;&#039;&lt;br /&gt;
:6 3&lt;br /&gt;
:7 3 2 3 1 4&lt;br /&gt;
; &#039;&#039;&#039;profuout.txt&#039;&#039;&#039;&lt;br /&gt;
:8&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
La primul transport este încărcată prima saltea (care are volumul &#039;&#039;&#039;7&#039;&#039;&#039;). La cel de-al doilea transport sunt încărcate saltele &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;3&#039;&#039;&#039; (volumul total este &#039;&#039;&#039;3 + 2 = 5&#039;&#039;&#039;). La cel de-al treilea transport sunt încărcate saltele &#039;&#039;&#039;4&#039;&#039;&#039;, &#039;&#039;&#039;5&#039;&#039;&#039; și &#039;&#039;&#039;6&#039;&#039;&#039; (volumul total este &#039;&#039;&#039;3 + 1 + 4 = 8&#039;&#039;&#039; fiind cel mai mic rezultat posibil)&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;profuin.txt&#039;&#039;&#039;&lt;br /&gt;
: 0&lt;br /&gt;
: 0&lt;br /&gt;
; &#039;&#039;&#039;profuout.txt&#039;&#039;&#039;&lt;br /&gt;
: DNumarul nu respecta restrictiile.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2252 - Profu&lt;br /&gt;
def capacitate_minima(n, k, volumes):&lt;br /&gt;
    left, right = max(volumes), sum(volumes)&lt;br /&gt;
&lt;br /&gt;
    while left &amp;lt; right:&lt;br /&gt;
        mid = (left + right) // 2&lt;br /&gt;
        transports, current_sum = 0, 0&lt;br /&gt;
&lt;br /&gt;
        for volume in volumes:&lt;br /&gt;
            if current_sum + volume &amp;gt; mid:&lt;br /&gt;
                transports += 1&lt;br /&gt;
                current_sum = 0&lt;br /&gt;
&lt;br /&gt;
            current_sum += volume&lt;br /&gt;
&lt;br /&gt;
        transports += 1  # pentru ultimul transport&lt;br /&gt;
        if transports &amp;gt; k:&lt;br /&gt;
            left = mid + 1&lt;br /&gt;
        else:&lt;br /&gt;
            right = mid&lt;br /&gt;
&lt;br /&gt;
    return left&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&#039;profuin.txt&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n, k = map(int, f.readline().split())&lt;br /&gt;
        volumes = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Calculul capacitatii minime si scrierea rezultatului in fisierul de iesire&lt;br /&gt;
    result = capacitate_minima(n, k, volumes)&lt;br /&gt;
    with open(&#039;profuout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
        g.write(str(result))&lt;br /&gt;
except Exception as e:&lt;br /&gt;
        # În caz de eroare, afișăm un mesaj corespunzător&lt;br /&gt;
        with open(&#039;profuout.txt&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039;Numarul nu respecta restrictiile.&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2252_-_Profu&amp;diff=9086</id>
		<title>2252 - Profu</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2252_-_Profu&amp;diff=9086"/>
		<updated>2024-01-05T13:14:38Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Alex este un copil destul de bun la informatica însă are un defect: Poate fi foarte enervant(prin enervant se înțelege ca își stresează profesorii cu mesaje pe Messenger). Profesorul de informatica s-a săturat de această situație așa ca i-a spus lui Alex ca dacă nu rezolvă următoarea problema îl va bloca pe Messenger. Alex nu vrea sa se întâmple acest lucru deoarece așa e conștient ca nu va mai avea pe cine stresa. Problema sună așa:&lt;br /&gt;
&lt;br /&gt;
Avem &#039;&#039;&#039;n&#039;&#039;&#039; cutii așezate într-o stivă astfel încât avem acces doar la prima cutie.Pentru fiecare cutie sa știe un număr &#039;&#039;&#039;A[i]&#039;&#039;&#039; reprezentând volumul cutiei &#039;&#039;&#039;i = 1,2...,n&#039;&#039;&#039;. Aceste cutii trebuie transportate din localitatea A în localitatea B știind ca se pot efectua maxim &#039;&#039;&#039;k&#039;&#039;&#039; transporturi (în cazul în care s-ar efectua mai multe mașina ar rămâne fără combustibil) și de asemenea fiind o mașina închiriată trebuie sa aibă capacitatea minimă &#039;&#039;&#039;x&#039;&#039;&#039; necesară pentru a efectua cele &#039;&#039;&#039;k&#039;&#039;&#039; transporturi. Numărul &#039;&#039;&#039;x&#039;&#039;&#039; este cel ce îi dă bătăi de cap lui Alex așa ca el vă roagă să îl ajutați!&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului &#039;&#039;&#039;profuin.txt&#039;&#039;&#039; se vor găsi cele doua numere &#039;&#039;&#039;n&#039;&#039;&#039; și &#039;&#039;&#039;k&#039;&#039;&#039; cu semnificația din enunț apoi pe a doua linie a fișierului se vor găsi &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;profuout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;x&#039;&#039;&#039;, reprezentând capacitatea minima a mașini ce trebuie închiriată.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 500.000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;profuin.txt&#039;&#039;&#039;&lt;br /&gt;
:6 3&lt;br /&gt;
:7 3 2 3 1 4&lt;br /&gt;
; &#039;&#039;&#039;profuout.txt&#039;&#039;&#039;&lt;br /&gt;
:8&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
La primul transport este încărcată prima saltea (care are volumul &#039;&#039;&#039;7&#039;&#039;&#039;). La cel de-al doilea transport sunt încărcate saltele &#039;&#039;&#039;2&#039;&#039;&#039; și &#039;&#039;&#039;3&#039;&#039;&#039; (volumul total este &#039;&#039;&#039;3 + 2 = 5&#039;&#039;&#039;). La cel de-al treilea transport sunt încărcate saltele &#039;&#039;&#039;4&#039;&#039;&#039;, &#039;&#039;&#039;5&#039;&#039;&#039; și &#039;&#039;&#039;6&#039;&#039;&#039; (volumul total este &#039;&#039;&#039;3 + 1 + 4 = 8&#039;&#039;&#039; fiind cel mai mic rezultat posibil)&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;profuin.txt&#039;&#039;&#039;&lt;br /&gt;
: 0&lt;br /&gt;
: 0&lt;br /&gt;
; &#039;&#039;&#039;profuout.txt&#039;&#039;&#039;&lt;br /&gt;
: Datele nu corespund restrictiilor&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2252 - Profu&lt;br /&gt;
def capacitate_minima(n, k, volumes):&lt;br /&gt;
    left, right = max(volumes), sum(volumes)&lt;br /&gt;
&lt;br /&gt;
    while left &amp;lt; right:&lt;br /&gt;
        mid = (left + right) // 2&lt;br /&gt;
        transports, current_sum = 0, 0&lt;br /&gt;
&lt;br /&gt;
        for volume in volumes:&lt;br /&gt;
            if current_sum + volume &amp;gt; mid:&lt;br /&gt;
                transports += 1&lt;br /&gt;
                current_sum = 0&lt;br /&gt;
&lt;br /&gt;
            current_sum += volume&lt;br /&gt;
&lt;br /&gt;
        transports += 1  # pentru ultimul transport&lt;br /&gt;
        if transports &amp;gt; k:&lt;br /&gt;
            left = mid + 1&lt;br /&gt;
        else:&lt;br /&gt;
            right = mid&lt;br /&gt;
&lt;br /&gt;
    return left&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&#039;profuin.txt&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n, k = map(int, f.readline().split())&lt;br /&gt;
        volumes = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
    # Calculul capacitatii minime si scrierea rezultatului in fisierul de iesire&lt;br /&gt;
    result = capacitate_minima(n, k, volumes)&lt;br /&gt;
    with open(&#039;profuout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
        g.write(str(result))&lt;br /&gt;
except Exception as e:&lt;br /&gt;
        # În caz de eroare, afișăm un mesaj corespunzător&lt;br /&gt;
        with open(&#039;profuout.txt&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039;Numarul nu respecta restrictiile.&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4025_-_Doua_Mii_22&amp;diff=9084</id>
		<title>4025 - Doua Mii 22</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4025_-_Doua_Mii_22&amp;diff=9084"/>
		<updated>2024-01-05T12:56:11Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau &#039;&#039;&#039;K&#039;&#039;&#039; numere naturale nenule, mai mici sau egale cu &#039;&#039;&#039;20222022&#039;&#039;&#039;. Pentru fiecare număr n dintre acestea, se cere aflarea celui de-al &#039;&#039;&#039;n&#039;&#039;&#039;-lea număr natural prim cu &#039;&#039;&#039;2022&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul &#039;&#039;&#039;K&#039;&#039;&#039;, iar apoi &#039;&#039;&#039;K&#039;&#039;&#039; numere naturale, separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran, pentru fiecare număr &#039;&#039;&#039;n&#039;&#039;&#039; dintre cele &#039;&#039;&#039;K&#039;&#039;&#039; numere date, al &#039;&#039;&#039;n&#039;&#039;&#039;-lea număr natural, prim cu &#039;&#039;&#039;2022&#039;&#039;&#039;.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; K &amp;amp;les; 2022&#039;&#039;&#039;&lt;br /&gt;
*cele &#039;&#039;&#039;K&#039;&#039;&#039; numere citite vor fi mai mici sau egale cu &#039;&#039;&#039;20222022&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 3&lt;br /&gt;
: 4 23 198&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
: 11 67 595 &lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Şirul numerelor naturale, prime cu &#039;&#039;&#039;2022&#039;&#039;&#039;, este format din numerele: &#039;&#039;&#039;1, 5, 7, 11, 13, 17, 19, 23, 25, 29, 31, ....&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;Intrare&#039;&#039;&#039;&lt;br /&gt;
: 0&lt;br /&gt;
; &#039;&#039;&#039;Ieșire&#039;&#039;&#039;&lt;br /&gt;
: Datele introduse nu respecta restrictiile.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#4025 - DouaMii22&lt;br /&gt;
def este_prim_cu_2022(numar):&lt;br /&gt;
    if numar &amp;lt; 2:&lt;br /&gt;
        return False&lt;br /&gt;
    for i in range(2, int(numar**0.5) + 1):&lt;br /&gt;
        if numar % i == 0:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def afla_n_prim_cu_2022(n):&lt;br /&gt;
    numar = 1&lt;br /&gt;
    numere_prim_cu_2022 = []&lt;br /&gt;
    while len(numere_prim_cu_2022) &amp;lt; n:&lt;br /&gt;
        if este_prim_cu_2022(numar):&lt;br /&gt;
            numere_prim_cu_2022.append(numar)&lt;br /&gt;
        numar += 1&lt;br /&gt;
    return numere_prim_cu_2022[-1]&lt;br /&gt;
&lt;br /&gt;
try:&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    k = int(input(&amp;quot;Introduceti numarul K: &amp;quot;))&lt;br /&gt;
    if 1 &amp;lt;= k &amp;lt;= 2022:&lt;br /&gt;
        numere = list(map(int, input(f&amp;quot;Introduceti cele {k} numere, separate prin spatiu: &amp;quot;).split()))&lt;br /&gt;
&lt;br /&gt;
        # Verificarea și afișarea rezultatelor&lt;br /&gt;
        for n in numere:&lt;br /&gt;
            if 1 &amp;lt;= n &amp;lt;= 20222022:&lt;br /&gt;
                rezultat = afla_n_prim_cu_2022(n)&lt;br /&gt;
                print(f&amp;quot;Pentru n={n}, al {n}-lea numar prim cu 2022 este: {rezultat}&amp;quot;)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Datele introduse nu respecta restrictiile.&amp;quot;)&lt;br /&gt;
                break&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Datele introduse nu respecta restrictiile.&amp;quot;)&lt;br /&gt;
except ValueError:&lt;br /&gt;
    print(&amp;quot;Datele introduse nu sunt valide.&amp;quot;)&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3367_-_Croseta&amp;diff=9082</id>
		<title>3367 - Croseta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3367_-_Croseta&amp;diff=9082"/>
		<updated>2024-01-05T12:29:23Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Enunt */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Ionel este un băieţel pasionat de matematică, dar tare năzdrăvan. Într-o zi a dat cu o piatră şi a spart un geam de la casa bunicii. Ştiind pasiunea băiatului, bunica i-a spus: ”Te voi ierta dacă îmi dai răspunsul corect la următoarea problemă: Când erai mic am croşetat o “păturică specială” pentru tine. Nu îmi pot aminti cu câte ochiuri am pornit primul rând şi doresc tare mult să ştiu acest lucru. Te rog să mă ajuți! Pot să-ți spun că:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- păturica are n ochiuri;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- primele două rânduri croșetate au același număr de ochiuri. Ele se găsesc la mijlocul păturii și conțin cele mai multe ochiuri;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- pentru a obține rânduri noi am procedat astfel: pornind din partea stângă a fiecărui rând, către dreapta, am unit câte &#039;&#039;&#039;3&#039;&#039;&#039; ochiuri din rândul precedent întrunul singur, obținând astfel un rând nou. Dacă la capătul din dreapta rândului rămâneau &#039;&#039;&#039;4&#039;&#039;&#039; sau &#039;&#039;&#039;5&#039;&#039;&#039; ochiuri, din acestea formam un singur ochi. Pornind de la rândul &#039;&#039;&#039;1&#039;&#039;&#039;, fiecare nou rând obținut se găsește deasupra celui din care a fost format, iar fiecare nou rând obținut pornind de la rândul &#039;&#039;&#039;2&#039;&#039;&#039; se găsește sub cel din care a fost format;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- am continuat până când am ajuns la un rând cu un singur ochi;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- în timp ce lucram, m-am gândit pe parcurs, dacă penultimul rând conţinea două ochiuri, să formez cu ele un singur ochi.”&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ionel a desenat cum arată “păturica specială” cu &#039;&#039;&#039;20&#039;&#039;&#039; de ochiuri şi vă roagă să-l ajutaţi să găsească soluţia problemei.&lt;br /&gt;
&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dă un număr &#039;&#039;&#039;n&#039;&#039;&#039;, natural par, reprezentând numărul total de ochiuri din care este formată păturica. Se cere să se determine un număr natural &#039;&#039;&#039;k&#039;&#039;&#039; care reprezintă numărul de ochiuri pe care îl are primul rând croşetat de bunica.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;crosetain.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;crosetaout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;k&#039;&#039;&#039;, va conţine un număr natural reprezentând numărul de ochiuri existente pe primul rând croşetat de bunica.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les;  2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n&#039;&#039;&#039; număr natural par&lt;br /&gt;
:Pentru toate testele date există soluţie.&lt;br /&gt;
:Un ochi de croşetă este desenat printr-un cerculeţ.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;crosetain.txt&#039;&#039;&#039;&lt;br /&gt;
:30&lt;br /&gt;
;&#039;&#039;&#039;crosetaout.txt&#039;&#039;&#039;&lt;br /&gt;
:11&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Primul şi al doilea rând au câte &#039;&#039;&#039;11&#039;&#039;&#039; ochiuri. De o parte și de cealaltă, următoarele două rânduri au fiecare câte &#039;&#039;&#039;3&#039;&#039;&#039; ochiuri. Următoarele două rânduri sunt ultimele și au fiecare câte un &#039;&#039;&#039;1&#039;&#039;&#039; ochi.&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;crosetain.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;crosetaout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3367 - Croseta&lt;br /&gt;
def gaseste_numar_ochiuri_primul_rand(n):&lt;br /&gt;
    # Daca n este 0, afisam mesajul corespunzator si ne oprim&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return &amp;quot;Nu au fost respectate cerintele impuse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Initializam variabilele necesare&lt;br /&gt;
    ochiuri_primul_rand = n // 2 - 4&lt;br /&gt;
&lt;br /&gt;
    # Returnam rezultatul&lt;br /&gt;
    return ochiuri_primul_rand&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&#039;crosetain.txt&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
    # Verificam daca n este par&lt;br /&gt;
    if n % 2 == 0:&lt;br /&gt;
        # Determinam rezultatul&lt;br /&gt;
        rezultat = gaseste_numar_ochiuri_primul_rand(n)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul in fisierul de iesire&lt;br /&gt;
        with open(&#039;crosetaout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
            g.write(str(rezultat))&lt;br /&gt;
    else:&lt;br /&gt;
        # Daca n nu este par, afisam mesajul corespunzator&lt;br /&gt;
        with open(&#039;crosetaout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
            g.write(&amp;quot;Nu au fost respectate cerintele impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(&amp;quot;A aparut o eroare:&amp;quot;, str(e))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3367_-_Croseta&amp;diff=9081</id>
		<title>3367 - Croseta</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3367_-_Croseta&amp;diff=9081"/>
		<updated>2024-01-05T12:28:21Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Ionel este un băieţel pasionat de matematică, dar tare năzdrăvan. Într-o zi a dat cu o piatră şi a spart un geam de la casa bunicii. Ştiind pasiunea băiatului, bunica i-a spus: ”Te voi ierta dacă îmi dai răspunsul corect la următoarea problemă: Când erai mic am croşetat o “păturică specială” pentru tine. Nu îmi pot aminti cu câte ochiuri am pornit primul rând şi doresc tare mult să ştiu acest lucru. Te rog să mă ajuți! Pot să-ți spun că:&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- păturica are n ochiuri;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- primele două rânduri croșetate au același număr de ochiuri. Ele se găsesc la mijlocul păturii și conțin cele mai multe ochiuri;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- pentru a obține rânduri noi am procedat astfel: pornind din partea stângă a fiecărui rând, către dreapta, am unit câte &#039;&#039;&#039;3&#039;&#039;&#039; ochiuri din rândul precedent întrunul singur, obținând astfel un rând nou. Dacă la capătul din dreapta rândului rămâneau &#039;&#039;&#039;4&#039;&#039;&#039; sau &#039;&#039;&#039;5&#039;&#039;&#039; ochiuri, din acestea formam un singur ochi. Pornind de la rândul &#039;&#039;&#039;1&#039;&#039;&#039;, fiecare nou rând obținut se găsește deasupra celui din care a fost format, iar fiecare nou rând obținut pornind de la rândul 2 se găsește sub cel din care a fost format;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- am continuat până când am ajuns la un rând cu un singur ochi;&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
- în timp ce lucram, m-am gândit pe parcurs, dacă penultimul rând conţinea două ochiuri, să formez cu ele un singur ochi.”&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Ionel a desenat cum arată “păturica specială” cu &#039;&#039;&#039;20&#039;&#039;&#039; de ochiuri şi vă roagă să-l ajutaţi să găsească soluţia problemei.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se dă un număr &#039;&#039;&#039;n&#039;&#039;&#039;, natural par, reprezentând numărul total de ochiuri din care este formată păturica. Se cere să se determine un număr natural &#039;&#039;&#039;k&#039;&#039;&#039; care reprezintă numărul de ochiuri pe care îl are primul rând croşetat de bunica.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;crosetain.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, cu semnificația din enunț.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;crosetaout.txt&#039;&#039;&#039; va conține pe prima linie numărul &#039;&#039;&#039;k&#039;&#039;&#039;, va conţine un număr natural reprezentând numărul de ochiuri existente pe primul rând croşetat de bunica.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les;  2 000 000 000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;n&#039;&#039;&#039; număr natural par&lt;br /&gt;
:Pentru toate testele date există soluţie.&lt;br /&gt;
:Un ochi de croşetă este desenat printr-un cerculeţ.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;crosetain.txt&#039;&#039;&#039;&lt;br /&gt;
:30&lt;br /&gt;
;&#039;&#039;&#039;crosetaout.txt&#039;&#039;&#039;&lt;br /&gt;
:11&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Primul şi al doilea rând au câte &#039;&#039;&#039;11&#039;&#039;&#039; ochiuri. De o parte și de cealaltă, următoarele două rânduri au fiecare câte &#039;&#039;&#039;3&#039;&#039;&#039; ochiuri. Următoarele două rânduri sunt ultimele și au fiecare câte un &#039;&#039;&#039;1&#039;&#039;&#039; ochi.&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;crosetain.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;crosetaout.txt&#039;&#039;&#039;&lt;br /&gt;
:Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#3367 - Croseta&lt;br /&gt;
def gaseste_numar_ochiuri_primul_rand(n):&lt;br /&gt;
    # Daca n este 0, afisam mesajul corespunzator si ne oprim&lt;br /&gt;
    if n == 0:&lt;br /&gt;
        return &amp;quot;Nu au fost respectate cerintele impuse&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Initializam variabilele necesare&lt;br /&gt;
    ochiuri_primul_rand = n // 2 - 4&lt;br /&gt;
&lt;br /&gt;
    # Returnam rezultatul&lt;br /&gt;
    return ochiuri_primul_rand&lt;br /&gt;
&lt;br /&gt;
# Citirea datelor de intrare&lt;br /&gt;
try:&lt;br /&gt;
    with open(&#039;crosetain.txt&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        n = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
    # Verificam daca n este par&lt;br /&gt;
    if n % 2 == 0:&lt;br /&gt;
        # Determinam rezultatul&lt;br /&gt;
        rezultat = gaseste_numar_ochiuri_primul_rand(n)&lt;br /&gt;
&lt;br /&gt;
        # Scriem rezultatul in fisierul de iesire&lt;br /&gt;
        with open(&#039;crosetaout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
            g.write(str(rezultat))&lt;br /&gt;
    else:&lt;br /&gt;
        # Daca n nu este par, afisam mesajul corespunzator&lt;br /&gt;
        with open(&#039;crosetaout.txt&#039;, &#039;w&#039;) as g:&lt;br /&gt;
            g.write(&amp;quot;Nu au fost respectate cerintele impuse&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
except Exception as e:&lt;br /&gt;
    print(&amp;quot;A aparut o eroare:&amp;quot;, str(e))&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2621_-_Spower2&amp;diff=9080</id>
		<title>2621 - Spower2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2621_-_Spower2&amp;diff=9080"/>
		<updated>2024-01-05T12:02:33Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Un număr natural &#039;&#039;&#039;M&#039;&#039;&#039; se numește număr &#039;&#039;&#039;spower2&#039;&#039;&#039; dacă poate fi descompus astfel: &#039;&#039;&#039;M=2^x+2^y&#039;&#039;&#039;, cu &#039;&#039;&#039;x≠y&#039;&#039;&#039;. Exemplu: &#039;&#039;&#039;6&#039;&#039;&#039; este un număr &#039;&#039;&#039;spower2 (6=2+4)&#039;&#039;&#039;, pe când &#039;&#039;&#039;8&#039;&#039;&#039; nu este.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039; de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Pentru fiecare element al șirului &#039;&#039;&#039;Ai&#039;&#039;&#039; să se determine cel mai apropiat număr &#039;&#039;&#039;spower2&#039;&#039;&#039; mai mare sau egal cu &#039;&#039;&#039;Ai&#039;&#039;&#039;, unde &#039;&#039;&#039;1&amp;amp;les;i&amp;amp;les;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;spower2in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;spower2out&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spațiu, ce reprezintă numerele &#039;&#039;&#039;spower2&#039;&#039;&#039; asociate numerelor citite din fișier conform cerinței.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;spower2in.txt&#039;&#039;&#039;&lt;br /&gt;
:6&lt;br /&gt;
:14 8 5 19 1 6&lt;br /&gt;
;&#039;&#039;&#039;spower2out.txt&#039;&#039;&#039;&lt;br /&gt;
:17 9 5 20 3 6&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;spower2in.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;spower2out.txt&#039;&#039;&#039;&lt;br /&gt;
: Numarul nu respecta restrictiile.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&#039;&#039;&#039;17=1+16, 9=1+8, 5=1+4, 20=4+16, 3=1+2, 6=2+4.&#039;&#039;&#039;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2621 - Spower2&lt;br /&gt;
def is_spower2(num):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă un număr este de tip spower2&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(31):&lt;br /&gt;
        for j in range(i+1, 32):&lt;br /&gt;
            if 2**i + 2**j == num:&lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def spower2_associate(file_input, file_output):&lt;br /&gt;
    try:&lt;br /&gt;
        # Citirea datelor de intrare din fișier&lt;br /&gt;
        with open(file_input, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
            A = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        # Determinarea celor mai apropiate numere spower2&lt;br /&gt;
        spower2_list = [min(filter(lambda x: x &amp;gt;= num and is_spower2(x), range(1, 2*max(A)+1)), key=lambda x: x - num) for num in A]&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039; &#039;.join(map(str, spower2_list)))&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        # În caz de eroare, afișăm un mesaj corespunzător&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039;Numarul nu respecta restrictiile.&#039;)&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
spower2_associate(&#039;spower2in.txt&#039;, &#039;spower2out.txt&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2621_-_Spower2&amp;diff=9079</id>
		<title>2621 - Spower2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2621_-_Spower2&amp;diff=9079"/>
		<updated>2024-01-05T12:01:33Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Enunt ==&lt;br /&gt;
Un număr natural &#039;&#039;&#039;M&#039;&#039;&#039; se numește număr &#039;&#039;&#039;spower2&#039;&#039;&#039; dacă poate fi descompus astfel: &#039;&#039;&#039;M=2^x+2^y&#039;&#039;&#039;, cu &#039;&#039;&#039;x≠y&#039;&#039;&#039;. Exemplu: &#039;&#039;&#039;6&#039;&#039;&#039; este un număr &#039;&#039;&#039;spower2 (6=2+4)&#039;&#039;&#039;, pe când &#039;&#039;&#039;8&#039;&#039;&#039; nu este.&lt;br /&gt;
== Cerința ==&lt;br /&gt;
Se consideră un șir &#039;&#039;&#039;A&#039;&#039;&#039; de &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale. Pentru fiecare element al șirului &#039;&#039;&#039;Ai&#039;&#039;&#039; să se determine cel mai apropiat număr &#039;&#039;&#039;spower2&#039;&#039;&#039; mai mare sau egal cu &#039;&#039;&#039;Ai&#039;&#039;&#039;, unde &#039;&#039;&#039;1&amp;amp;les;i&amp;amp;les;n&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;spower2in.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;n&#039;&#039;&#039;, iar pe a doua linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;spower2out&#039;&#039;&#039; va conține pe prima linie &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, separate prin spațiu, ce reprezintă numerele &#039;&#039;&#039;spower2&#039;&#039;&#039; asociate numerelor citite din fișier conform cerinței.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n &amp;amp;les; 100 000&#039;&#039;&#039;&lt;br /&gt;
*numerele de pe a doua linie a fișierului de intrare vor fi mai mici decât &#039;&#039;&#039;1.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;spower2in.txt&#039;&#039;&#039;&lt;br /&gt;
:6&lt;br /&gt;
:14 8 5 19 1 6&lt;br /&gt;
;&#039;&#039;&#039;spower2out.txt&#039;&#039;&#039;&lt;br /&gt;
:17 9 5 20 3 6&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;spower2in.txt&#039;&#039;&#039;&lt;br /&gt;
:0&lt;br /&gt;
;&#039;&#039;&#039;spower2out.txt&#039;&#039;&#039;&lt;br /&gt;
: Numarul nu respecta restrictiile.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
&#039;&#039;&#039;17=1+16, 9=1+8, 5=1+4, 20=4+16, 3=1+2, 6=2+4.&#039;&#039;&#039;&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#2621 - Spower2&lt;br /&gt;
def is_spower2(num):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    Verifică dacă un număr este de tip spower2&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    for i in range(31):&lt;br /&gt;
        for j in range(i+1, 32):&lt;br /&gt;
            if 2**i + 2**j == num:&lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def spower2_associate(file_input, file_output):&lt;br /&gt;
    try:&lt;br /&gt;
        # Citirea datelor de intrare din fișier&lt;br /&gt;
        with open(file_input, &#039;r&#039;) as f:&lt;br /&gt;
            n = int(f.readline().strip())&lt;br /&gt;
            A = list(map(int, f.readline().split()))&lt;br /&gt;
&lt;br /&gt;
        # Determinarea celor mai apropiate numere spower2&lt;br /&gt;
        spower2_list = [min(filter(lambda x: x &amp;gt;= num and is_spower2(x), range(1, 2*max(A)+1)), key=lambda x: x - num) for num in A]&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039; &#039;.join(map(str, spower2_list)))&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        # În caz de eroare, afișăm un mesaj corespunzător&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039;Numarul nu respecta restrictiile.&#039;)&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
spower2_associate(&#039;spower2in.txt&#039;, &#039;spower2out.txt&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0242_-_Interclas_M&amp;diff=9077</id>
		<title>0242 - Interclas M</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0242_-_Interclas_M&amp;diff=9077"/>
		<updated>2024-01-05T11:43:34Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural &#039;&#039;&#039;x&#039;&#039;&#039; și două șiruri &#039;&#039;&#039;a&#039;&#039;&#039; și &#039;&#039;&#039;b&#039;&#039;&#039;, cu &#039;&#039;&#039;n&#039;&#039;&#039;, respectiv &#039;&#039;&#039;m&#039;&#039;&#039; elemente, numere naturale, &#039;&#039;&#039;ordonate strict crescător&#039;&#039;&#039;. Să se afișeze, în ordine crescătoare, multiplii lui x care se află doar în unul dintre cele două șiruri.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;interclasmin.txt&#039;&#039;&#039; conține pe prima linie numărul &#039;&#039;&#039;x&#039;&#039;&#039;, pe linia a doua numărul &#039;&#039;&#039;n&#039;&#039;&#039;; urmează &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii. Linia următoare conține numărul &#039;&#039;&#039;m&#039;&#039;&#039; și urmează &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale, ordonate crescător, ce pot fi dispuse pe mai multe linii.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &#039;&#039;&#039;interclasmout.txt&#039;&#039;&#039; va conține pe prima linie valorile determinate, separate printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;0 &amp;lt; x &amp;lt; 1.000.000&#039;&#039;&#039;&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n, m &amp;amp;les; 100.000&#039;&#039;&#039;&lt;br /&gt;
*valorile elementelor celor două șiruri vor fi mai mici decât &#039;&#039;&#039;1.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;&#039;&#039;&#039;interclasmin.txt&#039;&#039;&#039;&lt;br /&gt;
:5&lt;br /&gt;
:7&lt;br /&gt;
:1 2 3 4 &lt;br /&gt;
:7 20 60&lt;br /&gt;
:9&lt;br /&gt;
:3 5 7 &lt;br /&gt;
:8 9 10 12 &lt;br /&gt;
:20 24&lt;br /&gt;
;&#039;&#039;&#039;interclasmout.txt&#039;&#039;&#039;&lt;br /&gt;
:5 10 60&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;&#039;&#039;&#039;interclasmin.txt&#039;&#039;&#039;&lt;br /&gt;
:2&lt;br /&gt;
:0&lt;br /&gt;
:1&lt;br /&gt;
:7&lt;br /&gt;
;&#039;&#039;&#039;interclasmout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0242 - InterclasM&lt;br /&gt;
def multiplii_x_unice(x, a, b):&lt;br /&gt;
    rezultat = set()&lt;br /&gt;
&lt;br /&gt;
    i, j = 0, 0&lt;br /&gt;
&lt;br /&gt;
    while i &amp;lt; len(a) and j &amp;lt; len(b):&lt;br /&gt;
        if a[i] % x == 0 and b[j] % x != 0:&lt;br /&gt;
            rezultat.add(a[i])&lt;br /&gt;
            i += 1&lt;br /&gt;
        elif a[i] % x != 0 and b[j] % x == 0:&lt;br /&gt;
            rezultat.add(b[j])&lt;br /&gt;
            j += 1&lt;br /&gt;
        elif a[i] &amp;lt; b[j]:&lt;br /&gt;
            i += 1&lt;br /&gt;
        else:&lt;br /&gt;
            j += 1&lt;br /&gt;
&lt;br /&gt;
    while i &amp;lt; len(a) and a[i] % x == 0:&lt;br /&gt;
        rezultat.add(a[i])&lt;br /&gt;
        i += 1&lt;br /&gt;
&lt;br /&gt;
    while j &amp;lt; len(b) and b[j] % x == 0:&lt;br /&gt;
        rezultat.add(b[j])&lt;br /&gt;
        j += 1&lt;br /&gt;
&lt;br /&gt;
    return sorted(list(rezultat))&lt;br /&gt;
&lt;br /&gt;
def verificare_restricții(x, a, b):&lt;br /&gt;
    if not (0 &amp;lt; x &amp;lt; 1000000):&lt;br /&gt;
        return False&lt;br /&gt;
    for numar in a + b:&lt;br /&gt;
        if numar &amp;gt;= 1000000:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;interclasmin.txt&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        x = int(file.readline().strip())&lt;br /&gt;
        n = int(file.readline().strip())&lt;br /&gt;
        a = [int(file.readline().strip()) for _ in range(n)]&lt;br /&gt;
        m = int(file.readline().strip())&lt;br /&gt;
        b = [int(file.readline().strip()) for _ in range(m)]&lt;br /&gt;
&lt;br /&gt;
    # Verificare restricții&lt;br /&gt;
    if not verificare_restricții(x, a, b):&lt;br /&gt;
        print(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    # Calculul multipliilor lui x care se află doar într-unul dintre șiruri&lt;br /&gt;
    rezultat = multiplii_x_unice(x, a, b)&lt;br /&gt;
&lt;br /&gt;
    # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;interclasmout.txt&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        file.write(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0284_-_Interclasare_3&amp;diff=9075</id>
		<title>0284 - Interclasare 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0284_-_Interclasare_3&amp;diff=9075"/>
		<updated>2024-01-05T11:25:53Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: /* Date de intrare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau două şiruri, cu &#039;&#039;&#039;n&#039;&#039;&#039;, respectiv &#039;&#039;&#039;m&#039;&#039;&#039;, elemente, numere naturale. Primul şir este ordonat crescător, iar al doilea este ordonat descrescător. Să se afişeze, în ordine crescătoare, valorile pare din cele două şiruri.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;interclasare3in.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;m&#039;&#039;&#039;; urmează &#039;&#039;&#039;n&#039;&#039;&#039; numere naturale separate prin spaţii, dispuse pe mai multe linii, ordonate crescător; urmează &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale separate prin spaţii, dispuse pe mai multe linii, ordonate descrescător.&lt;br /&gt;
&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;interclasare3out.txt&#039;&#039;&#039; va conţine valorile pare din cele două şiruri, ordonate crescător, câte &#039;&#039;&#039;20&#039;&#039;&#039; de valori pe o linie, valorile de pe aceeaşi linie fiind separate printr-un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n,m &amp;amp;les; 100000;&#039;&#039;&#039;&lt;br /&gt;
*elementele celor două şiruri vor avea cel mult &#039;&#039;&#039;9&#039;&#039;&#039; cifre;&lt;br /&gt;
*în cel puţin şir va exista minim un element par;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;interclasare3in.txt&#039;&#039;&#039;&lt;br /&gt;
:5 8&lt;br /&gt;
:2 4 7 37 42&lt;br /&gt;
:88 88 67 45 42 32 4 1 &lt;br /&gt;
; &#039;&#039;&#039;interclasare3out.txt&#039;&#039;&#039;&lt;br /&gt;
:2 4 4 32 42 42 88 88&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;interclasare3in.txt&#039;&#039;&#039;&lt;br /&gt;
: 0 -1&lt;br /&gt;
; &#039;&#039;&#039;interclasare3out.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0284 - Interclasare3&lt;br /&gt;
def interclasare(file_input, file_output):&lt;br /&gt;
    try:&lt;br /&gt;
        # Citirea datelor de intrare din fișier&lt;br /&gt;
        with open(file_input, &#039;r&#039;) as f:&lt;br /&gt;
            n, m = map(int, f.readline().split())&lt;br /&gt;
            sir_crescator = [list(map(int, line.split())) for line in f.readlines()]&lt;br /&gt;
            sir_descrescator = [list(map(int, line.split())) for line in f.readlines()]&lt;br /&gt;
&lt;br /&gt;
        # Extrage valorile pare din cele două șiruri&lt;br /&gt;
        pare_crescator = [num for sublist in sir_crescator for num in sublist if num % 2 == 0]&lt;br /&gt;
        pare_descrescator = [num for sublist in sir_descrescator for num in sublist if num % 2 == 0]&lt;br /&gt;
&lt;br /&gt;
        # Concatenează și sortează valorile pare&lt;br /&gt;
        rezultat = sorted(pare_crescator + pare_descrescator)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            for i, num in enumerate(rezultat, 1):&lt;br /&gt;
                f.write(str(num) + &#039; &#039;)&lt;br /&gt;
                if i % 20 == 0:&lt;br /&gt;
                    f.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        # În caz de eroare, afișăm un mesaj corespunzător&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039;Nu au fost respectate cerintele impuse&#039;)&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
interclasare(&#039;interclasare3in.txt&#039;, &#039;interclasare3out.txt&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0284_-_Interclasare_3&amp;diff=9074</id>
		<title>0284 - Interclasare 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0284_-_Interclasare_3&amp;diff=9074"/>
		<updated>2024-01-05T11:25:20Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau două şiruri, cu &#039;&#039;&#039;n&#039;&#039;&#039;, respectiv &#039;&#039;&#039;m&#039;&#039;&#039;, elemente, numere naturale. Primul şir este ordonat crescător, iar al doilea este ordonat descrescător. Să se afişeze, în ordine crescătoare, valorile pare din cele două şiruri.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare &#039;&#039;&#039;interclasare3in.txt&#039;&#039;&#039; conţine pe prima linie numerele &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;m&#039;&#039;&#039;; urmează &#039;&#039;n numere naturale separate prin spaţii, dispuse pe mai multe linii, ordonate crescător; urmează &#039;&#039;&#039;m&#039;&#039;&#039; numere naturale separate prin spaţii, dispuse pe mai multe linii, ordonate descrescător.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;interclasare3out.txt&#039;&#039;&#039; va conţine valorile pare din cele două şiruri, ordonate crescător, câte &#039;&#039;&#039;20&#039;&#039;&#039; de valori pe o linie, valorile de pe aceeaşi linie fiind separate printr-un spaţiu.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*&#039;&#039;&#039;1 &amp;amp;les; n,m &amp;amp;les; 100000;&#039;&#039;&#039;&lt;br /&gt;
*elementele celor două şiruri vor avea cel mult &#039;&#039;&#039;9&#039;&#039;&#039; cifre;&lt;br /&gt;
*în cel puţin şir va exista minim un element par;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;interclasare3in.txt&#039;&#039;&#039;&lt;br /&gt;
:5 8&lt;br /&gt;
:2 4 7 37 42&lt;br /&gt;
:88 88 67 45 42 32 4 1 &lt;br /&gt;
; &#039;&#039;&#039;interclasare3out.txt&#039;&#039;&#039;&lt;br /&gt;
:2 4 4 32 42 42 88 88&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;interclasare3in.txt&#039;&#039;&#039;&lt;br /&gt;
: 0 -1&lt;br /&gt;
; &#039;&#039;&#039;interclasare3out.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#0284 - Interclasare3&lt;br /&gt;
def interclasare(file_input, file_output):&lt;br /&gt;
    try:&lt;br /&gt;
        # Citirea datelor de intrare din fișier&lt;br /&gt;
        with open(file_input, &#039;r&#039;) as f:&lt;br /&gt;
            n, m = map(int, f.readline().split())&lt;br /&gt;
            sir_crescator = [list(map(int, line.split())) for line in f.readlines()]&lt;br /&gt;
            sir_descrescator = [list(map(int, line.split())) for line in f.readlines()]&lt;br /&gt;
&lt;br /&gt;
        # Extrage valorile pare din cele două șiruri&lt;br /&gt;
        pare_crescator = [num for sublist in sir_crescator for num in sublist if num % 2 == 0]&lt;br /&gt;
        pare_descrescator = [num for sublist in sir_descrescator for num in sublist if num % 2 == 0]&lt;br /&gt;
&lt;br /&gt;
        # Concatenează și sortează valorile pare&lt;br /&gt;
        rezultat = sorted(pare_crescator + pare_descrescator)&lt;br /&gt;
&lt;br /&gt;
        # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            for i, num in enumerate(rezultat, 1):&lt;br /&gt;
                f.write(str(num) + &#039; &#039;)&lt;br /&gt;
                if i % 20 == 0:&lt;br /&gt;
                    f.write(&#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except Exception as e:&lt;br /&gt;
        # În caz de eroare, afișăm un mesaj corespunzător&lt;br /&gt;
        with open(file_output, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(&#039;Nu au fost respectate cerintele impuse&#039;)&lt;br /&gt;
&lt;br /&gt;
# Exemplu de utilizare:&lt;br /&gt;
interclasare(&#039;interclasare3in.txt&#039;, &#039;interclasare3out.txt&#039;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1440_-_Numar_termeni_sir_cu_prima_cifra_k&amp;diff=9073</id>
		<title>1440 - Numar termeni sir cu prima cifra k</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1440_-_Numar_termeni_sir_cu_prima_cifra_k&amp;diff=9073"/>
		<updated>2024-01-05T11:15:43Z</updated>

		<summary type="html">&lt;p&gt;Ramona Dragoș: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se generează un şir de numere naturale ai cărui primi termeni sunt, în această ordine:&lt;br /&gt;
&#039;&#039;&#039;1, 20, 21, 300, 301, 320, 321, 4000, 4001, 4020, 4021, 4300, 4301, 4320, 4321, 50000,...&#039;&#039;&#039;&lt;br /&gt;
Deduceţi regula după care sunt generaţi termenii şirului şi scrieţi un program care să citească numerele naturale &#039;&#039;&#039;k&#039;&#039;&#039;, &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;x&#039;&#039;&#039; şi care să determine:&lt;br /&gt;
:a) numărul de termeni ai şirului care au prima cifră (cea mai semnificativă) egală cu &#039;&#039;&#039;k&#039;&#039;&#039;;&lt;br /&gt;
:b) cel de-al &#039;&#039;&#039;n&#039;&#039;&#039;-lea termen al şirului din enunţ;&lt;br /&gt;
:c) cel mai mare termen al şirului, mai mic sau egal decât &#039;&#039;&#039;x&#039;&#039;&#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &#039;&#039;&#039;nrin.txt&#039;&#039;&#039; conține o singură linie pe care sunt scrise trei numere naturale &#039;&#039;&#039;k&#039;&#039;&#039;, &#039;&#039;&#039;n&#039;&#039;&#039; şi &#039;&#039;&#039;x&#039;&#039;&#039;, separate prin câte un spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire &#039;&#039;&#039;nrout.txt&#039;&#039;&#039; va conţine &#039;&#039;&#039;3&#039;&#039;&#039; linii:&lt;br /&gt;
:– pe prima linie se va scrie un număr natural reprezentând numărul de termeni ai şirului care au prima cifră (cea mai semnificativă) egală cu &#039;&#039;&#039;k&#039;&#039;&#039;;&lt;br /&gt;
:– pe a doua linie se va scrie un număr natural reprezentând cel de-al &#039;&#039;&#039;n&#039;&#039;&#039;-lea termen al şirului din enunţ;&lt;br /&gt;
:– pe a treia linie se va scrie un număr natural reprezentând cel mai mare termen al şirului, mai mic sau egal cu &#039;&#039;&#039;x&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; k &amp;amp;les; 9&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;3 &amp;amp;les; n &amp;amp;les; 511&#039;&#039;&#039;&lt;br /&gt;
* &#039;&#039;&#039;1 &amp;amp;les; x &amp;amp;les; 2.000.000.000&#039;&#039;&#039;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
; &#039;&#039;&#039;nrin.txt&#039;&#039;&#039;&lt;br /&gt;
:4 19 57890&lt;br /&gt;
; &#039;&#039;&#039;nrout.txt&#039;&#039;&#039;&lt;br /&gt;
:8&lt;br /&gt;
:50021&lt;br /&gt;
:54321&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
; &#039;&#039;&#039;nrin.txt&#039;&#039;&#039;&lt;br /&gt;
: 0 1 0&lt;br /&gt;
; &#039;&#039;&#039;nrout.txt&#039;&#039;&#039;&lt;br /&gt;
: Nu au fost respectate cerintele impuse.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
#1440 - Nr&lt;br /&gt;
def count_terms_with_first_digit_k(k, x):&lt;br /&gt;
    count = 0&lt;br /&gt;
    current_term = 1&lt;br /&gt;
&lt;br /&gt;
    while current_term &amp;lt;= x:&lt;br /&gt;
        if str(current_term)[0] == str(k):&lt;br /&gt;
            count += 1&lt;br /&gt;
        current_term *= 10&lt;br /&gt;
&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
def find_nth_term(n):&lt;br /&gt;
    terms = [1]&lt;br /&gt;
    current_term = 1&lt;br /&gt;
&lt;br /&gt;
    while len(terms) &amp;lt; n:&lt;br /&gt;
        current_term += 1&lt;br /&gt;
        terms.append(current_term)&lt;br /&gt;
&lt;br /&gt;
    return terms[-1]&lt;br /&gt;
&lt;br /&gt;
def find_largest_term_less_than_x(x):&lt;br /&gt;
    current_term = 1&lt;br /&gt;
&lt;br /&gt;
    while current_term &amp;lt;= x:&lt;br /&gt;
        current_term *= 10&lt;br /&gt;
&lt;br /&gt;
    return current_term // 10&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        with open(&#039;nrin.txt&#039;, &#039;r&#039;) as file:&lt;br /&gt;
            k, n, x = map(int, file.readline().split())&lt;br /&gt;
&lt;br /&gt;
        if not (1 &amp;lt;= k &amp;lt;= 9 and 3 &amp;lt;= n &amp;lt;= 511 and 1 &amp;lt;= x &amp;lt;= 2000000000):&lt;br /&gt;
            raise ValueError(&amp;quot;Nu au fost respectate cerintele impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
        result1 = count_terms_with_first_digit_k(k, x)&lt;br /&gt;
        result2 = find_nth_term(n)&lt;br /&gt;
        result3 = find_largest_term_less_than_x(x)&lt;br /&gt;
&lt;br /&gt;
        with open(&#039;nrout.txt&#039;, &#039;w&#039;) as file_out:&lt;br /&gt;
            file_out.write(str(result1) + &#039;\n&#039;)&lt;br /&gt;
            file_out.write(str(result2) + &#039;\n&#039;)&lt;br /&gt;
            file_out.write(str(result3) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        with open(&#039;nrout.txt&#039;, &#039;w&#039;) as file_out:&lt;br /&gt;
            file_out.write(str(e) + &#039;\n&#039;)&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;br /&gt;
&lt;br /&gt;
== Explicatie ==&lt;br /&gt;
Pe prima linie a fişierului nrout.txt se scrie numărul 8, deoarece sunt 8 termeni în şir care au prima cifră egală cu k=4).&lt;br /&gt;
Pe a doua linie a fişierului se scrie numărul 50021, deoarece cel de-al n-lea (n=19) termen al şirului este 50021.&lt;br /&gt;
Numerele 54321 şi 600000 sunt doi termeni situaţi pe poziţii consecutive în şirul din enunţ, iar 54321 ≤ 57890 &amp;lt; 600000. Astfel, numărul 54321 se scrie pe ultima linie a fişierului nrout.txt .&lt;/div&gt;</summary>
		<author><name>Ramona Dragoș</name></author>
	</entry>
</feed>