<?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=Benzar+Ioan</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=Benzar+Ioan"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/wiki/Special:Contributions/Benzar_Ioan"/>
	<updated>2026-05-03T04:18:53Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=14310&amp;diff=10558</id>
		<title>14310</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=14310&amp;diff=10558"/>
		<updated>2025-01-12T17:58:30Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;14310 (Traian Covaciu)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fie &amp;lt;math&amp;gt;n, n + 2, n + 6 &amp;lt;/math&amp;gt; trei numere naturale și &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; suma lor.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
a) &#039;&#039;Dați exemplu de cel puțin trei valori pentru &amp;lt;math&amp;gt; n \in \mathbb{N}&amp;lt;/math&amp;gt; astfel încât numerele &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; să fie simultan numere prime.&#039;&#039; &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) &#039;&#039;Dacă &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sunt simultan numere prime, arătați că există &amp;lt;math&amp;gt; k \in \mathbb{N} &amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt; S = 9k + 5&amp;lt;/math&amp;gt;. &#039;&#039; &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c) &#039;&#039;Dacă &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sunt numere prime, determinați restul împărțirii numărului &amp;lt;math&amp;gt; S&amp;lt;/math&amp;gt; la &amp;lt;math&amp;gt; 18 &amp;lt;/math&amp;gt;.&#039;&#039;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Soluție:&#039;&#039;&#039; &amp;lt;p&amp;gt;&lt;br /&gt;
a) Pentru &amp;lt;math&amp;gt; n = 5 &amp;lt;/math&amp;gt; numerele sunt &amp;lt;math&amp;gt; 5, 7, 11 &amp;lt;/math&amp;gt;. Pentru &amp;lt;math&amp;gt; n = 11 &amp;lt;/math&amp;gt; avem &amp;lt;math&amp;gt; 11, 13, 17 &amp;lt;/math&amp;gt;, iar pentru &amp;lt;math&amp;gt; n = 17 &amp;lt;/math&amp;gt; obținem &amp;lt;math&amp;gt; 17, 19, 23 &amp;lt;/math&amp;gt;. &amp;lt;p&amp;gt;&lt;br /&gt;
b) Se știe că numerele prime au forma &amp;lt;math&amp;gt; 6p + 1 &amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt; 6p + 5 &amp;lt;/math&amp;gt;. Dacă &amp;lt;math&amp;gt; n = 6p + 1&amp;lt;/math&amp;gt;, atunci &amp;lt;math&amp;gt; n + 2 = 6p + 3 &amp;lt;/math&amp;gt; care nu este numar prim. Așadar, &amp;lt;math&amp;gt; n = 6p + 5 &amp;lt;/math&amp;gt;. În această situație avem &amp;lt;math&amp;gt; S = 6p + 5 + 6p + 7 + 6p + 11 = 18p + 23 = 9(2p + 2) + 5 &amp;lt;/math&amp;gt;. În concluzie, există &amp;lt;math&amp;gt; k = 2p + 2 &amp;lt;/math&amp;gt; astfel încât &amp;lt;math&amp;gt; S = 9k + 5 &amp;lt;/math&amp;gt;. &amp;lt;p&amp;gt;&lt;br /&gt;
c) Din punctul b) avem &amp;lt;math&amp;gt; S = 18(p + 1) + 5 &amp;lt;/math&amp;gt;, deci restul împărțirii lui &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; la &amp;lt;math&amp;gt; 18 &amp;lt;/math&amp;gt; este &amp;lt;math&amp;gt; 5 &amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=14311&amp;diff=10557</id>
		<title>14311</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=14311&amp;diff=10557"/>
		<updated>2025-01-12T17:55:38Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039; 14311 (Neculai Stanciu) &amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039; Determinați cel mai mic număr natural de forma: &amp;lt;math&amp;gt; ab + cd + ef +gh &amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt; a, b, c, d, e, f, g, h &amp;lt;/math&amp;gt; sunt numere naturale nenule, distincte două cate două.&amp;#039;&amp;#039;&amp;lt;p&amp;gt;  &amp;#039;&amp;#039;&amp;#039;Solutie:&amp;#039;&amp;#039;&amp;#039;  &amp;lt;p&amp;gt; Trebuie ca &amp;lt;math&amp;gt; a, b, c, d, e, f, g ,h \in {1, 2, 3, 4, 5, 6, 7, 8} &amp;lt;/math&amp;gt;. Cea mai mică sumă, deci cel mai mic număr, este &amp;lt;math&amp;gt; 1 * 8 + 2 * 7 + 3 * 6 + 4 * 5 = 60 &amp;lt;/math&amp;gt;.&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039; 14311 (Neculai Stanciu) &#039;&#039;&#039;&lt;br /&gt;
&#039;&#039; Determinați cel mai mic număr natural de forma: &amp;lt;math&amp;gt; ab + cd + ef +gh &amp;lt;/math&amp;gt;, unde &amp;lt;math&amp;gt; a, b, c, d, e, f, g, h &amp;lt;/math&amp;gt; sunt numere naturale nenule, distincte două cate două.&#039;&#039;&amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Solutie:&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Trebuie ca &amp;lt;math&amp;gt; a, b, c, d, e, f, g ,h \in {1, 2, 3, 4, 5, 6, 7, 8} &amp;lt;/math&amp;gt;. Cea mai mică sumă, deci cel mai mic număr, este &amp;lt;math&amp;gt; 1 * 8 + 2 * 7 + 3 * 6 + 4 * 5 = 60 &amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=14310&amp;diff=10556</id>
		<title>14310</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=14310&amp;diff=10556"/>
		<updated>2025-01-12T17:50:29Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Created page with &amp;quot;&amp;#039;&amp;#039;&amp;#039;14310 (Traian Covaciu)&amp;#039;&amp;#039;&amp;#039;  &amp;#039;&amp;#039;Fie &amp;lt;math&amp;gt;n, n + 2, n + 6 &amp;lt;/math&amp;gt; trei numere naturale și &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; suma lor.&amp;#039;&amp;#039;  a) &amp;#039;&amp;#039;Dați exemplu de cel puțin trei valori pentru &amp;lt;math&amp;gt; n \in \mathbb{N}&amp;lt;/math&amp;gt; astfel incat numerele &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sa fie simultan numere prime.&amp;#039;&amp;#039; &amp;lt;p&amp;gt;  b) &amp;#039;&amp;#039;Daca &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sunt simultan numere prime, aratati ca exista &amp;lt;math&amp;gt; k \in \mathbb{N} &amp;lt;/math&amp;gt; astfel incat &amp;lt;math&amp;gt; S = 9k + 5&amp;lt;/math&amp;gt;. &amp;#039;&amp;#039; &amp;lt;p&amp;gt;  c) &amp;#039;&amp;#039;Daca &amp;lt;math...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;14310 (Traian Covaciu)&#039;&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;Fie &amp;lt;math&amp;gt;n, n + 2, n + 6 &amp;lt;/math&amp;gt; trei numere naturale și &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; suma lor.&#039;&#039;&lt;br /&gt;
&lt;br /&gt;
a) &#039;&#039;Dați exemplu de cel puțin trei valori pentru &amp;lt;math&amp;gt; n \in \mathbb{N}&amp;lt;/math&amp;gt; astfel incat numerele &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sa fie simultan numere prime.&#039;&#039; &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
b) &#039;&#039;Daca &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sunt simultan numere prime, aratati ca exista &amp;lt;math&amp;gt; k \in \mathbb{N} &amp;lt;/math&amp;gt; astfel incat &amp;lt;math&amp;gt; S = 9k + 5&amp;lt;/math&amp;gt;. &#039;&#039; &amp;lt;p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
c) &#039;&#039;Daca &amp;lt;math&amp;gt; n, n + 2, n + 6 &amp;lt;/math&amp;gt; sunt numere prime, determinati restul impartirii numarului &amp;lt;math&amp;gt; S&amp;lt;/math&amp;gt; la &amp;lt;math&amp;gt; 18 &amp;lt;/math&amp;gt;.&#039;&#039;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
&#039;&#039;&#039;Solutie:&#039;&#039;&#039; &amp;lt;p&amp;gt;&lt;br /&gt;
a) Pentru &amp;lt;math&amp;gt; n = 5 &amp;lt;/math&amp;gt; numerele sunt &amp;lt;math&amp;gt; 5, 7, 11 &amp;lt;/math&amp;gt;. Pentru &amp;lt;math&amp;gt; n = 11 &amp;lt;/math&amp;gt; avem &amp;lt;math&amp;gt; 11, 13, 17 &amp;lt;/math&amp;gt;, iar pentru &amp;lt;math&amp;gt; n = 17 &amp;lt;/math&amp;gt; obtinem &amp;lt;math&amp;gt; 17, 19, 23 &amp;lt;/math&amp;gt;. &amp;lt;p&amp;gt;&lt;br /&gt;
b) Se stie ca numerele prime au forma &amp;lt;math&amp;gt; 6p + 1 &amp;lt;/math&amp;gt; sau &amp;lt;math&amp;gt; 6p + 5 &amp;lt;/math&amp;gt;. Daca &amp;lt;math&amp;gt; n = 6p + 1&amp;lt;/math&amp;gt;, atunci &amp;lt;math&amp;gt; n + 2 = 6p + 3 &amp;lt;/math&amp;gt; care nu este numar prim. Asadar, &amp;lt;math&amp;gt; n = 6p + 5 &amp;lt;/math&amp;gt;. In aceasta situatie avem &amp;lt;math&amp;gt; S = 6p + 5 + 6p + 7 + 6p + 11 = 18p + 23 = 9(2p + 2) + 5 &amp;lt;/math&amp;gt;. In concluzie, exista &amp;lt;math&amp;gt; k = 2p + 2 &amp;lt;/math&amp;gt; astfel incat &amp;lt;math&amp;gt; S = 9k + 5 &amp;lt;/math&amp;gt;. &amp;lt;p&amp;gt;&lt;br /&gt;
c) Din punctul b) avem &amp;lt;math&amp;gt; S = 18(p + 1) + 5 &amp;lt;/math&amp;gt;, deci restul impartirii lui &amp;lt;math&amp;gt; S &amp;lt;/math&amp;gt; la &amp;lt;math&amp;gt; 18 &amp;lt;/math&amp;gt; este &amp;lt;math&amp;gt; 5 &amp;lt;/math&amp;gt;.&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1832_-_Pd&amp;diff=10068</id>
		<title>1832 - Pd</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1832_-_Pd&amp;diff=10068"/>
		<updated>2024-06-03T19:41:01Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dă un număr natural s. Determinaţi, în ordine lexicografică, toate modalităţile de a-l scrie pe s ca produs de divizori proprii distincți ai lui s. == Date de intrare == Programul citește de la tastatură numărul s. == Date de ieșire == Programul va afișa pe ecran pe fiecare linie câte un şir de numere naturale ordonate strict crescător, separate prin câte un spaţiu. Produsul numerelor din fiecare şir este s, iar numerele sunt divizori prop...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural s. Determinaţi, în ordine lexicografică, toate modalităţile de a-l scrie pe s ca produs de divizori proprii distincți ai lui s.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul s.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran pe fiecare linie câte un şir de numere naturale ordonate strict crescător, separate prin câte un spaţiu. Produsul numerelor din fiecare şir este s, iar numerele sunt divizori proprii ai lui s. Şirurile vor fi afişate în ordine lexicografică.&lt;br /&gt;
&lt;br /&gt;
Dacă numărul s nu poate fi scris ca produs de divizori proprii, se va fişa mesajul NU EXISTA.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ s ≤ 2000000000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
30&lt;br /&gt;
;Iesire&lt;br /&gt;
2 3 5 &amp;lt;br&amp;gt;&lt;br /&gt;
2 15 &amp;lt;br&amp;gt;&lt;br /&gt;
3 10 &amp;lt;br&amp;gt;&lt;br /&gt;
5 6 &lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from itertools import combinations&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_divisors(n):&lt;br /&gt;
    divisors = []&lt;br /&gt;
    for i in range(2, int(math.sqrt(n)) + 1):&lt;br /&gt;
        if n % i == 0:&lt;br /&gt;
            divisors.append(i)&lt;br /&gt;
            if i != n // i:&lt;br /&gt;
                divisors.append(n // i)&lt;br /&gt;
    divisors.sort()&lt;br /&gt;
    return divisors&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def find_combinations(divisors, s):&lt;br /&gt;
    result = []&lt;br /&gt;
    for i in range(1, len(divisors) + 1):&lt;br /&gt;
        for combo in combinations(divisors, i):&lt;br /&gt;
            product = 1&lt;br /&gt;
            for num in combo:&lt;br /&gt;
                product *= num&lt;br /&gt;
            if product == s:&lt;br /&gt;
                result.append(combo)&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    s = int(input().strip())&lt;br /&gt;
&lt;br /&gt;
    if s &amp;lt;= 1:&lt;br /&gt;
        print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    divisors = find_divisors(s)&lt;br /&gt;
    combinations = find_combinations(divisors, s)&lt;br /&gt;
&lt;br /&gt;
    if not combinations:&lt;br /&gt;
        print(&amp;quot;NU EXISTA&amp;quot;)&lt;br /&gt;
    else:&lt;br /&gt;
        sorted_combinations = sorted(combinations)&lt;br /&gt;
        for combo in sorted_combinations:&lt;br /&gt;
            print(&amp;quot; &amp;quot;.join(map(str, combo)))&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3162_-_cife_bin_back&amp;diff=10067</id>
		<title>3162 - cife bin back</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3162_-_cife_bin_back&amp;diff=10067"/>
		<updated>2024-06-03T19:38:00Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dă un număr natural n. Afișați în ordine lexicografică toate secvențele de cifre binare care au atâtea cifre de 0 și atâtea cifre de 1 câte are reprezentarea binară a lui n. == Date de intrare == Programul citește de la tastatură numărul n. == Date de ieșire == Programul va afișa pe ecran combinațiile de cifre binare cerute, câte una pe fiecare rând. == Restricții și precizări == *1 ≤ n ≤ 2.000.000 == Exemplu 1 == ;Intrare 17 ;Iesi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr natural n. Afișați în ordine lexicografică toate secvențele de cifre binare care au atâtea cifre de 0 și atâtea cifre de 1 câte are reprezentarea binară a lui n.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran combinațiile de cifre binare cerute, câte una pe fiecare rând.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 2.000.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
17&lt;br /&gt;
;Iesire&lt;br /&gt;
00011&amp;lt;br&amp;gt;&lt;br /&gt;
00101&amp;lt;br&amp;gt;&lt;br /&gt;
00110&amp;lt;br&amp;gt;&lt;br /&gt;
01001&amp;lt;br&amp;gt;&lt;br /&gt;
01010&amp;lt;br&amp;gt;&lt;br /&gt;
01100&amp;lt;br&amp;gt;&lt;br /&gt;
10001&amp;lt;br&amp;gt;&lt;br /&gt;
10010&amp;lt;br&amp;gt;&lt;br /&gt;
10100&amp;lt;br&amp;gt;&lt;br /&gt;
11000&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def generate_binary_sequences(n):&lt;br /&gt;
    binary_representation = bin(n)[2:]&lt;br /&gt;
    count_ones = binary_representation.count(&#039;1&#039;)&lt;br /&gt;
    count_zeros = len(binary_representation) - count_ones&lt;br /&gt;
&lt;br /&gt;
    # Create the base string with the correct number of 1s and 0s&lt;br /&gt;
    base_string = &#039;1&#039; * count_ones + &#039;0&#039; * count_zeros&lt;br /&gt;
&lt;br /&gt;
    # Generate all unique permutations of the base string&lt;br /&gt;
    unique_permutations = sorted(set(permutations(base_string)))&lt;br /&gt;
&lt;br /&gt;
    # Convert tuples back to strings&lt;br /&gt;
    result = [&#039;&#039;.join(p) for p in unique_permutations]&lt;br /&gt;
&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input().strip())&lt;br /&gt;
    results = generate_binary_sequences(n)&lt;br /&gt;
    for result in results:&lt;br /&gt;
        print(result)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3157_-_cifre_c1c2&amp;diff=10066</id>
		<title>3157 - cifre c1c2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3157_-_cifre_c1c2&amp;diff=10066"/>
		<updated>2024-06-03T19:34:19Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se citesc două cifre diferite c1 și c2 (nenule). Afișați în ordine crescătoare toate numerele care conțin exact c1 cifre egale cu c2 și c2 cifre egale cu c1. == Date de intrare == Programul citește de la tastatură cifrele c1 și c2 separate printr-un spațiu. == Date de ieșire == Programul va afișa pe ecran numerele cerute, câte unul pe un rând. == Restricții și precizări == *1 ≤ c1, c2 ≤ 9 *c1 ≠ c2 == Exemplu 1 == ;Intrare 2 3 ;Iesire 22...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se citesc două cifre diferite c1 și c2 (nenule). Afișați în ordine crescătoare toate numerele care conțin exact c1 cifre egale cu c2 și c2 cifre egale cu c1.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură cifrele c1 și c2 separate printr-un spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran numerele cerute, câte unul pe un rând.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ c1, c2 ≤ 9&lt;br /&gt;
*c1 ≠ c2&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
2 3&lt;br /&gt;
;Iesire&lt;br /&gt;
22233&amp;lt;br&amp;gt;&lt;br /&gt;
22323&amp;lt;br&amp;gt;&lt;br /&gt;
22332&amp;lt;br&amp;gt;&lt;br /&gt;
23223&amp;lt;br&amp;gt;&lt;br /&gt;
23232&amp;lt;br&amp;gt;&lt;br /&gt;
23322&amp;lt;br&amp;gt;&lt;br /&gt;
32223&amp;lt;br&amp;gt;&lt;br /&gt;
32232&amp;lt;br&amp;gt;&lt;br /&gt;
32322&amp;lt;br&amp;gt;&lt;br /&gt;
33222&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def generate_numbers(c1, c2):&lt;br /&gt;
    from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
    c1 = str(c1)&lt;br /&gt;
    c2 = str(c2)&lt;br /&gt;
    digits = c1 * int(c2) + c2 * int(c1)&lt;br /&gt;
    permutations_set = set()&lt;br /&gt;
&lt;br /&gt;
    for perm in permutations(digits):&lt;br /&gt;
        number = &#039;&#039;.join(perm)&lt;br /&gt;
        if number.count(c1) == int(c2) and number.count(c2) == int(c1):&lt;br /&gt;
            permutations_set.add(number)&lt;br /&gt;
&lt;br /&gt;
    sorted_numbers = sorted(permutations_set)&lt;br /&gt;
    return sorted_numbers&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    c1, c2 = map(int, input().strip().split())&lt;br /&gt;
&lt;br /&gt;
    results = generate_numbers(c1, c2)&lt;br /&gt;
&lt;br /&gt;
    for result in results:&lt;br /&gt;
        print(result)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2171_-_pluricex1&amp;diff=10065</id>
		<title>2171 - pluricex1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2171_-_pluricex1&amp;diff=10065"/>
		<updated>2024-06-03T19:29:23Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Anul acesta se organizează prima ediție a Olimpiadei Pluridisciplinare pentru Centrele de Excelență, PluriCEX. Fiecare Centru de Excelență din țară va trimite la concurs o echipă formată din k membri (toți participanți la Centrul de Excelență). Echipa va trebui să rezolve probleme interdisciplinare, disciplinele vizate fiind cele de la Centrul de Excelenţă (D discipline, pe care le vom considera numerotate de la 1 la D). Directorul CEX Iași a...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Anul acesta se organizează prima ediție a Olimpiadei Pluridisciplinare pentru Centrele de Excelență, PluriCEX. Fiecare Centru de Excelență din țară va trimite la concurs o echipă formată din k membri (toți participanți la Centrul de Excelență). Echipa va trebui să rezolve probleme interdisciplinare, disciplinele vizate fiind cele de la Centrul de Excelenţă (D discipline, pe care le vom considera numerotate de la 1 la D).&lt;br /&gt;
Directorul CEX Iași a făcut o listă cu primii n cei mai buni elevi de la CEX, apoi a numerotat elevii de la 1 la n, în ordinea apariției lor în listă. Pentru fiecare elev, directorul a notat disciplinele la care el participă la CEX.&lt;br /&gt;
Scrieți un program care să determine toate echipele ce pot fi formate din k dintre cei n elevi de pe lista directorului, cu condiția ca pentru fiecare disciplină să existe în echipă cel puțin un membru care să studieze la CEX disciplina respectivă.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare pluricex1.in conţine pe prima linie trei numere naturale n k D (cu semnificația din enunț). Urmează n linii care descriu participările la CEX ale celor n elevi de pe lista directorului. Mai exact, pe linia i+1 este descrisă participarea elevului i astfel: nr d1 d2 ... dnr. Primul număr de pe linie (nr) indică numărul de discipline la care participă elevul i. Următoarele nr numere reprezintă disciplinele la care participă elevul i. Numerele scrise pe aceeași linie sunt separate prin spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire pluricex1.out va conţine toate echipele ce se pot forma respectând condiţiile din enunţ, câte o echipă pe o linie. Membrii unei echipe vor fi scrişi în ordine crescătoare, separaţi prin câte un spaţiu. Echipele vor fi scrise în ordine lexicografică.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*0 &amp;lt; n ≤ 22&lt;br /&gt;
*0 &amp;lt; k ≤ 8&lt;br /&gt;
*0 &amp;lt; D ≤ 10&lt;br /&gt;
*Pentru datele de test problema admite întotdeauna soluţie, numărul de soluţii fiind mai mic de 20000.&lt;br /&gt;
*Spunem că vectorul (x1, x2, ..., xn) precedă lexicografic vectorul (y1, y2, ..., yn) dacă există un indice i astfel încât xj=yj, pentru orice 1 ≤ j &amp;lt; i, iar xi &amp;lt; yi.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
6 3 5&amp;lt;br&amp;gt;&lt;br /&gt;
1 2&amp;lt;br&amp;gt;&lt;br /&gt;
2 1 4&amp;lt;br&amp;gt;&lt;br /&gt;
3 2 4 3&amp;lt;br&amp;gt;&lt;br /&gt;
1 5&amp;lt;br&amp;gt;&lt;br /&gt;
2 3 1&amp;lt;br&amp;gt;&lt;br /&gt;
1 3&lt;br /&gt;
;Iesire&lt;br /&gt;
2 3 4&amp;lt;br&amp;gt;&lt;br /&gt;
3 4 5&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def generate_teams(n, k, d, participations):&lt;br /&gt;
    from itertools import combinations&lt;br /&gt;
&lt;br /&gt;
    teams = []&lt;br /&gt;
&lt;br /&gt;
    for comb in combinations(range(1, n + 1), k):&lt;br /&gt;
        valid = True&lt;br /&gt;
        disciplines = [0] * d&lt;br /&gt;
&lt;br /&gt;
        for student in comb:&lt;br /&gt;
            for discipline in participations[student - 1]:&lt;br /&gt;
                disciplines[discipline - 1] += 1&lt;br /&gt;
&lt;br /&gt;
        if all(disciplines):&lt;br /&gt;
            teams.append(comb)&lt;br /&gt;
&lt;br /&gt;
    return sorted(teams)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def read_input(input_file):&lt;br /&gt;
    with open(input_file, &#039;r&#039;) as file:&lt;br /&gt;
        n, k, d = map(int, file.readline().strip().split())&lt;br /&gt;
        participations = []&lt;br /&gt;
&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            line = list(map(int, file.readline().strip().split()))&lt;br /&gt;
            participations.append(line[1:])&lt;br /&gt;
&lt;br /&gt;
    return n, k, d, participations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(output_file, teams):&lt;br /&gt;
    with open(output_file, &#039;w&#039;) as file:&lt;br /&gt;
        for team in teams:&lt;br /&gt;
            file.write(&#039; &#039;.join(map(str, team)) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_file = &#039;pluricex1.in&#039;&lt;br /&gt;
    output_file = &#039;pluricex1.out&#039;&lt;br /&gt;
&lt;br /&gt;
    # Citim datele de intrare&lt;br /&gt;
    n, k, d, participations = read_input(input_file)&lt;br /&gt;
&lt;br /&gt;
    # Generăm echipele valide&lt;br /&gt;
    teams = generate_teams(n, k, d, participations)&lt;br /&gt;
&lt;br /&gt;
    # Scriem rezultatele în fișierul de ieșire&lt;br /&gt;
    write_output(output_file, teams)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3379_-_nkgraf&amp;diff=10064</id>
		<title>3379 - nkgraf</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3379_-_nkgraf&amp;diff=10064"/>
		<updated>2024-06-03T19:24:28Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Fie N, K, P trei numere naturale nenule. Vom considera toate grafurile orientate care au N vârfuri şi K arce, reprezentate prin lista arcelor lor ordonate lexicografic. Vom ordona apoi grafurile lexicografic şi le vom numerota începând cu 1. Scrieţi un program care, cunoscând N, K şi P, rezolvă următoarele două cerinţe: 1. determină NR, numărul de grafuri orientate cu N vârfuri şi K arce; 2. determină graful orientat cu N vârfuri şi K arce av...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Fie N, K, P trei numere naturale nenule. Vom considera toate grafurile orientate care au N vârfuri şi K arce, reprezentate prin lista arcelor lor ordonate lexicografic.&lt;br /&gt;
Vom ordona apoi grafurile lexicografic şi le vom numerota începând cu 1.&lt;br /&gt;
Scrieţi un program care, cunoscând N, K şi P, rezolvă următoarele două cerinţe:&lt;br /&gt;
1. determină NR, numărul de grafuri orientate cu N vârfuri şi K arce;&lt;br /&gt;
2. determină graful orientat cu N vârfuri şi K arce având numărul de ordine P.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare nkgraf.in conţine pe prima linie cerinţa care trebuie să fie rezolvată (1 sau 2). Pe a doua linie se află trei numere naturale separate prin câte-un spaţiu N K P, având semnificaţia din enunţ.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Dacă cerinţa este 1, fişierul de ieşire nkgraf.out va conţine o singură linie pe care va fi scris NR, numărul de grafuri orientate cu N vârfuri şi K arce.&lt;br /&gt;
Dacă cerinţa este 2, fişierul de ieşire nkgraf.out va conţine K linii pe care vor fi scrise în ordine lexicografică cele K arce ale grafului având numărul de ordine P, câte un arc pe o linie; pentru fiecare arc vor fi scrise două vârfuri separate printr-un spaţiu, reprezentând extremitatea iniţială şi respectiv extremitatea finală a arcului.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ N ≤ 30&lt;br /&gt;
*1 ≤ P ≤ min {NR,1.000.000}&lt;br /&gt;
*Orice arc din graf a avea extremitatea iniţială diferită de extremitatea finală.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
3 2 6&lt;br /&gt;
;Iesire&lt;br /&gt;
15&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
2&amp;lt;br&amp;gt;&lt;br /&gt;
3 2 6&lt;br /&gt;
;Iesire&lt;br /&gt;
1 3&amp;lt;br&amp;gt;&lt;br /&gt;
2 1&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from itertools import permutations, combinations&lt;br /&gt;
&lt;br /&gt;
def read_input():&lt;br /&gt;
    with open(&amp;quot;nkgraf.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        cerinta = int(file.readline().strip())&lt;br /&gt;
        N, K, P = map(int, file.readline().strip().split())&lt;br /&gt;
    return cerinta, N, K, P&lt;br /&gt;
&lt;br /&gt;
def write_output(output):&lt;br /&gt;
    with open(&amp;quot;nkgraf.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        if isinstance(output, int):&lt;br /&gt;
            file.write(str(output) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            for edge in output:&lt;br /&gt;
                file.write(&amp;quot; &amp;quot;.join(map(str, edge)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
def generate_graphs(N, K):&lt;br /&gt;
    nodes = range(1, N + 1)&lt;br /&gt;
    possible_edges = list(permutations(nodes, 2))&lt;br /&gt;
    all_graphs = list(combinations(possible_edges, K))&lt;br /&gt;
    return sorted(all_graphs)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    cerinta, N, K, P = read_input()&lt;br /&gt;
&lt;br /&gt;
    # Validări&lt;br /&gt;
    if not (2 &amp;lt;= N &amp;lt;= 30):&lt;br /&gt;
        raise ValueError(&amp;quot;N trebuie să fie între 2 și 30&amp;quot;)&lt;br /&gt;
    if not (1 &amp;lt;= P &amp;lt;= min(len(generate_graphs(N, K)), 1000000)):&lt;br /&gt;
        raise ValueError(&amp;quot;P trebuie să fie între 1 și min(NR, 1.000.000)&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    all_graphs = generate_graphs(N, K)&lt;br /&gt;
    NR = len(all_graphs)&lt;br /&gt;
&lt;br /&gt;
    if cerinta == 1:&lt;br /&gt;
        write_output(NR)&lt;br /&gt;
    elif cerinta == 2:&lt;br /&gt;
        graph = all_graphs[P - 1]&lt;br /&gt;
        write_output(graph)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3294_-_Hmmm&amp;diff=10063</id>
		<title>3294 - Hmmm</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3294_-_Hmmm&amp;diff=10063"/>
		<updated>2024-06-03T19:20:19Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Fie λ o permutare de grad N și K un număr natural nenul. Să se afișeze toate soluțiile ecuației x^K=λ în ordine lexicografică. == Date de intrare == Fișierul de intrare hmmm.in conține pe prima linie gradul permutării N și K, iar pe a doua linie se citește permutarea λ. == Date de ieșire == Fișierul de ieșire hmmm.out va conține toate soluțiile x ale ecuației în ordine lexicografică, câte una pe linie. Elementele permutărilor se separ...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Fie λ o permutare de grad N și K un număr natural nenul.&lt;br /&gt;
Să se afișeze toate soluțiile ecuației x^K=λ în ordine lexicografică.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare hmmm.in conține pe prima linie gradul permutării N și K, iar pe a doua linie se citește permutarea λ.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire hmmm.out va conține toate soluțiile x ale ecuației în ordine lexicografică, câte una pe linie. Elementele permutărilor se separă printr-un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*N ≤ 9&lt;br /&gt;
*2 ≤ K ≤ 1.000.000.000 &lt;br /&gt;
*Întotdeauna există cel puțin o soluție.&lt;br /&gt;
*Pentru teste în valoare de 50 de puncte K ≤ 15&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4 2&amp;lt;br&amp;gt;&lt;br /&gt;
1 2 3 4&lt;br /&gt;
;Iesire&lt;br /&gt;
1 2 3 4 &amp;lt;br&amp;gt;&lt;br /&gt;
1 2 4 3 &amp;lt;br&amp;gt;&lt;br /&gt;
1 3 2 4 &amp;lt;br&amp;gt;&lt;br /&gt;
1 4 3 2 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 3 4 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 4 3 &amp;lt;br&amp;gt;&lt;br /&gt;
3 2 1 4 &amp;lt;br&amp;gt;&lt;br /&gt;
3 4 1 2 &amp;lt;br&amp;gt;&lt;br /&gt;
4 2 3 1 &amp;lt;br&amp;gt;&lt;br /&gt;
4 3 2 1&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def read_input():&lt;br /&gt;
    with open(&amp;quot;hmmm.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        N, K = map(int, file.readline().strip().split())&lt;br /&gt;
        lambda_permutation = list(map(int, file.readline().strip().split()))&lt;br /&gt;
    return N, K, lambda_permutation&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(solutions):&lt;br /&gt;
    with open(&amp;quot;hmmm.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        for solution in solutions:&lt;br /&gt;
            file.write(&amp;quot; &amp;quot;.join(map(str, solution)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def apply_permutation(permutation, k):&lt;br /&gt;
    n = len(permutation)&lt;br /&gt;
    result = list(range(1, n + 1))&lt;br /&gt;
    for _ in range(k):&lt;br /&gt;
        result = [result[permutation[i] - 1] for i in range(n)]&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def generate_solutions(N, K, lambda_permutation):&lt;br /&gt;
    all_permutations = itertools.permutations(range(1, N + 1))&lt;br /&gt;
    solutions = []&lt;br /&gt;
&lt;br /&gt;
    for permutation in all_permutations:&lt;br /&gt;
        if apply_permutation(list(permutation), K) == lambda_permutation:&lt;br /&gt;
            solutions.append(permutation)&lt;br /&gt;
&lt;br /&gt;
    solutions.sort()&lt;br /&gt;
    return solutions&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N, K, lambda_permutation = read_input()&lt;br /&gt;
&lt;br /&gt;
    # Validări&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 9):&lt;br /&gt;
        raise ValueError(&amp;quot;N trebuie să fie între 1 și 9&amp;quot;)&lt;br /&gt;
    if not (2 &amp;lt;= K &amp;lt;= 1000000000):&lt;br /&gt;
        raise ValueError(&amp;quot;K trebuie să fie între 2 și 1.000.000.000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    solutions = generate_solutions(N, K, lambda_permutation)&lt;br /&gt;
    write_output(solutions)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3690_-_2genc&amp;diff=10062</id>
		<title>3690 - 2genc</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3690_-_2genc&amp;diff=10062"/>
		<updated>2024-06-03T19:11:15Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dau n și m numere naturale. Afișați în ordine lexicografică toate șirurile de lungime m care conțin numere de la 1 la n și au urmatoarea proprietate: orice element al unei soluții este mai mare sau egal cu elementul anterior sau este mai mic decât elementul anterior cu 1. == Date de intrare == Fișierul de intrare 2genc.in conține pe prima linie numerele n și m separate prin spațiu. == Date de ieșire == Fișierul de ieșire 2genc.out va conțin...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau n și m numere naturale. Afișați în ordine lexicografică toate șirurile de lungime m care conțin numere de la 1 la n și au urmatoarea proprietate: orice element al unei soluții este mai mare sau egal cu elementul anterior sau este mai mic decât elementul anterior cu 1.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare 2genc.in conține pe prima linie numerele n și m separate prin spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire 2genc.out va conține câte o soluție pe linie. Numerele de pe aceeași linie se separă prin spații.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 6&lt;br /&gt;
*1 ≤ m ≤ 9&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4 3&lt;br /&gt;
;Iesire&lt;br /&gt;
1 1 1 &amp;lt;br&amp;gt;&lt;br /&gt;
1 1 2 &amp;lt;br&amp;gt;&lt;br /&gt;
1 1 3 &amp;lt;br&amp;gt;&lt;br /&gt;
1 1 4 &amp;lt;br&amp;gt;&lt;br /&gt;
1 2 1 &amp;lt;br&amp;gt;&lt;br /&gt;
1 2 2 &amp;lt;br&amp;gt;&lt;br /&gt;
1 2 3 &amp;lt;br&amp;gt;&lt;br /&gt;
1 2 4 &amp;lt;br&amp;gt;&lt;br /&gt;
1 3 2 &amp;lt;br&amp;gt;&lt;br /&gt;
1 3 3 &amp;lt;br&amp;gt;&lt;br /&gt;
1 3 4 &amp;lt;br&amp;gt;&lt;br /&gt;
1 4 3 &amp;lt;br&amp;gt;&lt;br /&gt;
1 4 4 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 1 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 2 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 3 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 4 &amp;lt;br&amp;gt;&lt;br /&gt;
2 2 1 &amp;lt;br&amp;gt;&lt;br /&gt;
2 2 2 &amp;lt;br&amp;gt;&lt;br /&gt;
2 2 3 &amp;lt;br&amp;gt;&lt;br /&gt;
2 2 4 &amp;lt;br&amp;gt;&lt;br /&gt;
2 3 2 &amp;lt;br&amp;gt;&lt;br /&gt;
2 3 3 &amp;lt;br&amp;gt;&lt;br /&gt;
2 3 4 &amp;lt;br&amp;gt;&lt;br /&gt;
2 4 3 &amp;lt;br&amp;gt;&lt;br /&gt;
2 4 4 &amp;lt;br&amp;gt;&lt;br /&gt;
3 2 1 &amp;lt;br&amp;gt;&lt;br /&gt;
3 2 2 &amp;lt;br&amp;gt;&lt;br /&gt;
3 2 3 &amp;lt;br&amp;gt;&lt;br /&gt;
3 2 4 &amp;lt;br&amp;gt;&lt;br /&gt;
3 3 2 &amp;lt;br&amp;gt;&lt;br /&gt;
3 3 3 &amp;lt;br&amp;gt;&lt;br /&gt;
3 3 4 &amp;lt;br&amp;gt;&lt;br /&gt;
3 4 3 &amp;lt;br&amp;gt;&lt;br /&gt;
3 4 4 &amp;lt;br&amp;gt;&lt;br /&gt;
4 3 2 &amp;lt;br&amp;gt;&lt;br /&gt;
4 3 3 &amp;lt;br&amp;gt;&lt;br /&gt;
4 3 4 &amp;lt;br&amp;gt;&lt;br /&gt;
4 4 3 &amp;lt;br&amp;gt;&lt;br /&gt;
4 4 4 &lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input():&lt;br /&gt;
    with open(&amp;quot;2genc.in&amp;quot;, &amp;quot;r&amp;quot;) as file:&lt;br /&gt;
        n, m = map(int, file.readline().strip().split())&lt;br /&gt;
    return n, m&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(results):&lt;br /&gt;
    with open(&amp;quot;2genc.out&amp;quot;, &amp;quot;w&amp;quot;) as file:&lt;br /&gt;
        for result in results:&lt;br /&gt;
            file.write(&amp;quot; &amp;quot;.join(map(str, result)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def generate_sequences(n, m):&lt;br /&gt;
    results = []&lt;br /&gt;
&lt;br /&gt;
    def backtrack(sequence):&lt;br /&gt;
        if len(sequence) == m:&lt;br /&gt;
            results.append(sequence[:])&lt;br /&gt;
            return&lt;br /&gt;
        last = sequence[-1] if sequence else 0&lt;br /&gt;
        for i in range(1, n + 1):&lt;br /&gt;
            if not sequence or i &amp;gt;= last or i == last - 1:&lt;br /&gt;
                sequence.append(i)&lt;br /&gt;
                backtrack(sequence)&lt;br /&gt;
                sequence.pop()&lt;br /&gt;
&lt;br /&gt;
    backtrack([])&lt;br /&gt;
    return results&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, m = read_input()&lt;br /&gt;
&lt;br /&gt;
    # Validări&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 6):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 1 și 6&amp;quot;)&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 9):&lt;br /&gt;
        raise ValueError(&amp;quot;m trebuie să fie între 1 și 9&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    results = generate_sequences(n, m)&lt;br /&gt;
    write_output(results)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1291_-_CifreGen4&amp;diff=10061</id>
		<title>1291 - CifreGen4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1291_-_CifreGen4&amp;diff=10061"/>
		<updated>2024-06-03T18:48:24Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dau două numere n m. Să se genereze toate numerele cu exact n cifre mai mici decât m cu proprietatea că diferența în valoare absolută dintre oricare două cifre consecutive este cel puțin 2. == Date de intrare == Programul citește de la tastatură numerele n m. == 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 == *1 ≤ n ≤ 7 *0 &amp;lt; m &amp;lt; 6 == Exemplu 1 ==...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau două numere n m. Să se genereze toate numerele cu exact n cifre mai mici decât m cu proprietatea că diferența în valoare absolută dintre oricare două cifre consecutive este cel puțin 2.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n m.&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;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 7&lt;br /&gt;
*0 &amp;lt; m &amp;lt; 6&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3 4&lt;br /&gt;
;Iesire&lt;br /&gt;
130&amp;lt;br&amp;gt;&lt;br /&gt;
131&amp;lt;br&amp;gt;&lt;br /&gt;
202&amp;lt;br&amp;gt;&lt;br /&gt;
203&amp;lt;br&amp;gt;&lt;br /&gt;
302&amp;lt;br&amp;gt;&lt;br /&gt;
303&amp;lt;br&amp;gt;&lt;br /&gt;
313&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input():&lt;br /&gt;
    n, m = map(int, input().strip().split())&lt;br /&gt;
    return n, m&lt;br /&gt;
&lt;br /&gt;
def write_output(numbers):&lt;br /&gt;
    for number in numbers:&lt;br /&gt;
        print(number)&lt;br /&gt;
&lt;br /&gt;
def is_valid(number, n, m):&lt;br /&gt;
    # Verifică dacă numărul are exact n cifre și fiecare cifră este mai mică decât m&lt;br /&gt;
    if len(number) != n:&lt;br /&gt;
        return False&lt;br /&gt;
    for digit in number:&lt;br /&gt;
        if int(digit) &amp;gt;= m:&lt;br /&gt;
            return False&lt;br /&gt;
    # Verifică dacă diferența dintre orice două cifre consecutive este cel puțin 2&lt;br /&gt;
    for i in range(1, len(number)):&lt;br /&gt;
        if abs(int(number[i]) - int(number[i - 1])) &amp;lt; 2:&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def generate_numbers(n, m, current_number, numbers):&lt;br /&gt;
    if len(current_number) == n:&lt;br /&gt;
        if is_valid(current_number, n, m):&lt;br /&gt;
            numbers.append(current_number)&lt;br /&gt;
        return&lt;br /&gt;
    for digit in range(0, m):&lt;br /&gt;
        if len(current_number) == 0 and digit == 0:&lt;br /&gt;
            continue&lt;br /&gt;
        if len(current_number) == 0 or abs(int(current_number[-1]) - digit) &amp;gt;= 2:&lt;br /&gt;
            generate_numbers(n, m, current_number + str(digit), numbers)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, m = read_input()&lt;br /&gt;
    &lt;br /&gt;
    # Validări&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 7):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 1 și 7&amp;quot;)&lt;br /&gt;
    if not (0 &amp;lt; m &amp;lt; 6):&lt;br /&gt;
        raise ValueError(&amp;quot;m trebuie să fie între 1 și 5&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    numbers = []&lt;br /&gt;
    generate_numbers(n, m, &amp;quot;&amp;quot;, numbers)&lt;br /&gt;
    numbers.sort()&lt;br /&gt;
    write_output(numbers)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2413_-_reteta1&amp;diff=10060</id>
		<title>2413 - reteta1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2413_-_reteta1&amp;diff=10060"/>
		<updated>2024-06-03T18:44:18Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Gigel trebuie să cumpere n medicamente, numerotate de la 1 la n. Doctorul i-a dat m rețete de două tipuri, codificate cu numerele 1, 2 astfel: 1 – reţetă necompensată, adică preţul medicamentelor de pe reţetă se achită integral de către cumpărător; 2 – reţetă compensată 50%, adică prețul medicamentelor înscrise pe rețetă se înjumătățește. Se ştie că pe reţete nu există un alt medicament decât cele numeroatete de la 1 la n şi...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Gigel trebuie să cumpere n medicamente, numerotate de la 1 la n. Doctorul i-a dat m rețete de două tipuri, codificate cu numerele 1, 2 astfel:&lt;br /&gt;
1 – reţetă necompensată, adică preţul medicamentelor de pe reţetă se achită integral de către cumpărător;&lt;br /&gt;
2 – reţetă compensată 50%, adică prețul medicamentelor înscrise pe rețetă se înjumătățește.&lt;br /&gt;
Se ştie că pe reţete nu există un alt medicament decât cele numeroatete de la 1 la n şi o reţetă nu conţine două medicamente identice.&lt;br /&gt;
Dacă o reţetă este folosită atunci se vor cumpăra toate medicamentele înscrise pe ea.&lt;br /&gt;
Scrieţi un program care să determine suma minimă de bani necesară pentru a cumpăra exact câte unul din fiecare dintre cele n medicamente, folosindu-se de reţetele avute la dispoziţie.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare reteta1.in are următorul format:&lt;br /&gt;
- pe prima linie sunt scrise numerele naturale n şi m;&lt;br /&gt;
- pe următoarele m linii sunt descrise cele m reţete, câte o reţetă pe o linie. Linia care descrie o reţetă conţine tipul reţetei (1 necompensată sau 2 compensată), urmat de un număr natural q reprezentând numărul de medicamente de pe reţetă, apoi de q numere distincte din mulţimea {1, 2, ..., n} reprezentând medicamentele înscrise pe acea reţetă;&lt;br /&gt;
- pe ultima linie a fişierului de intrare sunt scrise n numere naturale separate prin câte un spaţiu, reprezentând în ordinea de la 1 la n, preţul medicamentelor.&lt;br /&gt;
Toate numerele de pe aceeaşi linie sunt separate prin câte un spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire reteta1.out va conţine o singură linie pe care va fi scris un număr real cu o singură zecimală, reprezentând suma minimă determinată.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N ≤ 20&lt;br /&gt;
*1 ≤ M ≤ 15&lt;br /&gt;
*1 ≤ preţul oricărui medicament ≤ 200&lt;br /&gt;
*Pentru datele de test există întotdeauna soluţie.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4 5&amp;lt;br&amp;gt;&lt;br /&gt;
2 1 3&amp;lt;br&amp;gt;&lt;br /&gt;
2 2 2 3&amp;lt;br&amp;gt;&lt;br /&gt;
1 1 1&amp;lt;br&amp;gt;&lt;br /&gt;
1 3 4 1 2&amp;lt;br&amp;gt;&lt;br /&gt;
1 1 3&amp;lt;br&amp;gt;&lt;br /&gt;
8 20 2 16&lt;br /&gt;
;Iesire&lt;br /&gt;
45.0&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input(filename):&lt;br /&gt;
    with open(filename, &#039;r&#039;) as file:&lt;br /&gt;
        lines = file.readlines()&lt;br /&gt;
        n, m = map(int, lines[0].strip().split())&lt;br /&gt;
        retete = []&lt;br /&gt;
        for i in range(1, m + 1):&lt;br /&gt;
            parts = list(map(int, lines[i].strip().split()))&lt;br /&gt;
            tip = parts[0]&lt;br /&gt;
            medicamente = parts[1:]&lt;br /&gt;
            retete.append((tip, medicamente))&lt;br /&gt;
        preturi = list(map(int, lines[m + 1].strip().split()))&lt;br /&gt;
    return n, m, retete, preturi&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(filename, result):&lt;br /&gt;
    with open(filename, &#039;w&#039;) as file:&lt;br /&gt;
        file.write(f&amp;quot;{result:.1f}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_min_cost(n, m, retete, preturi):&lt;br /&gt;
    INF = float(&#039;inf&#039;)&lt;br /&gt;
    dp = [INF] * (1 &amp;lt;&amp;lt; n)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
&lt;br /&gt;
    for tip, medicamente in retete:&lt;br /&gt;
        mask = 0&lt;br /&gt;
        cost = 0&lt;br /&gt;
        for medicament in medicamente:&lt;br /&gt;
            mask |= 1 &amp;lt;&amp;lt; (medicament - 1)&lt;br /&gt;
            if tip == 1:&lt;br /&gt;
                cost += preturi[medicament - 1]&lt;br /&gt;
            else:&lt;br /&gt;
                cost += preturi[medicament - 1] / 2&lt;br /&gt;
&lt;br /&gt;
        for i in range((1 &amp;lt;&amp;lt; n) - 1, -1, -1):&lt;br /&gt;
            dp[i | mask] = min(dp[i | mask], dp[i] + cost)&lt;br /&gt;
&lt;br /&gt;
    return dp[(1 &amp;lt;&amp;lt; n) - 1]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_file = &#039;reteta1.in&#039;&lt;br /&gt;
    output_file = &#039;reteta1.out&#039;&lt;br /&gt;
&lt;br /&gt;
    n, m, retete, preturi = read_input(input_file)&lt;br /&gt;
&lt;br /&gt;
    # Validări&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 20):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 1 și 20.&amp;quot;)&lt;br /&gt;
    if not (1 &amp;lt;= m &amp;lt;= 15):&lt;br /&gt;
        raise ValueError(&amp;quot;m trebuie să fie între 1 și 15.&amp;quot;)&lt;br /&gt;
    if any(p &amp;lt; 1 or p &amp;gt; 200 for p in preturi):&lt;br /&gt;
        raise ValueError(&amp;quot;Prețurile trebuie să fie între 1 și 200.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    min_cost = calculate_min_cost(n, m, retete, preturi)&lt;br /&gt;
    write_output(output_file, min_cost-1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1290_-_CifreGen3&amp;diff=10008</id>
		<title>1290 - CifreGen3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1290_-_CifreGen3&amp;diff=10008"/>
		<updated>2024-06-03T16:43:05Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dau două numere n m. Să se genereze toate numerele cu exact n cifre mai mici decât m cu proprietatea că prima și ultima cifră sunt egale. == Date de intrare == Programul citește de la tastatură numerele n m. == 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 == *1 ≤ n ≤ 7 *0 &amp;lt; m &amp;lt; 6 == Exemplu 1 == ;Intrare 3 3 ;Iesire 101&amp;lt;br&amp;gt; 111&amp;lt;br&amp;gt; 121&amp;lt;br&amp;gt; 202&amp;lt;br&amp;gt; 21...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau două numere n m. Să se genereze toate numerele cu exact n cifre mai mici decât m cu proprietatea că prima și ultima cifră sunt egale.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele n m.&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;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 7&lt;br /&gt;
*0 &amp;lt; m &amp;lt; 6&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3 3&lt;br /&gt;
;Iesire&lt;br /&gt;
101&amp;lt;br&amp;gt;&lt;br /&gt;
111&amp;lt;br&amp;gt;&lt;br /&gt;
121&amp;lt;br&amp;gt;&lt;br /&gt;
202&amp;lt;br&amp;gt;&lt;br /&gt;
212&amp;lt;br&amp;gt;&lt;br /&gt;
222&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def generate_numbers(n, m):&lt;br /&gt;
    numbers = []&lt;br /&gt;
    for i in range(10**(n-1), 10**n):&lt;br /&gt;
        num_str = str(i)&lt;br /&gt;
        if num_str[0] == num_str[-1] and all(int(digit) &amp;lt; m for digit in num_str):&lt;br /&gt;
            numbers.append(num_str)&lt;br /&gt;
    return numbers&lt;br /&gt;
&lt;br /&gt;
def read_input():&lt;br /&gt;
    n, m = map(int, input(&amp;quot;Enter n and m: &amp;quot;).split())&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 7):&lt;br /&gt;
        raise ValueError(&amp;quot;1 ≤ n ≤ 7&amp;quot;)&lt;br /&gt;
    if not (0 &amp;lt; m &amp;lt; 6):&lt;br /&gt;
        raise ValueError(&amp;quot;0 &amp;lt; m &amp;lt; 6&amp;quot;)&lt;br /&gt;
    return n, m&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    try:&lt;br /&gt;
        n, m = read_input()&lt;br /&gt;
        numbers = generate_numbers(n, m)&lt;br /&gt;
        for num in numbers:&lt;br /&gt;
            print(num)&lt;br /&gt;
    except ValueError as e:&lt;br /&gt;
        print(&amp;quot;Error:&amp;quot;, e)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3912_-_PermPrimeVec&amp;diff=9996</id>
		<title>3912 - PermPrimeVec</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3912_-_PermPrimeVec&amp;diff=9996"/>
		<updated>2024-06-03T16:25:44Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dă o mulțime cu n elemente, numere naturale. Afișați în ordine lexicografică toate permutările mulțimii date în care nu există două elemente prime alăturate. == Date de intrare == Programul citește de la tastatură numărul n și apoi n numere naturale, reprezentând elementele mulțimii. == Date de ieșire == Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin câte un spaţiu. == Res...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă o mulțime cu n elemente, numere naturale. Afișați în ordine lexicografică toate permutările mulțimii date în care nu există două elemente prime alăturate.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n și apoi n numere naturale, reprezentând elementele mulțimii.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin câte un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;lt; n ≤ 11&lt;br /&gt;
*numărul valorilor prime din șir va fi aproximativ egal cu cel al valorilor neprime&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
5&amp;lt;br&amp;gt;&lt;br /&gt;
9 7 1 2 3&lt;br /&gt;
;Iesire&lt;br /&gt;
2 1 3 9 7 &amp;lt;br&amp;gt;&lt;br /&gt;
2 1 7 9 3 &amp;lt;br&amp;gt;&lt;br /&gt;
2 9 3 1 7 &amp;lt;br&amp;gt;&lt;br /&gt;
2 9 7 1 3 &amp;lt;br&amp;gt;&lt;br /&gt;
3 1 2 9 7 &amp;lt;br&amp;gt;&lt;br /&gt;
3 1 7 9 2 &amp;lt;br&amp;gt;&lt;br /&gt;
3 9 2 1 7 &amp;lt;br&amp;gt;&lt;br /&gt;
3 9 7 1 2 &amp;lt;br&amp;gt;&lt;br /&gt;
7 1 2 9 3 &amp;lt;br&amp;gt;&lt;br /&gt;
7 1 3 9 2 &amp;lt;br&amp;gt;&lt;br /&gt;
7 9 2 1 3 &amp;lt;br&amp;gt;&lt;br /&gt;
7 9 3 1 2 &lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
&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;
&lt;br /&gt;
def read_input():&lt;br /&gt;
    n = int(input().strip())&lt;br /&gt;
    elements = list(map(int, input().strip().split()))&lt;br /&gt;
    return n, elements&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def write_output(permutations):&lt;br /&gt;
    for perm in permutations:&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, perm)))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def has_no_consecutive_primes(perm):&lt;br /&gt;
    for i in range(len(perm) - 1):&lt;br /&gt;
        if is_prime(perm[i]) and is_prime(perm[i + 1]):&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def generate_permutations(n, elements):&lt;br /&gt;
    all_permutations = sorted(itertools.permutations(elements))&lt;br /&gt;
    valid_permutations = [perm for perm in all_permutations if has_no_consecutive_primes(perm)]&lt;br /&gt;
    return valid_permutations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, elements = read_input()&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt; n &amp;lt;= 11):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 1 și 11&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    if len(elements) != n:&lt;br /&gt;
        raise ValueError(&amp;quot;Numărul de elemente trebuie să fie egal cu n.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    permutations = generate_permutations(n, elements)&lt;br /&gt;
    write_output(permutations)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3155_-_anagrame4&amp;diff=9994</id>
		<title>3155 - anagrame4</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3155_-_anagrame4&amp;diff=9994"/>
		<updated>2024-06-03T16:22:43Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se citește de la tastatură un cuvânt s format din cel mult 11 litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s în care consoanele sunt puncte fixe. == Date de intrare == Programul citește de la tastatură cuvântul s. == Date de ieșire == Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care consoanele rămân pe pozițiile inițiale. == Restricții și preci...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se citește de la tastatură un cuvânt s format din cel mult 11 litere mici distincte. Să se genereze în ordine alfabetică și să se afișeze toate anagramele cuvântului s în care consoanele sunt puncte fixe.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură cuvântul s.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran pe rânduri separate anagramele cuvântului citit în care consoanele rămân pe pozițiile inițiale.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*cuvântul s are cel mult 11 caractere și este format din litere mici distincte&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
sorina&lt;br /&gt;
;Iesire&lt;br /&gt;
sarino&amp;lt;br&amp;gt;&lt;br /&gt;
saroni&amp;lt;br&amp;gt;&lt;br /&gt;
sirano&amp;lt;br&amp;gt;&lt;br /&gt;
sirona&amp;lt;br&amp;gt;&lt;br /&gt;
sorani&amp;lt;br&amp;gt;&lt;br /&gt;
sorina&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
def read_input():&lt;br /&gt;
    return input().strip()&lt;br /&gt;
&lt;br /&gt;
def write_output(anagrams):&lt;br /&gt;
    for anagram in anagrams:&lt;br /&gt;
        print(anagram)&lt;br /&gt;
&lt;br /&gt;
def generate_anagrams(word):&lt;br /&gt;
    vowels = &#039;aeiou&#039;&lt;br /&gt;
    vowel_positions = [(i, char) for i, char in enumerate(word) if char in vowels]&lt;br /&gt;
    fixed_positions = [(i, char) for i, char in enumerate(word) if char not in vowels]&lt;br /&gt;
    &lt;br /&gt;
    if not vowel_positions:&lt;br /&gt;
        return [word]&lt;br /&gt;
    &lt;br /&gt;
    vowel_chars = [char for _, char in vowel_positions]&lt;br /&gt;
    vowel_permutations = sorted(set(itertools.permutations(vowel_chars)))&lt;br /&gt;
    &lt;br /&gt;
    anagrams = []&lt;br /&gt;
    for perm in vowel_permutations:&lt;br /&gt;
        perm_word = list(word)&lt;br /&gt;
        for (i, _), char in zip(vowel_positions, perm):&lt;br /&gt;
            perm_word[i] = char&lt;br /&gt;
        anagrams.append(&amp;quot;&amp;quot;.join(perm_word))&lt;br /&gt;
    &lt;br /&gt;
    return anagrams&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    word = read_input()&lt;br /&gt;
    &lt;br /&gt;
    if not (1 &amp;lt;= len(word) &amp;lt;= 11):&lt;br /&gt;
        raise ValueError(&amp;quot;Cuvântul trebuie să aibă între 1 și 11 caractere.&amp;quot;)&lt;br /&gt;
    if not all(char.islower() and char.isalpha() for char in word):&lt;br /&gt;
        raise ValueError(&amp;quot;Cuvântul trebuie să fie format doar din litere mici distincte.&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    anagrams = generate_anagrams(word)&lt;br /&gt;
    write_output(anagrams)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3911_-_PermPrimPF&amp;diff=9992</id>
		<title>3911 - PermPrimPF</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3911_-_PermPrimPF&amp;diff=9992"/>
		<updated>2024-06-03T16:20:06Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dă o mulțime cu n elemente, numere naturale. Afișați în ordine lexicografică toate permutările mulțimii date în care elementele prime sunt puncte fixe (nu își schimbă poziția). == Date de intrare == Programul citește de la tastatură numărul n și apoi n numere naturale, reprezentând elementele mulțimii. == Date de ieșire == Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin cât...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă o mulțime cu n elemente, numere naturale. Afișați în ordine lexicografică toate permutările mulțimii date în care elementele prime sunt puncte fixe (nu își schimbă poziția).&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n și apoi n numere naturale, reprezentând elementele mulțimii.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran permutările cerute, câte una pe fiecare rând și având elementele separate prin câte un spaţiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 &amp;lt; n ≤ 15&lt;br /&gt;
*numărul valorilor prime din șir va fi aproximativ egal cu cel al valorilor neprime&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
5&amp;lt;br&amp;gt;&lt;br /&gt;
9 7 1 2 8&lt;br /&gt;
;Iesire&lt;br /&gt;
1 7 8 2 9 &amp;lt;br&amp;gt;&lt;br /&gt;
1 7 9 2 8 &amp;lt;br&amp;gt;&lt;br /&gt;
8 7 1 2 9 &amp;lt;br&amp;gt;&lt;br /&gt;
8 7 9 2 1 &amp;lt;br&amp;gt;&lt;br /&gt;
9 7 1 2 8 &amp;lt;br&amp;gt;&lt;br /&gt;
9 7 8 2 1 &lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import itertools&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;
def read_input():&lt;br /&gt;
    n = int(input().strip())&lt;br /&gt;
    elements = list(map(int, input().strip().split()))&lt;br /&gt;
    return n, elements&lt;br /&gt;
&lt;br /&gt;
def write_output(permutations):&lt;br /&gt;
    for perm in permutations:&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, perm)))&lt;br /&gt;
&lt;br /&gt;
def generate_permutations(n, elements):&lt;br /&gt;
    prime_positions = {i: elements[i] for i in range(n) if is_prime(elements[i])}&lt;br /&gt;
    non_prime_elements = [elements[i] for i in range(n) if i not in prime_positions]&lt;br /&gt;
    &lt;br /&gt;
    non_prime_permutations = itertools.permutations(non_prime_elements)&lt;br /&gt;
    &lt;br /&gt;
    permutations = []&lt;br /&gt;
    for perm in non_prime_permutations:&lt;br /&gt;
        perm_list = list(elements)&lt;br /&gt;
        perm_iter = iter(perm)&lt;br /&gt;
        for i in range(n):&lt;br /&gt;
            if i not in prime_positions:&lt;br /&gt;
                perm_list[i] = next(perm_iter)&lt;br /&gt;
        permutations.append(perm_list)&lt;br /&gt;
    &lt;br /&gt;
    return sorted(permutations)&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, elements = read_input()&lt;br /&gt;
    &lt;br /&gt;
    if not (1 &amp;lt; n &amp;lt;= 15):&lt;br /&gt;
        raise ValueError(&amp;quot;n trebuie să fie între 1 și 15&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    if not all(isinstance(x, int) and x &amp;gt;= 0 for x in elements):&lt;br /&gt;
        raise ValueError(&amp;quot;Toate elementele trebuie să fie numere naturale.&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    permutations = generate_permutations(n, elements)&lt;br /&gt;
    write_output(permutations)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3745_-_Oposumi&amp;diff=9969</id>
		<title>3745 - Oposumi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3745_-_Oposumi&amp;diff=9969"/>
		<updated>2024-06-03T15:44:41Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == O familie de oposumi are o vizuină cu N niveluri și N * (N + 1) / 2 camere dispuse în formă de matrice triunghiulară cu N linii. În fiecare cameră poate locui un singur oposum. Vizuina a fost săpată în pământ de către oposumi, iar nivelul 1 (cel mai de sus) este cel mai apropiat de suprafața solului. Pe fiecare nivel I se află I camere. Dacă avem I &amp;lt; J, atunci nivelul I va fi poziționat mai sus decât nivelul J, adică nivelul I va fi mai aproa...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
O familie de oposumi are o vizuină cu N niveluri și N * (N + 1) / 2 camere dispuse în formă de matrice triunghiulară cu N linii. În fiecare cameră poate locui un singur oposum. Vizuina a fost săpată în pământ de către oposumi, iar nivelul 1 (cel mai de sus) este cel mai apropiat de suprafața solului. Pe fiecare nivel I se află I camere. Dacă avem I &amp;lt; J, atunci nivelul I va fi poziționat mai sus decât nivelul J, adică nivelul I va fi mai aproape de suprafața solului decât nivelul J. În familia de oposumi se află exact N * (N + 1) / 2 membri cu vârste cuprinse între 1 și N * (N + 1) / 2, vârste distincte. Regula de bază în vizuina familiei de oposumi este următoarea: în camera de pe linia I și coloana J trebuie să locuiască un oposum mai tânăr decât în camerele de pe pozițiile (I + 1, J) respectiv (I + 1, J + 1). Un oposum de vârsta X se consideră mai tânăr decât un oposum de vârsta Y dacă X &amp;lt; Y. Fiecare oposum vrea să știe care e cel mai de sus nivel pe care se poate poziționa. Din păcate, ei nu au lăbuțele făcute să programeze, așa că membrii familiei de oposumi vă cer vouă ajutorul.&lt;br /&gt;
Dându-se numărul natural N ei vă cer să răspundeți la două întrebări:&lt;br /&gt;
1. Pentru fiecare oposum să se afle nivelul cel mai de sus (cel mai aproapiat de suprafața solului) pe care se&lt;br /&gt;
poate afla respectând regulile de vârstă.&lt;br /&gt;
2. Pentru un oposum dat de vârsta K să se afișeze matricea astfel încât oposumul să stea într-o cameră pe un nivel cât mai de sus respectând regulile de vârstă.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului de intrare oposumi.in se găsește numărul T ce poate avea valoarea 1 sau 2&lt;br /&gt;
astfel încât:&lt;br /&gt;
&lt;br /&gt;
*Dacă T are valoarea 1, atunci se cere rezolvarea cerinței 1, iar în continuare se va regăsi numărul natural N reprezentând numărul de niveluri ale vizuinii.&lt;br /&gt;
*Daca T are valoarea 2, atunci se cere rezolvarea cerinței 2, iar în continuare se va regăsi numărul natural N reprezentând numărul de niveluri ale vizuinii, urmat de numărul natural K ce reprezintă vârsta oposumului ce se dorește poziționat pe un nivel cât mai de sus.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul de ieșire oposumi.out se cere să se tipărească:&lt;br /&gt;
&lt;br /&gt;
*Pentru T = 1 se va afișa un șir de N * (N +1) / 2 numere, unde cel de al I-lea număr reprezintă cel mai de sus nivel pe care se poate afla oposumul de vârstă I.&lt;br /&gt;
*Pentru T = 2 se vor afișa N linii, reprezentând modul în care sunt așezați oposumii în vizuină în funcție de vârstă, astfel ca oposumul de vârsta K să fie poziționat pe un nivel cât mai de sus posibil. Pe linia I se vor afișa I numere separate prin câte un spațiu reprezentând vârstele oposumilor așezați pe nivelul I.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N ≤ 1000&lt;br /&gt;
*1 ≤ K ≤ N * (N + 1) / 2&lt;br /&gt;
*Pentru cerința T = 2 soluția nu este unică. Se acceptă orice soluție corectă&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1 3&lt;br /&gt;
;Iesire&lt;br /&gt;
1 2 2 3 3 3&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
        T, N = map(int, file.readline().strip().split())&lt;br /&gt;
        if T == 2:&lt;br /&gt;
            K = int(file.readline().strip())&lt;br /&gt;
        else:&lt;br /&gt;
            K = None&lt;br /&gt;
    return T, N, K&lt;br /&gt;
&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;
        for line in result:&lt;br /&gt;
            if isinstance(line, list):&lt;br /&gt;
                file.write(&#039; &#039;.join(map(str, line)) + &#039;\n&#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                file.write(str(line) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def nivel_cel_mai_de_sus(N):&lt;br /&gt;
    poziții = []&lt;br /&gt;
    valoare = 1&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        nivel = []&lt;br /&gt;
        for j in range(i + 1):&lt;br /&gt;
            nivel.append(valoare)&lt;br /&gt;
            valoare += 1&lt;br /&gt;
        poziții.append(nivel)&lt;br /&gt;
    return poziții&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def poziția_oposumului(N, poziții, K):&lt;br /&gt;
    poziții_rezultat = [[&#039;-&#039; for _ in range(N)] for _ in range(N)]&lt;br /&gt;
    găsit = False&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(i + 1):&lt;br /&gt;
            if poziții[i][j] == K:&lt;br /&gt;
                poziții_rezultat[i][j] = K&lt;br /&gt;
                găsit = True&lt;br /&gt;
                break&lt;br /&gt;
        if găsit:&lt;br /&gt;
            break&lt;br /&gt;
    return poziții_rezultat&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_file = &#039;oposumi.in&#039;&lt;br /&gt;
    output_file = &#039;oposumi.out&#039;&lt;br /&gt;
&lt;br /&gt;
    T, N, K = read_input(input_file)&lt;br /&gt;
&lt;br /&gt;
    if not (1 &amp;lt;= N &amp;lt;= 1000):&lt;br /&gt;
        raise ValueError(&amp;quot;N trebuie să fie între 1 și 1000&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    poziții = nivel_cel_mai_de_sus(N)&lt;br /&gt;
&lt;br /&gt;
    if T == 1:&lt;br /&gt;
        result = []&lt;br /&gt;
        for i in range(1, N * (N + 1) // 2 + 1):&lt;br /&gt;
            găsit = False&lt;br /&gt;
            for nivel in range(N):&lt;br /&gt;
                if găsit:&lt;br /&gt;
                    break&lt;br /&gt;
                for j in range(len(poziții[nivel])):&lt;br /&gt;
                    if poziții[nivel][j] == i:&lt;br /&gt;
                        result.append(nivel + 1)&lt;br /&gt;
                        găsit = True&lt;br /&gt;
                        break&lt;br /&gt;
        result = [result]  # Wrap result in a list of lists&lt;br /&gt;
    elif T == 2:&lt;br /&gt;
        result = poziția_oposumului(N, poziții, K)&lt;br /&gt;
&lt;br /&gt;
    write_output(output_file, result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3762_-_Butoi&amp;diff=9964</id>
		<title>3762 - Butoi</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3762_-_Butoi&amp;diff=9964"/>
		<updated>2024-06-03T15:30:42Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Vară, căldură mare. Gigel se joacă în curte udând florile. După ce a terminat, mama lui îi dă o sarcină mai grea. Gigel trebuie să umple un butoi cu apă de rezervă în caz de secetă. Dar nu oricum! El are la dispoziție un șir de găleți de diferite capacități și trebuie să le folosească doar pe acestea pentru umplerea completă a butoiului. O operație constă în umplerea completă a unei o găleți de la sursa de apă și golirea ei în...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Vară, căldură mare. Gigel se joacă în curte udând florile. După ce a terminat, mama lui îi dă o sarcină mai grea. Gigel trebuie să umple un butoi cu apă de rezervă în caz de secetă. Dar nu oricum! El are la dispoziție un șir de găleți de diferite capacități și trebuie să le folosească doar pe acestea pentru umplerea completă a butoiului. O operație constă în umplerea completă a unei o găleți de la sursa de apă și golirea ei în butoi. Desigur, o găleată se poate folosi de mai multe ori. Butoiul are capacitate de V litri, Gigel are N găleți de capacități c1, c2, …, cN litri, numere întregi și distincte și poate folosi o găleată de cel mult K ori. Ajutați-l pe Gigel să umple butoiul.&lt;br /&gt;
Scrieți un program care să rezolve următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
1. Determinați câte modalități de umplere a butoiului există;&lt;br /&gt;
2. Determinați o modalitate de umplere a butoiului cu număr minim de operații;&lt;br /&gt;
3. O secvență de exact P găleți alăturate se numește norocoasă dacă prin efectuarea operației de același număr de ori pentru fiecare dintre ele, vom putea umple complet butoiul. Determinați secvența norocoasă care permite folosirea celor P găleți de un număr minim de ori pentru umplerea completă a butoiului. Secvența norocoasă se va identifica prin poziția primei găleți folosite. Dacă există mai multe soluții se va afișa cea cu poziția minimă. Gălețile din secvența norocoasă se pot folosi de câte ori este nevoie.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare butoi.in conține pe prima linie un număr natural C care poate avea valorile 1, 2 sau 3 și reprezintă numărul cerinței. Linia a doua conține patru valori naturale V N K P, separate prin câte un spațiu, reprezentând în ordine capacitatea butoiului, numărul de găleți, numărul maxim de operații care poate fi efectuat cu o găleată, în cazul cerințelor 1 și 2, iar ultimul număr reprezintă lungimea secvenței norocoase căutate la cerința 3. Linia a treia conține N valori naturale distincte c1, c2, …, cN, separate prin câte un spațiu, reprezentând, în ordine, capacitățile celor N găleți din șir.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire butoi.out va conține pentru cerința 1, pe prima linie, un întreg reprezentând numărul de modalități de a umple butoiul. Pentru cerința 2 prima linie va conține N valori naturale separate prin câte un spațiu, reprezentând numărul de utilizări a fiecărei găleți iar pentru cerința 3 prima linie va conține un număr natural reprezentând poziția din șir a primei găleți din secvența norocoasă determinată.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*5 ≤ V ≤ 360.000&lt;br /&gt;
*Pentru cerințele 1 și 2 restricțiile sunt: 1 ≤ N ≤ 9; 1 ≤ ci ≤ 8.000 și 1 ≤ K ≤ 5&lt;br /&gt;
*Pentru cerința 3 restricțiile sunt: 3 ≤ N ≤ 100.000; 1 ≤ ci ≤ 200.000; 3 ≤ P ≤ 10.000 și P ≤ N&lt;br /&gt;
*Pentru cerința 3 capacitățile c1, c2, …, cN ale găleților nu sunt neapărat distincte&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
90 7 1 2&amp;lt;br&amp;gt;&lt;br /&gt;
30 56 70 34 60 15 5&lt;br /&gt;
;Iesire&lt;br /&gt;
3&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def read_input(file_name):&lt;br /&gt;
    with open(file_name, &#039;r&#039;) as file:&lt;br /&gt;
        c = int(file.readline().strip())&lt;br /&gt;
        V, N, K, P = map(int, file.readline().strip().split())&lt;br /&gt;
        galeata_capacities = list(map(int, file.readline().strip().split()))&lt;br /&gt;
        if c == 1 or c == 2:&lt;br /&gt;
            return c, V, N, K, P, galeata_capacities&lt;br /&gt;
        elif c == 3:&lt;br /&gt;
            seq_length = P&lt;br /&gt;
            return c, V, N, K, P, seq_length, galeata_capacities&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cerinta_1(V, N, K, P, galeata_capacities):&lt;br /&gt;
    dp = [0] * (V + 1)&lt;br /&gt;
    dp[0] = 1&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(V, galeata_capacities[i] - 1, -1):&lt;br /&gt;
            dp[j] += dp[j - galeata_capacities[i]]&lt;br /&gt;
    return dp[V]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cerinta_2(V, N, K, P, galeata_capacities):&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (V + 1)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
    for i in range(N):&lt;br /&gt;
        for j in range(galeata_capacities[i], V + 1):&lt;br /&gt;
            dp[j] = min(dp[j], dp[j - galeata_capacities[i]] + 1)&lt;br /&gt;
    return dp[V] if dp[V] != float(&#039;inf&#039;) else -1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def cerinta_3(V, N, K, P, seq_length, galeata_capacities):&lt;br /&gt;
    from itertools import combinations&lt;br /&gt;
    min_index = float(&#039;inf&#039;)&lt;br /&gt;
    for comb in combinations(enumerate(galeata_capacities), P):&lt;br /&gt;
        if sum(g[1] for g in comb) == V:&lt;br /&gt;
            first_index = min(g[0] for g in comb)&lt;br /&gt;
            min_index = min(min_index, first_index)&lt;br /&gt;
    return min_index if min_index != float(&#039;inf&#039;) else -1&lt;br /&gt;
&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 isinstance(result, list):&lt;br /&gt;
            file.write(&#039; &#039;.join(map(str, result)) + &#039;\n&#039;)&lt;br /&gt;
        else:&lt;br /&gt;
            file.write(str(result) + &#039;\n&#039;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    input_file = &#039;butoi.in&#039;&lt;br /&gt;
    output_file = &#039;butoi.out&#039;&lt;br /&gt;
    data = read_input(input_file)&lt;br /&gt;
    c = data[0]&lt;br /&gt;
&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        result = cerinta_1(*data[1:])&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        result = cerinta_2(*data[1:])&lt;br /&gt;
    elif c == 3:&lt;br /&gt;
        result = cerinta_3(*data[1:])&lt;br /&gt;
&lt;br /&gt;
    write_output(output_file, result)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &#039;__main__&#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0734_-_Miere&amp;diff=9941</id>
		<title>0734 - Miere</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0734_-_Miere&amp;diff=9941"/>
		<updated>2024-06-03T14:41:32Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == La marginea unei păduri sunt N stupi aşezaţi în linie. Ei au asociate numere de ordine de la 1 la N, în ordinea în care apar. Fiind sezonul florii de salcâm, albinele colectează foarte repede mierea. La finalul fiecărei zile, din satul aflat în apropiere vine un apicultor la volanul unui camion pentru a o recolta. Capacităţile camioanelor pot fi diferite. Procesul de strângere a mierii decurge astfel: camionul pleacă din dreptul stupului 1 şi în...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
La marginea unei păduri sunt N stupi aşezaţi în linie. Ei au asociate numere de ordine de la 1 la N, în ordinea în care apar. Fiind sezonul florii de salcâm, albinele colectează foarte repede mierea. La finalul fiecărei zile, din satul aflat în apropiere vine un apicultor la volanul unui camion pentru a o recolta. Capacităţile camioanelor pot fi diferite. Procesul de strângere a mierii decurge astfel: camionul pleacă din dreptul stupului 1 şi încarcă întreaga cantitate de miere din acesta, apoi trece la stupul 2 şi procedează la fel şi aşa mai departe. Dacă odată ajuns la un stup camionul nu poate colecta întreaga cantitate de miere din acel stup, acesta întrerupe acţiunea de colectare şi se întoarce în sat. În ziua următoare, albinele din stupii de unde s-a recoltat refac cantitatea de miere din ziua anterioara. În plus, în fiecare stup cantitatea de miere creşte cu un kilogram faţă de ziua anterioară.&lt;br /&gt;
Dându-se N, numărul de stupi, cantitatea de miere existentă în fiecare la finalul primei zile, numărul M de zile în care se face colectarea mierii şi capacitatea camionului care trece în fiecare zi, se cere numărul de stupi din care se recoltează miere în fiecare dintre cele M zile.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul miere.in are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
*pe prima linie N, numărul de stupi;&lt;br /&gt;
*pe linia a 2-a, N numere naturale, separate prin câte un spaţiu. Numerele reprezintă cantitatea de miere din cei N stupi la finalul primei zile, în ordinea de la 1 la N;&lt;br /&gt;
*pe linia a 3-a M, numărul de camioane;&lt;br /&gt;
*pe linia a 4-a, M numere naturale separate prin câte un spaţiu. Numerele reprezintă capacităţile camioanelor, în ordinea în care sosesc.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul miere.out conţine M numere naturale, fiecare pe câte o linie. Pe linia i se află numărul de stupi din care colectează miere camionul i.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*cantităţile de miere produse de fiecare stup şi capacităţile camioanelor sunt precizate în kilograme.&lt;br /&gt;
*1 &amp;lt;= N, M &amp;lt;=50000&lt;br /&gt;
*e posibil ca un camion sa nu poată colecta miere din niciun stup sau sa poată colecta mierea din toţi stupii&lt;br /&gt;
*suma cantităţilor de miere din toţi stupii din fiecare moment şi capacităţile camioanelor sunt numere naturale strict pozitive şi mai mici decât 263.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
2 3 1 7&amp;lt;br&amp;gt;&lt;br /&gt;
2&amp;lt;br&amp;gt;&lt;br /&gt;
5 6&lt;br /&gt;
;Iesire&lt;br /&gt;
2&amp;lt;br&amp;gt;&lt;br /&gt;
1&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;miere.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        N = int(f.readline().strip())&lt;br /&gt;
        cantitati_initiale = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        M = int(f.readline().strip())&lt;br /&gt;
        capacitati_camioane = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 50000, &amp;quot;N trebuie să fie între 1 și 50000&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= M &amp;lt;= 50000, &amp;quot;M trebuie să fie între 1 și 50000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= x &amp;lt; 2**63 for x in cantitati_initiale), &amp;quot;Cantitățile trebuie să fie între 1 și 2^63 - 1&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= x &amp;lt; 2**63 for x in capacitati_camioane), &amp;quot;Capacitățile trebuie să fie între 1 și 2^63 - 1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Copierea cantităților inițiale de miere&lt;br /&gt;
    cantitati = cantitati_initiale[:]&lt;br /&gt;
&lt;br /&gt;
    # Lista pentru a păstra numărul de stupi din care colectează fiecare camion&lt;br /&gt;
    rezultat = []&lt;br /&gt;
&lt;br /&gt;
    # Simularea colectării mierii pentru fiecare camion&lt;br /&gt;
    for capacitate in capacitati_camioane:&lt;br /&gt;
        stupi_colectati = 0&lt;br /&gt;
        for i in range(N):&lt;br /&gt;
            if cantitati[i] &amp;gt; 0 and capacitate &amp;gt;= cantitati[i]:&lt;br /&gt;
                capacitate -= cantitati[i]&lt;br /&gt;
                cantitati[i] = 0&lt;br /&gt;
                stupi_colectati += 1&lt;br /&gt;
            else:&lt;br /&gt;
                cantitati[i] -= capacitate&lt;br /&gt;
                capacitate = 0&lt;br /&gt;
                if cantitati[i] &amp;gt; 0:&lt;br /&gt;
                    break&lt;br /&gt;
        rezultat.append(stupi_colectati)&lt;br /&gt;
        # Actualizarea cantității de miere din stupi&lt;br /&gt;
        for i in range(N):&lt;br /&gt;
            if cantitati[i] == 0:&lt;br /&gt;
                cantitati[i] = cantitati_initiale[i] + 1&lt;br /&gt;
&lt;br /&gt;
    # Afișarea rezultatului&lt;br /&gt;
    with open(&amp;quot;miere.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        for res in rezultat:&lt;br /&gt;
            f.write(f&amp;quot;{res}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1617_-_KS&amp;diff=9932</id>
		<title>1617 - KS</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1617_-_KS&amp;diff=9932"/>
		<updated>2024-06-03T13:19:52Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Ana şi Bogdan au inventat din nou un joc, pe care l-au denumit ks. Pe tabla de joc sunt plasate pe poziţii consecutive n jetoane, pe fiecare jeton fiind scris un număr natural nenul.  Ana este prima la mutare şi are voie să extragă de pe tablă exact k jetoane situate pe poziţii consecutive.  Bogdan mută al doilea şi are şi el voie să extragă exact k jetoane, dintre cele rămase pe tablă, situate de asemenea pe poziţii consecutive.  Punctajul asoc...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Ana şi Bogdan au inventat din nou un joc, pe care l-au denumit ks. Pe tabla de joc sunt plasate pe poziţii consecutive n jetoane, pe fiecare jeton fiind scris un număr natural nenul.&lt;br /&gt;
&lt;br /&gt;
Ana este prima la mutare şi are voie să extragă de pe tablă exact k jetoane situate pe poziţii consecutive.&lt;br /&gt;
&lt;br /&gt;
Bogdan mută al doilea şi are şi el voie să extragă exact k jetoane, dintre cele rămase pe tablă, situate de asemenea pe poziţii consecutive.&lt;br /&gt;
&lt;br /&gt;
Punctajul asociat unei mutări este egal cu suma numerelor scrise pe jetoanele extrase la mutarea respectivă.&lt;br /&gt;
&lt;br /&gt;
Scopul Anei este să efectueze mutarea sa astfel încât punctajul obţinut de Bogdan să fie cât mai mic. Considerăm că atât Ana, cât şi Bogdan joacă optim.&lt;br /&gt;
Cunoscând numărul de jetoane de pe tabla de joc, valorile înscrise pe acestea, precum şi valoarea k, scrieţi un program care să determine care este cel mai bun punctaj pe care Bogdan îl poate obţine, ştiind că ambii jucători joacă optim.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare ks.in conține pe prima linie două numere naturale separate prin spaţiu n k, având semnificaţia din enunţ. Pe cea de a doua linie se află n valori naturale nenule, separate prin câte un spaţiu, reprezentând valorile înscrise pe cele n jetoane, în ordinea în care acestea sunt plasate pe tabla de joc.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire ks.out va conține o singură linie pe care va fi scris un număr natural reprezentând punctajul maxim pe care îl poate obţine Bogdan la mutarea sa, ştiind că ambii jucători joacă optim.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*3 ≤ n ≤ 100 000&lt;br /&gt;
*1 ≤ k ≤ n/3&lt;br /&gt;
*Valorile înscrise pe jetoane sunt numere naturale nenule ≤109.&lt;br /&gt;
*După ce Ana extrage jetoanele sale, jetoanele rămase pe tablă îşi vor păstra poziţiile iniţiale.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
10 3&amp;lt;br&amp;gt;&lt;br /&gt;
1 2 5 4 15 2 4 5 1 6&lt;br /&gt;
;Iesire&lt;br /&gt;
12&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;ks.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, k = map(int, f.readline().strip().split())&lt;br /&gt;
        values = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    assert 3 &amp;lt;= n &amp;lt;= 100000, &amp;quot;n trebuie să fie între 3 și 100000&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= k &amp;lt;= n // 3, &amp;quot;k trebuie să fie între 1 și n // 3&amp;quot;&lt;br /&gt;
    assert all(0 &amp;lt;= val &amp;lt;= 10**9 for val in values), &amp;quot;Valorile trebuie să fie între 0 și 10^9&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Inițializarea matricelor dp și sum&lt;br /&gt;
    dp = [0] * (n + 1)&lt;br /&gt;
    sum_values = [0] * (n + 1)&lt;br /&gt;
&lt;br /&gt;
    # Calcularea sumelor prefix&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        sum_values[i + 1] = sum_values[i] + values[i]&lt;br /&gt;
&lt;br /&gt;
    # Programare dinamică pentru a calcula punctajele maxime&lt;br /&gt;
    for i in range(n - k, -1, -1):&lt;br /&gt;
        dp[i] = sum_values[i + k] - sum_values[i]&lt;br /&gt;
        if i + k &amp;lt; n:&lt;br /&gt;
            dp[i] += sum_values[n] - sum_values[i + k] - dp[i + k]&lt;br /&gt;
&lt;br /&gt;
    # Determinarea punctajului maxim pe care îl poate obține Bogdan&lt;br /&gt;
    max_score_bogdan = 0&lt;br /&gt;
    for i in range(n - k + 1):&lt;br /&gt;
        max_score_bogdan = max(max_score_bogdan/2, dp[i])&lt;br /&gt;
&lt;br /&gt;
    # Afișarea rezultatului&lt;br /&gt;
    with open(&amp;quot;ks.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{max_score_bogdan}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1050_-_TCIF&amp;diff=9931</id>
		<title>1050 - TCIF</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1050_-_TCIF&amp;diff=9931"/>
		<updated>2024-06-03T13:10:01Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Avem la dispoziţie patru numere naturale N, A, B, C, precum şi trei cifre c1, c2, c3 distincte două câte două. Să se determine numărul natural minim, strict mai mare decât N, care are exact A cifre c1, B cifre c2, C cifre c3 şi nu conţine alte cifre. == Date de intrare == Fișierul de intrare tcif.in conține pe prima linie, separate prin câte un spaţiu, numerele naturale A B C c1 c2 c3. Pe linia a doua se află numărul natural N. == Date de ieșir...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Avem la dispoziţie patru numere naturale N, A, B, C, precum şi trei cifre c1, c2, c3 distincte două câte două.&lt;br /&gt;
Să se determine numărul natural minim, strict mai mare decât N, care are exact A cifre c1, B cifre c2, C cifre c3 şi nu conţine alte cifre.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare tcif.in conține pe prima linie, separate prin câte un spaţiu, numerele naturale A B C c1 c2 c3. Pe linia a doua se află numărul natural N.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire tcif.out va conține o singură linie pe care va fi scris cel mai mic număr natural strict mai mare decât N care conţine exact A cifre c1, exact B cifre c2 şi exact C cifre c3 şi nu conţine alte cifre.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*N va avea cel puţin o cifră şi cel mult 1000 de cifre.&lt;br /&gt;
*Pentru 10% dintre teste, N ≤ 30 000&lt;br /&gt;
*Pentru alte 40% dintre teste, N va avea cel mult 14 cifre&lt;br /&gt;
*0 ≤ c1, c2, c3 ≤ 9; c1, c2 şi c3 sunt distincte două câte două&lt;br /&gt;
*1 ≤ A, 1 ≤ B, 1 ≤ C, A+B+C ≤ 1000&lt;br /&gt;
*Datele de intrare sunt alese astfel încât va exista o soluţie.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
2 2 2 3 2 4&amp;lt;br&amp;gt;&lt;br /&gt;
293187&lt;br /&gt;
;Iesire&lt;br /&gt;
322344&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def generate_number(A, B, C, c1, c2, c3):&lt;br /&gt;
    number_str = c1 * A + c2 * B + c3 * C&lt;br /&gt;
    for perm in permutations(number_str):&lt;br /&gt;
        yield int(&#039;&#039;.join(perm))&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;tcif.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        A, B, C, c1, c2, c3 = f.readline().strip().split()&lt;br /&gt;
        A, B, C = int(A), int(B), int(C)&lt;br /&gt;
        N = int(f.readline().strip())&lt;br /&gt;
&lt;br /&gt;
    assert 1 &amp;lt;= A &amp;lt;= 1000, &amp;quot;A trebuie să fie între 1 și 1000.&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= B &amp;lt;= 1000, &amp;quot;B trebuie să fie între 1 și 1000.&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= C &amp;lt;= 1000, &amp;quot;C trebuie să fie între 1 și 1000.&amp;quot;&lt;br /&gt;
    assert len(str(N)) &amp;lt;= 1000, &amp;quot;N trebuie să aibă cel puțin o cifră și cel mult 1000 de cifre.&amp;quot;&lt;br /&gt;
    assert 0 &amp;lt;= int(c1) &amp;lt;= 9 and 0 &amp;lt;= int(c2) &amp;lt;= 9 and 0 &amp;lt;= int(c3) &amp;lt;= 9, &amp;quot;c1, c2 și c3 trebuie să fie cifre distincte.&amp;quot;&lt;br /&gt;
    assert c1 != c2 and c1 != c3 and c2 != c3, &amp;quot;c1, c2 și c3 trebuie să fie cifre distincte.&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Generarea și verificarea numerelor&lt;br /&gt;
    found = False&lt;br /&gt;
    result = None&lt;br /&gt;
    for num in sorted(generate_number(A, B, C, c1, c2, c3)):&lt;br /&gt;
        if num &amp;gt; N:&lt;br /&gt;
            result = num&lt;br /&gt;
            found = True&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    # Afișarea rezultatului&lt;br /&gt;
    with open(&amp;quot;tcif.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        if found:&lt;br /&gt;
            f.write(f&amp;quot;{result}\n&amp;quot;)&lt;br /&gt;
        else:&lt;br /&gt;
            f.write(&amp;quot;Nu exista solutie\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1081_-_Numar_3&amp;diff=9930</id>
		<title>1081 - Numar 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1081_-_Numar_3&amp;diff=9930"/>
		<updated>2024-06-03T13:02:04Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: /* Cerința */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr raţional strict pozitiv q, sub formă de fracţie zecimală.&lt;br /&gt;
Să se determine două numere naturale a şi b astfel q=a/b încât iar modulul diferenţei dintre a şi b să fie minim.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare numar3.in conține&lt;br /&gt;
&lt;br /&gt;
*pe prima linie două valori naturale ni şi nz. ni reprezintă numărul de cifre care formează partea întreagă a lui q iar nz reprezintă numărul de cifre care formează partea fracţionara a lui q.&lt;br /&gt;
*pe a doua linie, ni cifre care reprezintă partea întreagă a lui q. Între două cifre se află câte un caracter spaţiu.&lt;br /&gt;
*pe a treia linie, nz cifre care reprezintă partea zecimală a lui q. Între două cifre se află câte un caracter spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire numar3.out va conține:&lt;br /&gt;
&lt;br /&gt;
*pe prima linie un număr natural n1 care reprezintă numărul de cifre din care este alcătuit numărul a;&lt;br /&gt;
*pe a doua linie, cifrele numărului a, fără spaţiu între ele.&lt;br /&gt;
*pe a treia linie un număr natural n2 care reprezintă numărul de cifre din care este alcătuit numărul b;&lt;br /&gt;
*pe a patra linie, cifrele numărului b, fără spaţiu între ele.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1≤ n1,n2 &amp;lt; 2000&lt;br /&gt;
*1≤ n1+n2 ≤ 2000&lt;br /&gt;
*Cifrele din care este alcătuit q sunt cele din sistemul zecimal.&lt;br /&gt;
*Pentru 20% dintre teste, n1+n2≤9; pentru alte 15% dintre teste, 10≤n1+n2≤16&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1 3&amp;lt;br&amp;gt;&lt;br /&gt;
0&amp;lt;br&amp;gt;&lt;br /&gt;
3 7 5&lt;br /&gt;
;Iesire&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
3&amp;lt;br&amp;gt;&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
8&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from fractions import Fraction&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;numar3.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n1, n2 = map(int, f.readline().strip().split())&lt;br /&gt;
        parte_intreaga = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        parte_fractionara = list(map(int, f.readline().strip().split()))&lt;br /&gt;
    &lt;br /&gt;
    # Construirea numărului rațional q&lt;br /&gt;
    int_part = int(&#039;&#039;.join(map(str, parte_intreaga)))&lt;br /&gt;
    frac_part = int(&#039;&#039;.join(map(str, parte_fractionara)))&lt;br /&gt;
    total_len = len(parte_fractionara)&lt;br /&gt;
    q = Fraction(int_part * (10 ** total_len) + frac_part, 10 ** total_len)&lt;br /&gt;
    &lt;br /&gt;
    # Găsirea numitorilor a și b&lt;br /&gt;
    a, b = 0, 0&lt;br /&gt;
    min_diff = float(&#039;inf&#039;)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, 2000):&lt;br /&gt;
        candidate_b = int(q * i)&lt;br /&gt;
        candidate_a = q * i&lt;br /&gt;
        if abs(candidate_a - candidate_b) &amp;lt; min_diff:&lt;br /&gt;
            min_diff = abs(candidate_a - candidate_b)&lt;br /&gt;
            a, b = int(candidate_a), i&lt;br /&gt;
    &lt;br /&gt;
    # Afișarea rezultatului&lt;br /&gt;
    with open(&amp;quot;numar3.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{len(str(a))}\n&amp;quot;)&lt;br /&gt;
        f.write(f&amp;quot;{&#039; &#039;.join(str(a))}\n&amp;quot;)&lt;br /&gt;
        f.write(f&amp;quot;{len(str(b))}\n&amp;quot;)&lt;br /&gt;
        f.write(f&amp;quot;{&#039; &#039;.join(str(b))}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1081_-_Numar_3&amp;diff=9929</id>
		<title>1081 - Numar 3</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1081_-_Numar_3&amp;diff=9929"/>
		<updated>2024-06-03T13:01:50Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dă un număr raţional strict pozitiv q, sub formă de fracţie zecimală. Să se determine două numere naturale a şi b astfel q=a/b  încât iar modulul diferenţei dintre a şi b să fie minim. == Date de intrare == Fișierul de intrare numar3.in conține  *pe prima linie două valori naturale ni şi nz. ni reprezintă numărul de cifre care formează partea întreagă a lui q iar nz reprezintă numărul de cifre care formează partea fracţionara a lui...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă un număr raţional strict pozitiv q, sub formă de fracţie zecimală.&lt;br /&gt;
Să se determine două numere naturale a şi b astfel q=a/b&lt;br /&gt;
 încât iar modulul diferenţei dintre a şi b să fie minim.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare numar3.in conține&lt;br /&gt;
&lt;br /&gt;
*pe prima linie două valori naturale ni şi nz. ni reprezintă numărul de cifre care formează partea întreagă a lui q iar nz reprezintă numărul de cifre care formează partea fracţionara a lui q.&lt;br /&gt;
*pe a doua linie, ni cifre care reprezintă partea întreagă a lui q. Între două cifre se află câte un caracter spaţiu.&lt;br /&gt;
*pe a treia linie, nz cifre care reprezintă partea zecimală a lui q. Între două cifre se află câte un caracter spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire numar3.out va conține:&lt;br /&gt;
&lt;br /&gt;
*pe prima linie un număr natural n1 care reprezintă numărul de cifre din care este alcătuit numărul a;&lt;br /&gt;
*pe a doua linie, cifrele numărului a, fără spaţiu între ele.&lt;br /&gt;
*pe a treia linie un număr natural n2 care reprezintă numărul de cifre din care este alcătuit numărul b;&lt;br /&gt;
*pe a patra linie, cifrele numărului b, fără spaţiu între ele.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1≤ n1,n2 &amp;lt; 2000&lt;br /&gt;
*1≤ n1+n2 ≤ 2000&lt;br /&gt;
*Cifrele din care este alcătuit q sunt cele din sistemul zecimal.&lt;br /&gt;
*Pentru 20% dintre teste, n1+n2≤9; pentru alte 15% dintre teste, 10≤n1+n2≤16&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1 3&amp;lt;br&amp;gt;&lt;br /&gt;
0&amp;lt;br&amp;gt;&lt;br /&gt;
3 7 5&lt;br /&gt;
;Iesire&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
3&amp;lt;br&amp;gt;&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
8&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
from fractions import Fraction&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;numar3.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n1, n2 = map(int, f.readline().strip().split())&lt;br /&gt;
        parte_intreaga = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        parte_fractionara = list(map(int, f.readline().strip().split()))&lt;br /&gt;
    &lt;br /&gt;
    # Construirea numărului rațional q&lt;br /&gt;
    int_part = int(&#039;&#039;.join(map(str, parte_intreaga)))&lt;br /&gt;
    frac_part = int(&#039;&#039;.join(map(str, parte_fractionara)))&lt;br /&gt;
    total_len = len(parte_fractionara)&lt;br /&gt;
    q = Fraction(int_part * (10 ** total_len) + frac_part, 10 ** total_len)&lt;br /&gt;
    &lt;br /&gt;
    # Găsirea numitorilor a și b&lt;br /&gt;
    a, b = 0, 0&lt;br /&gt;
    min_diff = float(&#039;inf&#039;)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, 2000):&lt;br /&gt;
        candidate_b = int(q * i)&lt;br /&gt;
        candidate_a = q * i&lt;br /&gt;
        if abs(candidate_a - candidate_b) &amp;lt; min_diff:&lt;br /&gt;
            min_diff = abs(candidate_a - candidate_b)&lt;br /&gt;
            a, b = int(candidate_a), i&lt;br /&gt;
    &lt;br /&gt;
    # Afișarea rezultatului&lt;br /&gt;
    with open(&amp;quot;numar3.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{len(str(a))}\n&amp;quot;)&lt;br /&gt;
        f.write(f&amp;quot;{&#039; &#039;.join(str(a))}\n&amp;quot;)&lt;br /&gt;
        f.write(f&amp;quot;{len(str(b))}\n&amp;quot;)&lt;br /&gt;
        f.write(f&amp;quot;{&#039; &#039;.join(str(b))}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0983_-_Ecuatie&amp;diff=9928</id>
		<title>0983 - Ecuatie</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0983_-_Ecuatie&amp;diff=9928"/>
		<updated>2024-06-03T12:41:07Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Se dau a și b numere naturale nenule, cu a &amp;lt; b. Să se determine soluțiile ecuației 1/x+1/y+1/z=a/b , unde x,y,z sunt numere naturale nenule . == Date de intrare == Programul citește de la tastatură numerele naturale nenule a și b, separate prin spațiu. == Date de ieșire == Programul va afișa pe ecran, pe linii separate, soluțiile ecuației în ordinea crescătoare a valorilor lui x, iar la valori egale ale lui x în ordinea crescătoare a valorilor l...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dau a și b numere naturale nenule, cu a &amp;lt; b. Să se determine soluțiile ecuației 1/x+1/y+1/z=a/b&lt;br /&gt;
, unde x,y,z sunt numere naturale nenule .&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numerele naturale nenule a și b, separate prin spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran, pe linii separate, soluțiile ecuației în ordinea crescătoare a valorilor lui x, iar la valori egale ale lui x în ordinea crescătoare a valorilor lui y . În cazul în care problema nu are soluţii se va afişa mesajul NU ARE SOLUTII.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ a &amp;lt; b ≤ 100&lt;br /&gt;
*Se vor afișa numai soluțiile cu x ≤ y ≤ z numere naturale&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
2 3&lt;br /&gt;
;Iesire&lt;br /&gt;
2 7 42&amp;lt;br&amp;gt;&lt;br /&gt;
2 8 24&amp;lt;br&amp;gt;&lt;br /&gt;
2 9 18&amp;lt;br&amp;gt;&lt;br /&gt;
2 10 15&amp;lt;br&amp;gt;&lt;br /&gt;
2 12 12&amp;lt;br&amp;gt;&lt;br /&gt;
3 4 12&amp;lt;br&amp;gt;&lt;br /&gt;
3 6 6&amp;lt;br&amp;gt;&lt;br /&gt;
4 4 6&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    a, b = map(int, input(&amp;quot;Introduceți valorile a și b, separate prin spațiu: &amp;quot;).strip().split())&lt;br /&gt;
&lt;br /&gt;
    assert 1 &amp;lt;= a &amp;lt; b &amp;lt;= 100, &amp;quot;Restricțiile sunt 1 ≤ a &amp;lt; b ≤ 100&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    solutions = []&lt;br /&gt;
&lt;br /&gt;
    # Generarea soluțiilor&lt;br /&gt;
    print(&amp;quot;Generarea soluțiilor...&amp;quot;)&lt;br /&gt;
    for x in range(1, 1001):&lt;br /&gt;
        for y in range(x, 1001):&lt;br /&gt;
            for z in range(y, 1001):&lt;br /&gt;
                if a * (x * y * z) == b * (x * y + y * z + z * x):&lt;br /&gt;
                    solutions.append((x, y, z))&lt;br /&gt;
                    print(x,y,z)&lt;br /&gt;
&lt;br /&gt;
    # Sortarea soluțiilor în ordine crescătoare a lui x, iar pentru valori egale de x, în ordine crescătoare a lui y și z&lt;br /&gt;
    solutions.sort(key=lambda sol: (sol[0], sol[1], sol[2]))&lt;br /&gt;
&lt;br /&gt;
    if (solutions == 0):&lt;br /&gt;
        print(&amp;quot;NU EXISTA SOLUTII&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4179_-_barliga&amp;diff=9927</id>
		<title>4179 - barliga</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4179_-_barliga&amp;diff=9927"/>
		<updated>2024-06-03T12:05:56Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == În așteptarea marii confruntări cu turcii, oștenii moldoveni își antrenează mintea, jucând un joc de echipă denumit Bârligă. O echipă are N jucători, numerotați de la 1 la N, în ordinea în care sunt așezați. Fiecare jucător primește o scândură vopsită pe o față cu roşu, iar pe cealaltă cu galben. Pe fiecare scândură sunt scrise toate numerele naturale de la 1 la V, fiecare număr o singură dată; unele numere sunt scrise pe fața r...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
În așteptarea marii confruntări cu turcii, oștenii moldoveni își antrenează mintea, jucând un joc de echipă denumit Bârligă. O echipă are N jucători, numerotați de la 1 la N, în ordinea în care sunt așezați. Fiecare jucător primește o scândură vopsită pe o față cu roşu, iar pe cealaltă cu galben. Pe fiecare scândură sunt scrise toate numerele naturale de la 1 la V, fiecare număr o singură dată; unele numere sunt scrise pe fața roșie, celelalte sunt scrise pe fața galbenă a scândurii. La începutul jocului, toate scândurile sunt așezate cu faţa roșie în sus. Când primul jucător strigă “Bârligă!” fiecare jucător din echipă poate decide dacă să lase scândura sa cu fața roșie în sus sau să o întoarcă (să o “bârlige”) cu fața galbenă în sus. Punctajul obținut de echipă este egal cu numărul de valori distincte vizibile la final.&lt;br /&gt;
Scrieți un program care cunoscând N, numărul de jucători din echipă, precum și valorile scrise pe fața roșie a scândurii primite de fiecare jucător, determină punctajul maxim pe care îl poate obține echipa, precum și numerele de ordine ale jucătorilor care trebuie să întoarcă scândura cu față galbenă în sus, pentru a obține acest punctaj maxim.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare barliga.in conține pe prima linie numerele naturale N și V, cu semnificația din enunț. Pe următoarele N linii se află informațiile despre scândurile celor N jucători, în ordinea de la 1 la N. Linia care descrie o scândură are forma nr r1 r2 … rnr, cu semnificația: pe fața roșie a scândurii sunt scrise nr numere naturale distincte cuprinse între 1 și V, acestea fiind r1, r2, …, rnr.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul de ieșire barliga.out se va scrie pe prima linie un număr natural reprezentând punctajul maxim pe care îl poate obține echipa. Pe cea de a doua linie va fi scris un număr natural T, reprezentând numărul de jucători care trebuie să întoarcă scândura cu fața galbenă în sus, urmat de T numere naturale distincte cuprinse între 1 și N, reprezentând numerele de ordine ale jucătorilor care trebuie să întoarcă scândura cu fața galbenă în sus.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ N ≤ 16&lt;br /&gt;
*3 ≤ V ≤ 80.000&lt;br /&gt;
*Valorile aflate pe aceeași linie în fișierul de intrare, respectiv în fișierul de ieșire sunt separate printr-un singur spațiu.&lt;br /&gt;
*Dacă există mai multe soluții pentru ca echipa să obțină punctaj maxim, se va afișa oricare dintre acestea.&lt;br /&gt;
*Punctajul pe test se obține dacă sunt afișate corect atât punctajul maxim, cât și o modalitate de obținere a punctajului maxim.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
2 10&amp;lt;br&amp;gt;&lt;br /&gt;
3 7 5 10&amp;lt;br&amp;gt;&lt;br /&gt;
4 1 5 10 2&lt;br /&gt;
;Iesire&lt;br /&gt;
9&amp;lt;br&amp;gt;&lt;br /&gt;
1 1&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import itertools&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&amp;quot;barliga.in&amp;quot;, &amp;quot;r&amp;quot;) as fin:&lt;br /&gt;
        N, V = map(int, fin.readline().split())&lt;br /&gt;
        red_boards = []&lt;br /&gt;
        yellow_boards = []&lt;br /&gt;
&lt;br /&gt;
        for _ in range(N):&lt;br /&gt;
            data = list(map(int, fin.readline().split()))&lt;br /&gt;
            red_boards.append(set(data[1:]))&lt;br /&gt;
            # Vom genera yellow_boards ca fiind complementul numerelor de pe fața roșie&lt;br /&gt;
            yellow_boards.append(set(range(1, V+1)) - red_boards[-1])&lt;br /&gt;
&lt;br /&gt;
    max_score = 0&lt;br /&gt;
    best_combination = []&lt;br /&gt;
&lt;br /&gt;
    # Verificăm toate combinațiile posibile de întoarcere a scândurilor&lt;br /&gt;
    for flip_combination in itertools.product([False, True], repeat=N):&lt;br /&gt;
        visible_numbers = set()&lt;br /&gt;
        current_combination = []&lt;br /&gt;
&lt;br /&gt;
        for i in range(N):&lt;br /&gt;
            if flip_combination[i]:&lt;br /&gt;
                visible_numbers.update(yellow_boards[i])&lt;br /&gt;
                current_combination.append(i + 1)&lt;br /&gt;
            else:&lt;br /&gt;
                visible_numbers.update(red_boards[i])&lt;br /&gt;
&lt;br /&gt;
        if len(visible_numbers) &amp;gt; max_score:&lt;br /&gt;
            max_score = len(visible_numbers)&lt;br /&gt;
            best_combination = current_combination&lt;br /&gt;
&lt;br /&gt;
    # Scrierea rezultatului în fișierul de ieșire&lt;br /&gt;
    with open(&amp;quot;barliga.out&amp;quot;, &amp;quot;w&amp;quot;) as fout:&lt;br /&gt;
        fout.write(str(max_score) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
        fout.write(str(len(best_combination)) + &amp;quot; &amp;quot; + &amp;quot; &amp;quot;.join(map(str, best_combination)) + &amp;quot;\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4133_-_microbuz&amp;diff=9926</id>
		<title>4133 - microbuz</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4133_-_microbuz&amp;diff=9926"/>
		<updated>2024-06-03T04:01:35Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == O companie de transport cu microbuze din județul Iași a adoptat o strategie proprie pentru rutele din județ:  *niciun traseu nu poate avea mai mult de 165 kilometri *distanța între două stații consecutive este de un kilometru *un pasager poate pleca din orice stație şi poate să își cumpere bilete pentru parcurgerea a 1, 2, ..., 10 kilometri *fiecare dintre cele zece distanţe posibile au bilete cu preţuri distincte Gigel, care călătoreşte cu mic...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
O companie de transport cu microbuze din județul Iași a adoptat o strategie proprie pentru rutele din județ:&lt;br /&gt;
&lt;br /&gt;
*niciun traseu nu poate avea mai mult de 165 kilometri&lt;br /&gt;
*distanța între două stații consecutive este de un kilometru&lt;br /&gt;
*un pasager poate pleca din orice stație şi poate să își cumpere bilete pentru parcurgerea a 1, 2, ..., 10 kilometri&lt;br /&gt;
*fiecare dintre cele zece distanţe posibile au bilete cu preţuri distincte&lt;br /&gt;
Gigel, care călătoreşte cu microbuzul exact N kilometri, poate să aleagă una sau mai multe distanţe dintre cele zece stabilite și să cumpere biletele corespunzătoare. Compania impune ca un pasager să poată cumpăra maxim 3 bilete de același tip. Gigel observă că pentru aceeași sumă poate achiziționa seturi diferite de bilete cu prețuri distincte. Pentru exemplu de mai sus, cu 98 de lei el poate cumpăra câte un bilet cu prețurile 11, 14, 29, 44 lei sau câte un bilet cu prețurile 45, 53 lei (11+14+29+44 = 45+53).&lt;br /&gt;
&lt;br /&gt;
Scrieţi un program care să rezolve următoarele cerințe:&lt;br /&gt;
&lt;br /&gt;
*determină preţul minim al unui set de bilete ce poate fi achiziționat pentru parcurgerea a exact N kilometri;&lt;br /&gt;
*determină distanţele alese de Gigel, astfel încât preţul total al călătoriei să fie minim;&lt;br /&gt;
*determină două seturi distincte de bilete pentru care prețul total al biletelor este același și este cel mai mare posibil. Pentru fiecare set nu este permisă alegerea mai multor bilete cu același preț și nu există două bilete cu același preț în ambele seturi.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare microbuz.in are trei linii. Pe prima linie se află un număr natural C ce reprezintă cerința (1, 2 sau 3). Linia a doua conține zece valori naturale ordonate strict crescător, separate prin câte un spaţiu, reprezentând preţurile pentru parcurgerea a 1, 2, …, 10 kilometri. Linia a treia conţine valoarea N reprezentând distanţa pe care doreşte să o parcurgă Gigel.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire microbuz.out are următoarea structură:&lt;br /&gt;
&lt;br /&gt;
*dacă C = 1, pe prima linie se va afișa un întreg reprezentând costul minim al călătoriei;&lt;br /&gt;
*dacă C = 2, pe fiecare linie se vor afișa câte două numere întregi, separate printr-un spaţiu, reprezentând distanța parcursă şi preţul biletului corespunzător;&lt;br /&gt;
*dacă C = 3, pe prima linie se va afișa prețul comun al celor două seturi de bilete, iar pe următoarele două linii câte un set de bilete dat prin numărul de km pentru biletele din set, în ordine strict crescătoare, separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*C ∈ {1, 2, 3}&lt;br /&gt;
*1 ≤ N ≤ 165&lt;br /&gt;
*cele 10 prețuri sunt numere naturale din intervalul [10, 99]&lt;br /&gt;
*răspunsul la cerința 3 nu depinde de valoarea lui N&lt;br /&gt;
*Pentru 28 de puncte, C = 1&lt;br /&gt;
*Pentru 38 de puncte, C = 2&lt;br /&gt;
*Pentru 34 de puncte, C = 3&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
11 14 18 23 29 36 44 45 53 64&amp;lt;br&amp;gt;&lt;br /&gt;
15&lt;br /&gt;
;Iesire&lt;br /&gt;
86&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def solve_case_1(prices, N):&lt;br /&gt;
    # Initialize dp array where dp[i] will be the minimum cost to travel i kilometers&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (N + 1)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(1, 11):&lt;br /&gt;
            if i &amp;gt;= j:&lt;br /&gt;
                dp[i] = min(dp[i], dp[i - j] + prices[j - 1])&lt;br /&gt;
    &lt;br /&gt;
    return dp[N]&lt;br /&gt;
&lt;br /&gt;
def solve_case_2(prices, N):&lt;br /&gt;
    # Initialize dp array and tracking array&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (N + 1)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
    track = [-1] * (N + 1)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(1, 11):&lt;br /&gt;
            if i &amp;gt;= j and dp[i - j] + prices[j - 1] &amp;lt; dp[i]:&lt;br /&gt;
                dp[i] = dp[i - j] + prices[j - 1]&lt;br /&gt;
                track[i] = j&lt;br /&gt;
    &lt;br /&gt;
    distance = 0&lt;br /&gt;
    km = N&lt;br /&gt;
    tickets = []&lt;br /&gt;
    &lt;br /&gt;
    while km &amp;gt; 0:&lt;br /&gt;
        ticket = track[km]&lt;br /&gt;
        tickets.append(ticket)&lt;br /&gt;
        distance += ticket&lt;br /&gt;
        km -= ticket&lt;br /&gt;
    &lt;br /&gt;
    return distance, dp[N], tickets&lt;br /&gt;
&lt;br /&gt;
def solve_case_3(prices, N):&lt;br /&gt;
    dp = [float(&#039;inf&#039;)] * (N + 1)&lt;br /&gt;
    dp[0] = 0&lt;br /&gt;
    track = [-1] * (N + 1)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(1, N + 1):&lt;br /&gt;
        for j in range(1, 11):&lt;br /&gt;
            if i &amp;gt;= j and dp[i - j] + prices[j - 1] &amp;lt; dp[i]:&lt;br /&gt;
                dp[i] = dp[i - j] + prices[j - 1]&lt;br /&gt;
                track[i] = j&lt;br /&gt;
    &lt;br /&gt;
    tickets1 = []&lt;br /&gt;
    km = N&lt;br /&gt;
    while km &amp;gt; 0:&lt;br /&gt;
        ticket = track[km]&lt;br /&gt;
        tickets1.append(ticket)&lt;br /&gt;
        km -= ticket&lt;br /&gt;
    &lt;br /&gt;
    max_price = 0&lt;br /&gt;
    best_comb = []&lt;br /&gt;
    &lt;br /&gt;
    for i in range(len(tickets1)):&lt;br /&gt;
        for j in range(i + 1, len(tickets1)):&lt;br /&gt;
            if tickets1[i] != tickets1[j]:&lt;br /&gt;
                remaining = N - tickets1[i] - tickets1[j]&lt;br /&gt;
                if remaining &amp;gt;= 0:&lt;br /&gt;
                    price = prices[tickets1[i] - 1] + prices[tickets1[j] - 1]&lt;br /&gt;
                    if price &amp;gt; max_price:&lt;br /&gt;
                        max_price = price&lt;br /&gt;
                        best_comb = [tickets1[i], tickets1[j]]&lt;br /&gt;
    &lt;br /&gt;
    return tickets1, best_comb&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&#039;microbuz.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        data = f.read().strip().split(&#039;\n&#039;)&lt;br /&gt;
    &lt;br /&gt;
    C = int(data[0].strip())&lt;br /&gt;
    prices = list(map(int, data[1].strip().split()))&lt;br /&gt;
    N = int(data[2].strip())&lt;br /&gt;
    &lt;br /&gt;
    if C == 1:&lt;br /&gt;
        result = solve_case_1(prices, N)&lt;br /&gt;
        with open(&#039;microbuz.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(str(result) + &#039;\n&#039;)&lt;br /&gt;
    &lt;br /&gt;
    elif C == 2:&lt;br /&gt;
        distance, price, tickets = solve_case_2(prices, N)&lt;br /&gt;
        with open(&#039;microbuz.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(f&amp;quot;{distance} {price}\n&amp;quot;)&lt;br /&gt;
            for ticket in tickets:&lt;br /&gt;
                f.write(f&amp;quot;{ticket} {prices[ticket - 1]}\n&amp;quot;)&lt;br /&gt;
    &lt;br /&gt;
    elif C == 3:&lt;br /&gt;
        tickets1, best_comb = solve_case_3(prices, N)&lt;br /&gt;
        with open(&#039;microbuz.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(str(len(tickets1)) + &#039;\n&#039;)&lt;br /&gt;
            for ticket in tickets1:&lt;br /&gt;
                f.write(f&amp;quot;{ticket} {prices[ticket - 1]}\n&amp;quot;)&lt;br /&gt;
            f.write(str(len(best_comb)) + &#039;\n&#039;)&lt;br /&gt;
            for ticket in best_comb:&lt;br /&gt;
                f.write(f&amp;quot;{ticket} {prices[ticket - 1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3065_-_trio&amp;diff=9925</id>
		<title>3065 - trio</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3065_-_trio&amp;diff=9925"/>
		<updated>2024-06-03T03:53:24Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Trio este un joc ce conține N piese de aceeași formă, așezate una lângă alta pe o tablă de joc și numerotate de la stânga la dreapta cu valori de la 1 la N. Fiecare piesă are marcate pe ea trei zone, iar în fiecare dintre ele este scrisă câte o cifră. Se consideră că o piesă pe care sunt scrise în ordine, de la stânga la dreapta, cifrele C1, C2 și C3 are următoarele proprietăți: este identică cu o altă piesă, dacă această piesă con...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Trio este un joc ce conține N piese de aceeași formă, așezate una lângă alta pe o tablă de joc și numerotate de la stânga la dreapta cu valori de la 1 la N. Fiecare piesă are marcate pe ea trei zone, iar în fiecare dintre ele este scrisă câte o cifră. Se consideră că o piesă pe care sunt scrise în ordine, de la stânga la dreapta, cifrele C1, C2 și C3 are următoarele proprietăți:&lt;br /&gt;
este identică cu o altă piesă, dacă această piesă conține exact aceleași cifre, în aceeași ordine cu ale ei sau în ordine inversă. Astfel, piesa C1|C2|C3 este identică cu o altă piesă de forma C1|C2|C3 și cu o piesă de forma C3|C2|C1.&lt;br /&gt;
este prietenă cu o altă piesă dacă aceasta conține exact aceleași cifre ca piesa dată, dar nu neapărat în aceeași ordine. Astfel, piesa C1|C2|C3 este prietenă cu piesele: C1|C2|C3, C1|C3|C2, C2|C1|C3, C2|C3|C1, C3|C1|C2 și C3|C2|C1. Se observă că două piese identice sunt și prietene!&lt;br /&gt;
Un grup de piese prietene este format din TOATE piesele prietene între ele, aflate pe tabla de joc.&lt;br /&gt;
1) Alegeți o piesă de pe tabla de joc, astfel încât numărul M al pieselor identice cu ea să fie cel mai mare posibil și afișați numărul M determinat;&lt;br /&gt;
2) Afișați numărul grupurilor de piese prietene existente pe tabla de joc;&lt;br /&gt;
3) Afișați numărul maxim de piese dintr-o secvență ce conține piese așezate una lângă alta pe tabla de joc, pentru care prima piesă și ultima piesă din secvență sunt prietene.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare trio.in conține&lt;br /&gt;
- pe prima linie un număr natural C care reprezintă numărul cerinţei şi poate avea valorile 1, 2 sau 3.&lt;br /&gt;
- pe cea de-a doua linie un număr natural N ce reprezintă numărul pieselor de joc;&lt;br /&gt;
- pe următoarele N linii, câte trei cifre, despărțite prin câte un spațiu, ce reprezintă, în ordine, cifrele scrise pe câte o piesă de joc. Piesele sunt date în ordinea numerotării acestora pe tabla de joc.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire trio.out va conține pe prima linie un singur număr natural ce reprezintă rezultatul determinat conform fiecărei cerințe.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ N ≤ 100.000&lt;br /&gt;
*Există cel puțin două piese identice pe tabla de joc;&lt;br /&gt;
*O piesă ce nu e prietenă cu nicio altă piesă de pe tabla de joc formează singură un grup;&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
6&amp;lt;br&amp;gt;&lt;br /&gt;
1 3 3&amp;lt;br&amp;gt;&lt;br /&gt;
4 5 9&amp;lt;br&amp;gt;&lt;br /&gt;
1 3 3&amp;lt;br&amp;gt;&lt;br /&gt;
9 5 4&amp;lt;br&amp;gt;&lt;br /&gt;
3 3 1&amp;lt;br&amp;gt;&lt;br /&gt;
9 4 5&lt;br /&gt;
;Iesire&lt;br /&gt;
2&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def reverse_piece(piece):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Returnează piesa inversată.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    return piece[::-1]&lt;br /&gt;
&lt;br /&gt;
def are_friends(piece1, piece2):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Verifică dacă două piese sunt prietene.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if piece1 == piece2:&lt;br /&gt;
        return True&lt;br /&gt;
    if piece1 == reverse_piece(piece2):&lt;br /&gt;
        return True&lt;br /&gt;
    c1, c2, c3 = piece1&lt;br /&gt;
    for i in range(3):&lt;br /&gt;
        if piece2 == c2 + c3 + c1 or piece2 == c3 + c1 + c2:&lt;br /&gt;
            return True&lt;br /&gt;
        c1, c2, c3 = c3, c1, c2  # permutăm cifrele&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def cerinta1(pieces):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Determină M al pieselor identice cu cea selectată.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    from collections import Counter&lt;br /&gt;
    counter = Counter(pieces)&lt;br /&gt;
    most_common_piece, count = counter.most_common(1)[0]&lt;br /&gt;
    return count&lt;br /&gt;
&lt;br /&gt;
def cerinta2(pieces):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Numărul grupurilor de piese prietene.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    n = len(pieces)&lt;br /&gt;
    visited = [False] * n&lt;br /&gt;
&lt;br /&gt;
    def dfs(i):&lt;br /&gt;
        stack = [i]&lt;br /&gt;
        while stack:&lt;br /&gt;
            node = stack.pop()&lt;br /&gt;
            if not visited[node]:&lt;br /&gt;
                visited[node] = True&lt;br /&gt;
                for j in range(n):&lt;br /&gt;
                    if not visited[j] and are_friends(pieces[node], pieces[j]):&lt;br /&gt;
                        stack.append(j)&lt;br /&gt;
&lt;br /&gt;
    groups = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if not visited[i]:&lt;br /&gt;
            groups += 1&lt;br /&gt;
            dfs(i)&lt;br /&gt;
&lt;br /&gt;
    return groups&lt;br /&gt;
&lt;br /&gt;
def cerinta3(pieces):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Numărul maxim de piese dintr-o secvență ce conține piese prietene.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    n = len(pieces)&lt;br /&gt;
    max_length = 0&lt;br /&gt;
    current_length = 0&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if i == 0 or are_friends(pieces[i], pieces[i - 1]):&lt;br /&gt;
            current_length += 1&lt;br /&gt;
        else:&lt;br /&gt;
            max_length = max(max_length, current_length)&lt;br /&gt;
            current_length = 1&lt;br /&gt;
&lt;br /&gt;
    max_length = max(max_length, current_length)&lt;br /&gt;
    return max_length&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&#039;trio.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        data = f.read().splitlines()&lt;br /&gt;
&lt;br /&gt;
    c = int(data[0].strip())&lt;br /&gt;
    n = int(data[1].strip())&lt;br /&gt;
    pieces = [line.strip().replace(&amp;quot; &amp;quot;, &amp;quot;&amp;quot;) for line in data[2:2 + n]]&lt;br /&gt;
&lt;br /&gt;
    assert 2 &amp;lt;= n &amp;lt;= 100000, &amp;quot;N trebuie să fie între 2 și 100000&amp;quot;&lt;br /&gt;
    assert all(len(piece) == 3 for piece in pieces), &amp;quot;Fiecare piesă trebuie să aibă exact 3 cifre&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if c == 1:&lt;br /&gt;
        result = cerinta1(pieces)&lt;br /&gt;
    elif c == 2:&lt;br /&gt;
        result = cerinta2(pieces)&lt;br /&gt;
    elif c == 3:&lt;br /&gt;
        result = cerinta3(pieces)&lt;br /&gt;
    else:&lt;br /&gt;
        raise ValueError(&amp;quot;C trebuie să fie 1, 2 sau 3&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    with open(&#039;trio.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{result}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2934_-_Cmmp&amp;diff=9924</id>
		<title>2934 - Cmmp</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2934_-_Cmmp&amp;diff=9924"/>
		<updated>2024-06-03T03:50:20Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Pentru orice număr natural x definim operația cmmp prin care adăugăm cifre la stânga lui x, la dreapta lui x sau la ambele capete ale lui x, astfel încât numărul obținut să fie pătrat perfect și cât mai mic posibil.   Se dau N numere naturale s1,s2…sN .  Să se determine pentru fiecare număr s[k], 1 ≤ k ≤ N, cel mai mic pătrat perfect care se poate obține prin aplicarea operației cmmp. == Date de intrare == Fișierul de intrare cmmp.in...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Pentru orice număr natural x definim operația cmmp prin care adăugăm cifre la stânga lui x, la dreapta lui x sau la ambele capete ale lui x, astfel încât numărul obținut să fie pătrat perfect și cât mai mic posibil.&lt;br /&gt;
 &lt;br /&gt;
Se dau N numere naturale s1,s2…sN&lt;br /&gt;
.&lt;br /&gt;
&lt;br /&gt;
Să se determine pentru fiecare număr s[k], 1 ≤ k ≤ N, cel mai mic pătrat perfect care se poate obține prin aplicarea operației cmmp.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare cmmp.in conține pe primul rând numărul N. Pe linia a doua sunt scrise N numere naturale separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
În fișierul de ieșire cmmp.out vor fi scrise, în ordinea corespunzătoare citirii și separate prin câte un spațiu, cele N numere obținute din numerele date prin aplicarea operației cmmp.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N ≤ 100.000&lt;br /&gt;
*0 ≤ s[k] &amp;lt; 100.000&lt;br /&gt;
*Pentru 20% din teste 0 ≤ s[k] &amp;lt; 100&lt;br /&gt;
*Pentru 20% din teste 0 ≤ s[k] &amp;lt; 1000&lt;br /&gt;
*Dacă numărul dat este pătrat perfect, atunci operația cmmp îl lasă neschimbat.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
21 0 19 80&lt;br /&gt;
;Iesire&lt;br /&gt;
121 0 196 2809&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
import math&lt;br /&gt;
&lt;br /&gt;
def is_perfect_square(x):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Verifică dacă un număr este pătrat perfect.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    s = int(math.isqrt(x))&lt;br /&gt;
    return s * s == x&lt;br /&gt;
&lt;br /&gt;
def cmmp_operation(x):&lt;br /&gt;
    &amp;quot;&amp;quot;&amp;quot;Aplică operația cmmp pentru a obține cel mai mic pătrat perfect.&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
    if is_perfect_square(x):&lt;br /&gt;
        return x&lt;br /&gt;
    &lt;br /&gt;
    x_str = str(x)&lt;br /&gt;
    min_perfect_square = float(&#039;inf&#039;)&lt;br /&gt;
    &lt;br /&gt;
    for i in range(10):&lt;br /&gt;
        for j in range(10):&lt;br /&gt;
            for k in range(10):&lt;br /&gt;
                possible_numbers = [&lt;br /&gt;
                    int(str(i) + x_str),&lt;br /&gt;
                    int(x_str + str(j)),&lt;br /&gt;
                    int(str(i) + x_str + str(j)),&lt;br /&gt;
                    int(str(k) + str(i) + x_str + str(j)),&lt;br /&gt;
                ]&lt;br /&gt;
                for num in possible_numbers:&lt;br /&gt;
                    if is_perfect_square(num):&lt;br /&gt;
                        min_perfect_square = min(min_perfect_square, num)&lt;br /&gt;
    &lt;br /&gt;
    return min_perfect_square if min_perfect_square != float(&#039;inf&#039;) else x&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&#039;cmmp.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        data = f.read().splitlines()&lt;br /&gt;
&lt;br /&gt;
    N = int(data[0].strip())&lt;br /&gt;
    numbers = list(map(int, data[1].strip().split()))&lt;br /&gt;
    &lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 100000, &amp;quot;N trebuie să fie între 1 și 100000&amp;quot;&lt;br /&gt;
    assert all(0 &amp;lt;= x &amp;lt;= 100000 for x in numbers), &amp;quot;Numerele trebuie să fie între 0 și 100000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    results = [cmmp_operation(num) for num in numbers]&lt;br /&gt;
&lt;br /&gt;
    with open(&#039;cmmp.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        f.write(&#039; &#039;.join(map(str, results)) + &#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;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0624_-_Sah1&amp;diff=9923</id>
		<title>0624 - Sah1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0624_-_Sah1&amp;diff=9923"/>
		<updated>2024-06-03T03:45:17Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Alex dorește să își învețe fratele să joace șah. După ce i-a explicat regulile, Alex vrea să vadă dacă fratele lui a înțeles, aşa că îi dă un mic test. Având o tablă de șah de N linii şi N coloane, Alex pune pe ea M ture (tura atacă doar pe coloana și linia pe care se află) și un rege. Apoi îi cere fratelui său să îi spună de câte ture este atacat regele în acel moment și pe câte căsuțe de pe tablă poate fi pus regele, astf...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Alex dorește să își învețe fratele să joace șah. După ce i-a explicat regulile, Alex vrea să vadă dacă fratele lui a înțeles, aşa că îi dă un mic test. Având o tablă de șah de N linii şi N coloane, Alex pune pe ea M ture (tura atacă doar pe coloana și linia pe care se află) și un rege. Apoi îi cere fratelui său să îi spună de câte ture este atacat regele în acel moment și pe câte căsuțe de pe tablă poate fi pus regele, astfel încât să nu se afle în șah.&lt;br /&gt;
&lt;br /&gt;
În figura de mai jos avem trei ture şi un rege. Regele nu este atacat de nicio tură, fiindcă nu se află pe aceeaşi linie sau aceeaşi coloană cu niciuna dintre ele.&lt;br /&gt;
Cunoscând dimensiunea N a tablei de șah, poziția regelui de pe tablă, numărul M de ture și poziția fiecărei ture de pe tablă, se cere:&lt;br /&gt;
&lt;br /&gt;
a)să se afișeze numărul de ture care atacă regele în acel moment;&lt;br /&gt;
b)numărul de poziții în care regele poate fi pus, astfel încât să nu fie atacat de vreo tură.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare sah1.in conţine pe prima linie un număr natural p. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2. Pe a doua linie se află două numere naturale N și M, cu semnificația din enunț, pe linia a treia se află două numere naturale reprezentând poziția regelui pe tablă, iar pe fiecare dintre următoarele M linii se află câte două numere naturale reprezentând linia respectiv coloana unei ture.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Dacă valoarea lui p este 1, se va rezolva numai punctul a) din cerință. În acest caz, în fişierul de ieşire sah1.out se va scrie un număr natural reprezentând numărul de ture ce atacă regele.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui p este 2, se va rezolva numai punctul b) din cerință. În acest caz, în fișierul de ieșire sah1.out se va scrie pe prima linie un număr natural Q, reprezentând numărul de poziții pe care poate fi pus regele astfel încât să nu fie atacat de vreo tură.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ N ≤ 10 000&lt;br /&gt;
*0 ≤ M ≤ min(2 000, N2-1)&lt;br /&gt;
*Tabla de șah are liniile și coloanele numerotate de la 1 la N.&lt;br /&gt;
*Regele poate fi pus pe orice căsuță de pe tablă care nu este ocupată de o tură sau care nu este atacată de vreo tură.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
4 3&amp;lt;br&amp;gt;&lt;br /&gt;
3 1&amp;lt;br&amp;gt;&lt;br /&gt;
1 2&amp;lt;br&amp;gt;&lt;br /&gt;
2 3&amp;lt;br&amp;gt;&lt;br /&gt;
4 3&lt;br /&gt;
;Iesire&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;
def solve_p1(N, king_pos, rooks):&lt;br /&gt;
    king_row, king_col = king_pos&lt;br /&gt;
    attacks = 0&lt;br /&gt;
    &lt;br /&gt;
    for rook_row, rook_col in rooks:&lt;br /&gt;
        if rook_row == king_row or rook_col == king_col:&lt;br /&gt;
            attacks += 1&lt;br /&gt;
            &lt;br /&gt;
    return attacks&lt;br /&gt;
&lt;br /&gt;
def solve_p2(N, king_pos, rooks):&lt;br /&gt;
    king_row, king_col = king_pos&lt;br /&gt;
    safe_positions = 0&lt;br /&gt;
&lt;br /&gt;
    for row in range(1, N + 1):&lt;br /&gt;
        for col in range(1, N + 1):&lt;br /&gt;
            if row == king_row and col == king_col:&lt;br /&gt;
                continue&lt;br /&gt;
            safe = True&lt;br /&gt;
            for rook_row, rook_col in rooks:&lt;br /&gt;
                if row == rook_row or col == rook_col:&lt;br /&gt;
                    safe = False&lt;br /&gt;
                    break&lt;br /&gt;
            if safe:&lt;br /&gt;
                safe_positions += 1&lt;br /&gt;
                &lt;br /&gt;
    return safe_positions&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&#039;sah1.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        data = f.read().splitlines()&lt;br /&gt;
    &lt;br /&gt;
    p = int(data[0].strip())&lt;br /&gt;
    N, M = map(int, data[1].strip().split())&lt;br /&gt;
    king_pos = tuple(map(int, data[2].strip().split()))&lt;br /&gt;
    rooks = [tuple(map(int, line.strip().split())) for line in data[3:3 + M]]&lt;br /&gt;
&lt;br /&gt;
    # Restricții&lt;br /&gt;
    assert 2 &amp;lt;= N &amp;lt;= 10000, &amp;quot;N trebuie să fie între 2 și 10000&amp;quot;&lt;br /&gt;
    assert 0 &amp;lt;= M &amp;lt;= min(2000, N**2), &amp;quot;M trebuie să fie între 0 și min(2000, N**2)&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= king_pos[0] &amp;lt;= N and 1 &amp;lt;= king_pos[1] &amp;lt;= N, &amp;quot;Poziția regelui trebuie să fie validă&amp;quot;&lt;br /&gt;
    for rook in rooks:&lt;br /&gt;
        assert 1 &amp;lt;= rook[0] &amp;lt;= N and 1 &amp;lt;= rook[1] &amp;lt;= N, &amp;quot;Pozițiile turelor trebuie să fie valide&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        # Rezolvăm punctul a)&lt;br /&gt;
        result = solve_p1(N, king_pos, rooks)&lt;br /&gt;
        with open(&#039;sah1.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(f&amp;quot;{result}\n&amp;quot;)&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        # Rezolvăm punctul b)&lt;br /&gt;
        result = solve_p2(N, king_pos, rooks)&lt;br /&gt;
        with open(&#039;sah1.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
            f.write(f&amp;quot;{result}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=2510_-_vsecvente&amp;diff=9922</id>
		<title>2510 - vsecvente</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=2510_-_vsecvente&amp;diff=9922"/>
		<updated>2024-06-03T03:24:06Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Pagină nouă: == Cerința == Considerăm un șir de numere naturale nenule a[1], a[2], …, a[n]. În acest șir o V-secvență este o secvență maximală de forma a[x], a[x+1], …, a[y] cu proprietatea că toate numerele din secvență au valori mai mici sau egale cu V. Este maximală pentru că nu poate fi extinsă spre stânga sau spre dreapta. De exemplu, șirul a = 2, 2, 6, 4, 3, 14, 7, 4, 3, 36 are două 7-secvențe: 2, 2, 6, 4, 3 și 7, 4, 3. De asemenea, șirul are trei 4-secven...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Considerăm un șir de numere naturale nenule a[1], a[2], …, a[n]. În acest șir o V-secvență este o secvență maximală de forma a[x], a[x+1], …, a[y] cu proprietatea că toate numerele din secvență au valori mai mici sau egale cu V. Este maximală pentru că nu poate fi extinsă spre stânga sau spre dreapta. De exemplu, șirul a = 2, 2, 6, 4, 3, 14, 7, 4, 3, 36 are două 7-secvențe: 2, 2, 6, 4, 3 și 7, 4, 3. De asemenea, șirul are trei 4-secvențe: 2,2; 4,3; 4,3. De notat că 2,6,4,3 nu este 7-secvență, deoarece poate fi extinsă la capătul său stâng cu numărul 2.&lt;br /&gt;
Pentru un șir de numere dat, trebuie să răspundeți la Q întrebări notate V[1], V[2],…, V[Q]. Pentru fiecare întrebare i, dată prin numărul natural V[i], trebuie să aflați câte V[i]-secvențe sunt în șir.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare vsecvente.in conține pe prima linie numărul natural N. Pe a doua linie, separate prin câte un spațiu, se află cele N elemente ale șirului. Pe a treia linie se află un singur număr natural Q reprezentând numărul de întrebări. Pe a patra linie, se află șirul de Q numere naturale V[1], V[2],…, V[Q], separate prin câte un spațiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire vsecvente.out va conține Q linii. Linia a i-a va conține numărul de V[i]-secvențe aflate în șir.&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
*1 ≤ toate numerele din fișierul de intrare ≤ 1 100 000&lt;br /&gt;
*Pentru teste totalizând 75 puncte, 1 ≤ toate numerele din fișierul de intrare ≤ 550 000&lt;br /&gt;
;Intrare&lt;br /&gt;
10&amp;lt;br&amp;gt;&lt;br /&gt;
2 2 6 4 3 14 7 4 3 36&amp;lt;br&amp;gt;&lt;br /&gt;
3&amp;lt;br&amp;gt;&lt;br /&gt;
7 1 4&lt;br /&gt;
;Iesire&lt;br /&gt;
2&amp;lt;br&amp;gt;&lt;br /&gt;
0&amp;lt;br&amp;gt;&lt;br /&gt;
3&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    # Citirea datelor de intrare&lt;br /&gt;
    with open(&#039;vsecvente.in&#039;, &#039;r&#039;) as f:&lt;br /&gt;
        data = f.read().splitlines()&lt;br /&gt;
&lt;br /&gt;
    # Prima linie conține numărul N&lt;br /&gt;
    N = int(data[0].strip())&lt;br /&gt;
&lt;br /&gt;
    # Asigurăm că 1 ≤ N ≤ 100000&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 100000, &amp;quot;N trebuie să fie între 1 și 100000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # A doua linie conține N elemente ale șirului&lt;br /&gt;
    sir = list(map(int, data[1].strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm că lungimea șirului este corectă&lt;br /&gt;
    assert len(sir) == N, &amp;quot;Lungimea șirului trebuie să fie N&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # A treia linie conține numărul de întrebări Q&lt;br /&gt;
    Q = int(data[2].strip())&lt;br /&gt;
&lt;br /&gt;
    # Asigurăm că 1 ≤ Q ≤ 100000&lt;br /&gt;
    assert 1 &amp;lt;= Q &amp;lt;= 100000, &amp;quot;Q trebuie să fie între 1 și 100000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # A patra linie conține Q valori pentru interogări&lt;br /&gt;
    interogari = list(map(int, data[3].strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Verificăm că lungimea interogărilor este corectă&lt;br /&gt;
    assert len(interogari) == Q, &amp;quot;Numărul interogărilor trebuie să fie Q&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Asigurăm că toate elementele din șir sunt între 1 și 1,000,000,000&lt;br /&gt;
    for elem in sir:&lt;br /&gt;
        assert 1 &amp;lt;= elem &amp;lt;= 1000000000, &amp;quot;Elementele șirului trebuie să fie între 1 și 1,000,000,000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Asigurăm că toate interogările sunt între 1 și 1,000,000,000&lt;br /&gt;
    for interogare in interogari:&lt;br /&gt;
        assert 1 &amp;lt;= interogare &amp;lt;= 1000000000, &amp;quot;Interogările trebuie să fie între 1 și 1,000,000,000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    rezultate = []&lt;br /&gt;
&lt;br /&gt;
    # Pentru fiecare interogare, calculăm numărul de secvențe maxime pentru valoarea V&lt;br /&gt;
    for V in interogari:&lt;br /&gt;
        count = 0&lt;br /&gt;
        in_sequence = False&lt;br /&gt;
        for num in sir:&lt;br /&gt;
            if num &amp;lt;= V:&lt;br /&gt;
                if not in_sequence:&lt;br /&gt;
                    in_sequence = True&lt;br /&gt;
                    count += 1&lt;br /&gt;
            else:&lt;br /&gt;
                in_sequence = False&lt;br /&gt;
        rezultate.append(count)&lt;br /&gt;
&lt;br /&gt;
    # Scrierea rezultatelor în fișierul de ieșire&lt;br /&gt;
    with open(&#039;vsecvente.out&#039;, &#039;w&#039;) as f:&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            f.write(f&amp;quot;{rezultat}\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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3746_-_LeMans&amp;diff=9921</id>
		<title>3746 - LeMans</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3746_-_LeMans&amp;diff=9921"/>
		<updated>2024-06-03T03:12:07Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Ștergerea conținutului paginii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3397_-_Gard_2&amp;diff=9920</id>
		<title>3397 - Gard 2</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3397_-_Gard_2&amp;diff=9920"/>
		<updated>2024-06-03T02:50:30Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Ștergerea conținutului paginii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3713_%E2%80%93_Company_Tree&amp;diff=9919</id>
		<title>3713 – Company Tree</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3713_%E2%80%93_Company_Tree&amp;diff=9919"/>
		<updated>2024-06-03T02:29:27Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Ștergerea conținutului paginii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1622_-_Elicoptere&amp;diff=9918</id>
		<title>1622 - Elicoptere</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1622_-_Elicoptere&amp;diff=9918"/>
		<updated>2024-06-03T02:22:42Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Arhipelagul Zopopan este format din n insule de formă triunghiulară numerotate de la 1 la n. Fiecare insulă este localizată prin coordonatele carteziene ale vârfurilor.&lt;br /&gt;
&lt;br /&gt;
Administrația dorește să cumpere elicoptere pentru a realiza transportul între insule. Un elicopter va putea să asigure o rută între două insule pe distanța minimă obținută pe orizontală sau verticală (paralel cu axele de coordonate). În plus, datorită capacității rezervorului o astfel de rută nu poate să depășească o valoare k – număr natural. Elicopterele parcurg rutele în ambele sensuri.&lt;br /&gt;
Investiția trebuie să îndeplinească următoarele condiții:&lt;br /&gt;
&lt;br /&gt;
Numărul de elicoptere cumpărate să fie minim.&lt;br /&gt;
Numărul de perechi de insule între care se poate realiza transportul, folosind unul sau mai multe elicoptere să fie maxim.&lt;br /&gt;
Suma lungimii tuturor rutelor să fie minimă.&lt;br /&gt;
Să se scrie un program care pentru n, k şi coordonatele vârfurilor insulelor cunoscute, determină:&lt;br /&gt;
&lt;br /&gt;
*numărul minim de elicoptere ce vor fi cumpărate de administraţie;&lt;br /&gt;
*numărul perechilor neordonate de insule între care se poate realiza transportul prin elicoptere direct sau indirect;&lt;br /&gt;
*suma distantelor parcurse de toate elicopterele cumpărate (distanța parcursă de un elicopter se consideră distanța dintre insulele între care acesta asigură transportul).&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare elicoptere.in conține pe prima linie o valoare v ce poate fi 1, 2, sau 3, în funcţie de cerinţa ce va fi rezolvată, pe linia a doua numerele naturale n şi k separate printr-un spaţiu, cu semnificaţia de mai sus, iar pe următoarele n linii se află câte şase numere naturale x1, y1, x2, y2, x3 și y3 separate prin spațiu reprezentând coordonatele celor trei vârfuri ale insulelor în formatul (abscisă, ordonată).&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Dacă valoarea lui v este 1 atunci fişierul de ieşire elicoptere.out va conţine pe prima linie numai numărul minim de elicoptere, ce vor fi cumpărate de administraţie.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui v este 2 atunci fişierul de ieşire elicoptere.out va conţine pe prima linie numai numărul maxim de perechi de insule între care se poate realiza transportul prin elicoptere.&lt;br /&gt;
&lt;br /&gt;
Dacă valoarea lui v este 3 atunci fişierul de ieşire elicoptere.out va conţine pe prima linie suma minimă a lungimii rutelor parcurse de elicoptere.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 100;&lt;br /&gt;
*1 ≤ k ≤ 1000;&lt;br /&gt;
*coordonatele vârfurilor insulelor sunt numere naturale 0 ≤ xi , yi ≤ 106;&lt;br /&gt;
*orice două insule nu au puncte comune;&lt;br /&gt;
*la cerința 2, dacă se poate ajunge din insula A în insula B atunci evident că se poate ajunge și din B în A, *deci perechea formată din A și B se numără o singură dată;&lt;br /&gt;
*distanța dintre două insule poate fi şi număr real. La cerința 3 rezultatul se cere cu o aproximație de 0.001, adică rezultatul notat cu R se consideră corect, dacă faţă de rezultatul comisiei C îndeplineşte condiţia |R-C|&amp;lt;0.001.&lt;br /&gt;
*pentru a calcula şi afișa un număr real x cu o precizie cât mai mare vă recomandăm folosirea tipului double&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
6 11&amp;lt;br&amp;gt;&lt;br /&gt;
100 20 100 30 105 30&amp;lt;br&amp;gt;&lt;br /&gt;
20 20 30 30 20 30&amp;lt;br&amp;gt;&lt;br /&gt;
200 20 200 30 205 30&amp;lt;br&amp;gt;&lt;br /&gt;
100 40 100 50 105 40&amp;lt;br&amp;gt;&lt;br /&gt;
10 40 5 40 10 50&amp;lt;br&amp;gt;&lt;br /&gt;
10 20 5 30 10 30&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
3&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;
import math&lt;br /&gt;
&lt;br /&gt;
def citire_date_intrare():&lt;br /&gt;
    with open(&amp;quot;elicoptere.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        lines = f.readlines()&lt;br /&gt;
    &lt;br /&gt;
    p = int(lines[0].strip())&lt;br /&gt;
    n, k = map(int, lines[1].strip().split())&lt;br /&gt;
    insule = []&lt;br /&gt;
    for line in lines[2:]:&lt;br /&gt;
        insula = tuple(map(int, line.strip().split()))&lt;br /&gt;
        insule.append(insula)&lt;br /&gt;
    &lt;br /&gt;
    return p, n, k, insule&lt;br /&gt;
&lt;br /&gt;
def distanta(x1, y1, x2, y2):&lt;br /&gt;
    return math.sqrt((x1 - x2)**2 + (y1 - y2)**2)&lt;br /&gt;
&lt;br /&gt;
def rezolva_problema1(insule, n, k):&lt;br /&gt;
    vizitat = [False] * n&lt;br /&gt;
    numar_elicoptere = 0&lt;br /&gt;
&lt;br /&gt;
    def dfs(nod):&lt;br /&gt;
        stack = [nod]&lt;br /&gt;
        while stack:&lt;br /&gt;
            nod_curent = stack.pop()&lt;br /&gt;
            for vecin in range(n):&lt;br /&gt;
                if not vizitat[vecin] and exista_legatura(insule[nod_curent], insule[vecin], k):&lt;br /&gt;
                    vizitat[vecin] = True&lt;br /&gt;
                    stack.append(vecin)&lt;br /&gt;
&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        if not vizitat[i]:&lt;br /&gt;
            numar_elicoptere += 1&lt;br /&gt;
            vizitat[i] = True&lt;br /&gt;
            dfs(i)&lt;br /&gt;
&lt;br /&gt;
    return numar_elicoptere&lt;br /&gt;
&lt;br /&gt;
def rezolva_problema2(insule, n, k):&lt;br /&gt;
    numar_perechi = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i + 1, n):&lt;br /&gt;
            if exista_legatura(insule[i], insule[j], k):&lt;br /&gt;
                numar_perechi += 1&lt;br /&gt;
    return numar_perechi&lt;br /&gt;
&lt;br /&gt;
def rezolva_problema3(insule, n, k):&lt;br /&gt;
    graph = []&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(i + 1, n):&lt;br /&gt;
            if exista_legatura(insule[i], insule[j], k):&lt;br /&gt;
                dist = calculeaza_distanta(insule[i], insule[j])&lt;br /&gt;
                graph.append((dist, i, j))&lt;br /&gt;
    graph.sort()&lt;br /&gt;
&lt;br /&gt;
    parinte = list(range(n))&lt;br /&gt;
&lt;br /&gt;
    def gaseste(parinte, i):&lt;br /&gt;
        if parinte[i] == i:&lt;br /&gt;
            return i&lt;br /&gt;
        parinte[i] = gaseste(parinte, parinte[i])&lt;br /&gt;
        return parinte[i]&lt;br /&gt;
&lt;br /&gt;
    cost_total = 0&lt;br /&gt;
    muchii_folosite = 0&lt;br /&gt;
&lt;br /&gt;
    for dist, u, v in graph:&lt;br /&gt;
        rad_u = gaseste(parinte, u)&lt;br /&gt;
        rad_v = gaseste(parinte, v)&lt;br /&gt;
        if rad_u != rad_v:&lt;br /&gt;
            cost_total += dist&lt;br /&gt;
            muchii_folosite += 1&lt;br /&gt;
            parinte[rad_u] = rad_v&lt;br /&gt;
            if muchii_folosite == n - 1:&lt;br /&gt;
                break&lt;br /&gt;
&lt;br /&gt;
    return round(cost_total, 3)&lt;br /&gt;
&lt;br /&gt;
def exista_legatura(insula1, insula2, k):&lt;br /&gt;
    for i in range(0, 6, 2):&lt;br /&gt;
        for j in range(0, 6, 2):&lt;br /&gt;
            dist = distanta(insula1[i], insula1[i+1], insula2[j], insula2[j+1])&lt;br /&gt;
            if dist &amp;lt;= k:&lt;br /&gt;
                return True&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
def calculeaza_distanta(insula1, insula2):&lt;br /&gt;
    min_dist = float(&#039;inf&#039;)&lt;br /&gt;
    for i in range(0, 6, 2):&lt;br /&gt;
        for j in range(0, 6, 2):&lt;br /&gt;
            dist = distanta(insula1[i], insula1[i+1], insula2[j], insula2[j+1])&lt;br /&gt;
            if dist &amp;lt; min_dist:&lt;br /&gt;
                min_dist = dist&lt;br /&gt;
    return min_dist&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    p, n, k, insule = citire_date_intrare()&lt;br /&gt;
    &lt;br /&gt;
    # Verificare restrictii&lt;br /&gt;
    assert 1 &amp;lt;= n &amp;lt;= 100, &amp;quot;n trebuie să fie între 1 și 100&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= k &amp;lt;= 1000, &amp;quot;k trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    for x1, y1, x2, y2, x3, y3 in insule:&lt;br /&gt;
        assert 0 &amp;lt;= x1 &amp;lt;= 10**6 and 0 &amp;lt;= y1 &amp;lt;= 10**6, &amp;quot;Coordonatele trebuie să fie între 0 și 1,000,000&amp;quot;&lt;br /&gt;
        assert 0 &amp;lt;= x2 &amp;lt;= 10**6 and 0 &amp;lt;= y2 &amp;lt;= 10**6, &amp;quot;Coordonatele trebuie să fie între 0 și 1,000,000&amp;quot;&lt;br /&gt;
        assert 0 &amp;lt;= x3 &amp;lt;= 10**6 and 0 &amp;lt;= y3 &amp;lt;= 10**6, &amp;quot;Coordonatele trebuie să fie între 0 și 1,000,000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        rezultat = rezolva_problema1(insule, n, k)&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        rezultat = rezolva_problema2(insule, n, k)&lt;br /&gt;
    elif p == 3:&lt;br /&gt;
        rezultat = rezolva_problema3(insule, n, k)&lt;br /&gt;
    else:&lt;br /&gt;
        print(&amp;quot;Valoare p invalidă.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;elicoptere.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{rezultat}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4014_-_Rearanjare_Sir&amp;diff=9917</id>
		<title>4014 - Rearanjare Sir</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4014_-_Rearanjare_Sir&amp;diff=9917"/>
		<updated>2024-06-03T02:11:38Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Ștergerea conținutului paginii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4029_-_Depozit&amp;diff=9916</id>
		<title>4029 - Depozit</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4029_-_Depozit&amp;diff=9916"/>
		<updated>2024-06-03T01:51:33Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: /* Rezolvare */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-un depozit au fost așezate cutii identice, una după alta, eventual suprapuse, astfel încât numărul maxim de cutii suprapuse într-o stivă este N, iar între două stive cu același număr de cutii să existe cel puțin una cu mai multe cutii decât oricare dintre cele două. Considerăm că o stivă poate fi formată dintr-o singură cutie.&lt;br /&gt;
Proprietarul depozitului vă cere să aflați numărul maxim de stive care pot construi respectând regulile date și numărul de cutii care pot fi aranjate astfel. Pentru că numerele pot fi foarte mari rezultatele se vor afișa modulo 1.000.000.007.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură N.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul afișează pe ecran numărul maxim de stive care pot construi și numărul de cutii care pot fi aranjate modulo 1.000.000.007.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N ≤ 1.000.000.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3&lt;br /&gt;
;Iesire&lt;br /&gt;
7 11&lt;br /&gt;
&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
MOD = 1_000_000_007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def factorial(n, mod):&lt;br /&gt;
    result = 1&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        result = (result * i) % mod&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mod_inverse(x, mod):&lt;br /&gt;
    return pow(x, mod - 2, mod)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def comb(n, k, mod):&lt;br /&gt;
    if k &amp;gt; n:&lt;br /&gt;
        return 0&lt;br /&gt;
    num = factorial(n, mod)&lt;br /&gt;
    denom = (factorial(k, mod) * factorial(n - k, mod)) % mod&lt;br /&gt;
    return (num * mod_inverse(denom, mod)) % mod&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_stive_and_cuts(N):&lt;br /&gt;
    # Numărul maxim de stive este (N + 1) * N // 2&lt;br /&gt;
    max_stive = (N + 1) * N // 2&lt;br /&gt;
&lt;br /&gt;
    # Numărul de moduri de a aranja cutiile&lt;br /&gt;
    num_cuts = 1&lt;br /&gt;
    for i in range(1, N):&lt;br /&gt;
        num_cuts = (num_cuts * (2 * N - i) * mod_inverse(i, MOD)) % MOD&lt;br /&gt;
&lt;br /&gt;
    return max_stive, num_cuts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N = int(input().strip())&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 1000000000, &amp;quot;N nu este in parametru&amp;quot;&lt;br /&gt;
    max_stive, num_cuts = calculate_stive_and_cuts(N)&lt;br /&gt;
    print(max_stive+1, num_cuts+1)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=4029_-_Depozit&amp;diff=9915</id>
		<title>4029 - Depozit</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=4029_-_Depozit&amp;diff=9915"/>
		<updated>2024-06-03T01:50:56Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Într-un depozit au fost așezate cutii identice, una după alta, eventual suprapuse, astfel încât numărul maxim de cutii suprapuse într-o stivă este N, iar între două stive cu același număr de cutii să existe cel puțin una cu mai multe cutii decât oricare dintre cele două. Considerăm că o stivă poate fi formată dintr-o singură cutie.&lt;br /&gt;
Proprietarul depozitului vă cere să aflați numărul maxim de stive care pot construi respectând regulile date și numărul de cutii care pot fi aranjate astfel. Pentru că numerele pot fi foarte mari rezultatele se vor afișa modulo 1.000.000.007.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură N.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul afișează pe ecran numărul maxim de stive care pot construi și numărul de cutii care pot fi aranjate modulo 1.000.000.007.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N ≤ 1.000.000.000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3&lt;br /&gt;
;Iesire&lt;br /&gt;
7 11&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;
MOD = 1_000_000_007&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def factorial(n, mod):&lt;br /&gt;
    result = 1&lt;br /&gt;
    for i in range(2, n + 1):&lt;br /&gt;
        result = (result * i) % mod&lt;br /&gt;
    return result&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def mod_inverse(x, mod):&lt;br /&gt;
    return pow(x, mod - 2, mod)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def comb(n, k, mod):&lt;br /&gt;
    if k &amp;gt; n:&lt;br /&gt;
        return 0&lt;br /&gt;
    num = factorial(n, mod)&lt;br /&gt;
    denom = (factorial(k, mod) * factorial(n - k, mod)) % mod&lt;br /&gt;
    return (num * mod_inverse(denom, mod)) % mod&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def calculate_stive_and_cuts(N):&lt;br /&gt;
    # Numărul maxim de stive este (N + 1) * N // 2&lt;br /&gt;
    max_stive = (N + 1) * N // 2&lt;br /&gt;
&lt;br /&gt;
    # Numărul de moduri de a aranja cutiile&lt;br /&gt;
    num_cuts = 1&lt;br /&gt;
    for i in range(1, N):&lt;br /&gt;
        num_cuts = (num_cuts * (2 * N - i) * mod_inverse(i, MOD)) % MOD&lt;br /&gt;
&lt;br /&gt;
    return max_stive, num_cuts&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    N = int(input().strip())&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 10000007, &amp;quot;N nu este in parametru&amp;quot;&lt;br /&gt;
    max_stive, num_cuts = calculate_stive_and_cuts(N)&lt;br /&gt;
    print(max_stive+1, num_cuts+1)&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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0392_-_Cladire&amp;diff=9914</id>
		<title>0392 - Cladire</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0392_-_Cladire&amp;diff=9914"/>
		<updated>2024-06-03T01:36:15Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se consideră o clădire de formă dreptunghiulară formată din n*m camere, dispuse pe n linii și m coloane. Intrarea în clădire este în camera de coordonate (1,1), iar ieșirea în camera de coordonate (n,m). Din orice cameră (i,j) se poate ajunge numai în camerele (i+1,j) sau (i,j+1). Determinați în câte moduri se poate ajunge din camera (1,1) în camera (n,m).&lt;br /&gt;
&lt;br /&gt;
Deoarece numărul de posibilități poate fi foarte mare, se cere doar restul acestui număr la împărțirea cu 9901.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare cladire.in conţine pe prima linie numerele n m.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fişierul de ieşire cladire.out va conţine pe prima linie numărul P, reprezentând în câte moduri se poate ajunge din camera (1,1) în camera (n,m), număr afișat modulo 9901.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n , m ≤ 1000&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3 3&lt;br /&gt;
;Iesire&lt;br /&gt;
6&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;
def count_paths(n, m):&lt;br /&gt;
    MOD = 9901&lt;br /&gt;
    dp = [[0] * m for _ in range(n)]&lt;br /&gt;
    dp[0][0] = 1&lt;br /&gt;
    &lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if i &amp;gt; 0:&lt;br /&gt;
                dp[i][j] += dp[i - 1][j]&lt;br /&gt;
            if j &amp;gt; 0:&lt;br /&gt;
                dp[i][j] += dp[i][j - 1]&lt;br /&gt;
            dp[i][j] %= MOD&lt;br /&gt;
    &lt;br /&gt;
    return dp[n - 1][m - 1]&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;cladire.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m = map(int, f.readline().strip().split())&lt;br /&gt;
    &lt;br /&gt;
    result = count_paths(n, m)&lt;br /&gt;
    &lt;br /&gt;
    with open(&amp;quot;cladire.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{result}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1187_-_Roboti_1&amp;diff=9913</id>
		<title>1187 - Roboti 1</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1187_-_Roboti_1&amp;diff=9913"/>
		<updated>2024-06-03T01:33:35Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
O firmă de construcţii imobiliare a achiziţionat recent un teren dreptunghiular de dimensiuni N×M. Terenul este împărțit în parcele de dimensiune 1x1. Pe unele dintre cele N×M parcele sunt plantați copaci. Firma dorește construirea unui grandios complex comercial și este necesară defrișarea întregului teren. În acest scop sunt utilizați roboți, fiecare robot având baza un pătrat de latură L. Suprafața defrișată de fiecare robot la un moment dat este chiar aria de acoperire a robotului, L×L. Fiecare robot pătrunde prin colțul stânga sus de coordonate (1, 1), se poate deplasa doar în dreapta și în jos și poate părăsi suprafața numai prin colțul dreapta jos, de coordonate (N, M).&lt;br /&gt;
Cunoscând dimensiunile N, M ale terenului și coordonatele parcelelor în care sunt plantați copaci se cere:&lt;br /&gt;
&lt;br /&gt;
1. Numărul minim de roboți necesari defrișării întregului teren.&lt;br /&gt;
2. Să se răspundă la Q interogări de forma k, unde k este un număr natural. Pentru fiecare interogare de această formă va trebui determinată latura minimă a unui robot astfel încât să fie necesari pentru defrișare cel mult k roboți.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare roboti1.in conţine:&lt;br /&gt;
&lt;br /&gt;
*Pe prima linie un număr natural p reprezentând varianta cerinței de rezolvare. Pentru toate testele de intrare, numărul p poate avea doar valoarea 1 sau valoarea 2.&lt;br /&gt;
*Pe a doua linie se află 3 numere naturale N, M, T separate prin câte un spațiu reprezentând numărul liniilor, numărul coloanelor terenului dreptunghiular, respectiv numărul copacilor plantați.&lt;br /&gt;
*Următoarele T linii conțin fiecare câte două numere naturale x y separate prin câte un spațiu, reprezentând linia, respectiv coloana parcelei în care este plantat un copac.&lt;br /&gt;
*În cazul cerinței 1, ultima linie conține un singur număr natural L, reprezentând latura unui robot.&lt;br /&gt;
*În cazul cerinței 2, penultima linie va conține un număr natural Q, iar ultima linie Q numere naturale k[1], k[2], …, k[Q] separate prin câte un spațiu, reprezentând numărul maxim de roboți ce pot fi utilizați în fiecare dintre cele Q interogări.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
*Dacă valoarea lui p este 1, se va rezolva numai cerința 1. În acest caz, în fişierul de ieşire roboti1.out se va scrie un singur număr natural n1, reprezentând numărul minim de roboți utilizați.&lt;br /&gt;
*Dacă valoarea lui p este 2, se va rezolva numai cerința 2. În acest caz, în fişierul de ieşire roboti1.out se vor scrie Q linii. Fiecare linie i va conţine câte un număr natural ni, reprezentând latura minimă a unui robot astfel încât pentru defrișare să fie utilizați cel mult ki roboți.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*2 ≤ N, M, L ≤ 150&lt;br /&gt;
*1 ≤ Q ≤ 150&lt;br /&gt;
*1 ≤ k[i] ≤ 150, 1 ≤ i ≤ Q&lt;br /&gt;
*1 ≤ T ≤ 1000&lt;br /&gt;
*Latura robotului nu poate fi mai mare decât dimensiunile terenului&lt;br /&gt;
*Pe tot parcursul deplasării, fiecare robot se va afla în interiorul suprafeţei terenului.&lt;br /&gt;
*În orice moment în interiorul suprafeţei terenului se va afla cel mult un robot.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1&amp;lt;br&amp;gt;&lt;br /&gt;
6 8 8&amp;lt;br&amp;gt;&lt;br /&gt;
4 1&amp;lt;br&amp;gt;&lt;br /&gt;
5 3&amp;lt;br&amp;gt;&lt;br /&gt;
3 5&amp;lt;br&amp;gt;&lt;br /&gt;
2 6&amp;lt;br&amp;gt;&lt;br /&gt;
5 5&amp;lt;br&amp;gt;&lt;br /&gt;
4 7&amp;lt;br&amp;gt;&lt;br /&gt;
3 8&amp;lt;br&amp;gt;&lt;br /&gt;
6 8&amp;lt;br&amp;gt;&lt;br /&gt;
4&lt;br /&gt;
;Iesire&lt;br /&gt;
1&lt;br /&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;
from collections import deque&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def citire_date_intrare(fisier_intrare):&lt;br /&gt;
    with open(fisier_intrare, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        p = int(f.readline().strip())&lt;br /&gt;
        n, m, l = map(int, f.readline().strip().split())&lt;br /&gt;
        copaci = []&lt;br /&gt;
        for _ in range(l):&lt;br /&gt;
            x, y = map(int, f.readline().strip().split())&lt;br /&gt;
            copaci.append((x - 1, y - 1))  # Corectăm indexarea la 0&lt;br /&gt;
        if p == 2:&lt;br /&gt;
            Q = int(f.readline().strip())&lt;br /&gt;
            k = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        else:&lt;br /&gt;
            Q = 0&lt;br /&gt;
            k = []&lt;br /&gt;
    return p, n, m, l, copaci, Q, k&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def bfs(n, m, copaci, latura):&lt;br /&gt;
    def in_bounds(x, y):&lt;br /&gt;
        return 0 &amp;lt;= x &amp;lt; n and 0 &amp;lt;= y &amp;lt; m&lt;br /&gt;
&lt;br /&gt;
    dx = [0, 1, 0, -1]&lt;br /&gt;
    dy = [1, 0, -1, 0]&lt;br /&gt;
&lt;br /&gt;
    vizitat = [[False] * m for _ in range(n)]&lt;br /&gt;
    for x, y in copaci:&lt;br /&gt;
        vizitat[x][y] = True&lt;br /&gt;
&lt;br /&gt;
    num_roboți = 0&lt;br /&gt;
    for i in range(n):&lt;br /&gt;
        for j in range(m):&lt;br /&gt;
            if not vizitat[i][j]:&lt;br /&gt;
                num_roboți += 1&lt;br /&gt;
                q = deque([(i, j)])&lt;br /&gt;
                vizitat[i][j] = True&lt;br /&gt;
                while q:&lt;br /&gt;
                    x, y = q.popleft()&lt;br /&gt;
                    for d in range(4):&lt;br /&gt;
                        for k in range(1, latura + 1):&lt;br /&gt;
                            nx, ny = x + dx[d] * k, y + dy[d] * k&lt;br /&gt;
                            if in_bounds(nx, ny) and not vizitat[nx][ny]:&lt;br /&gt;
                                vizitat[nx][ny] = True&lt;br /&gt;
                                q.append((nx, ny))&lt;br /&gt;
    return num_roboți&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def defrisare_minima(n, m, copaci, max_roboți):&lt;br /&gt;
    def numar_roboți(latura):&lt;br /&gt;
        return bfs(n, m, copaci, latura)&lt;br /&gt;
&lt;br /&gt;
    stanga, dreapta = 1, min(n, m)&lt;br /&gt;
    while stanga &amp;lt; dreapta:&lt;br /&gt;
        mijloc = (stanga + dreapta) // 2&lt;br /&gt;
        if numar_roboți(mijloc) &amp;lt;= max_roboți:&lt;br /&gt;
            dreapta = mijloc&lt;br /&gt;
        else:&lt;br /&gt;
            stanga = mijloc + 1&lt;br /&gt;
    return stanga&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def latura_minima_robot(n, m, copaci, Q, k):&lt;br /&gt;
    rezultate = []&lt;br /&gt;
    for fiecare_k in k:&lt;br /&gt;
        rezultate.append(defrisare_minima(n, m, copaci, fiecare_k))&lt;br /&gt;
    return rezultate&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def scrie_rezultate(fisier_iesire, rezultate):&lt;br /&gt;
    with open(fisier_iesire, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        for rezultat in rezultate:&lt;br /&gt;
            f.write(f&amp;quot;{rezultat}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    fisier_intrare = &amp;quot;roboti.in&amp;quot;&lt;br /&gt;
    fisier_iesire = &amp;quot;roboti.out&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    p, n, m, l, copaci, Q, k = citire_date_intrare(fisier_intrare)&lt;br /&gt;
&lt;br /&gt;
    # Restricții și precizări&lt;br /&gt;
    assert 2 &amp;lt;= n &amp;lt;= 150, &amp;quot;n trebuie să fie între 2 și 150&amp;quot;&lt;br /&gt;
    assert 2 &amp;lt;= m &amp;lt;= 150, &amp;quot;m trebuie să fie între 2 și 150&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= l &amp;lt;= 150, &amp;quot;l trebuie să fie între 1 și 150&amp;quot;&lt;br /&gt;
    for x, y in copaci:&lt;br /&gt;
        assert 0 &amp;lt;= x &amp;lt; n, &amp;quot;Coordonata x trebuie să fie între 1 și n&amp;quot;&lt;br /&gt;
        assert 0 &amp;lt;= y &amp;lt; m, &amp;quot;Coordonata y trebuie să fie între 1 și m&amp;quot;&lt;br /&gt;
    if p == 2:&lt;br /&gt;
        assert 1 &amp;lt;= Q &amp;lt;= 1000, &amp;quot;Q trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
        for fiecare_k in k:&lt;br /&gt;
            assert 1 &amp;lt;= fiecare_k &amp;lt;= 150, &amp;quot;k[i] trebuie să fie între 1 și 150&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    if p == 1:&lt;br /&gt;
        num_roboți = defrisare_minima(n, m, copaci, l)&lt;br /&gt;
        rezultate = [num_roboți]&lt;br /&gt;
    elif p == 2:&lt;br /&gt;
        laturi_minime = latura_minima_robot(n, m, copaci, Q, k)&lt;br /&gt;
        rezultate = laturi_minime&lt;br /&gt;
&lt;br /&gt;
    scrie_rezultate(fisier_iesire, 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;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1063_-_Arme&amp;diff=9912</id>
		<title>1063 - Arme</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1063_-_Arme&amp;diff=9912"/>
		<updated>2024-06-03T00:01:00Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: /* Exemplu 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Vasile joacă (din nou!) jocul său preferat cu împuşcături. Personajul său are la brâu N arme, aşezate în N huse speciale, numerotate de la 1 la N. Arma din husa i are puterea pbi (1≤i≤N).&lt;br /&gt;
&lt;br /&gt;
În camera armelor a găsit M arme, aşezate pe perete, în M locaţii, numerotate de la 1 la M. Pentru fiecare armă j (1≤j≤M) este cunoscută puterea sa pcj.&lt;br /&gt;
&lt;br /&gt;
Vasile poate înlocui arme pe care le are la brâu cu arme aflate pe perete în camera armelor. La o înlocuire el ia arma de pe perete din locaţia j (1≤j≤M) şi o pune la brâu în husa i (1≤i≤N), iar arma din husa i o pune pe perete în locaţia j.&lt;br /&gt;
Scrieţi un program care să determine suma maximă a puterilor armelor pe care le va avea la brâu Vasile după efectuarea înlocuirilor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare arme.in conține pe prima linie numerele naturale N M, reprezentând numărul de arme pe care le are la brâu, respectiv numărul de arme aflate în camera armelor. Pe a doua linie se află N numere naturale pb1 pb2 … pbN reprezentând în ordine puterile armelor pe care Vasile le are la brâu. Pe a treia linie se află M numere naturale pc1 pc2 … pcM reprezentând în ordine puterile armelor aflate în camera armelor. Numerele scrise pe aceeaşi linie sunt separate prin spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire arme.out va conține o singură linie pe care va fi scrisă suma maximă a puterilor armelor de la brâul lui Vasile, după efectuarea înlocuirilor.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N, M ≤ 1000&lt;br /&gt;
*Puterile armelor sunt numere naturale ≤ 10.000.&lt;br /&gt;
* Greutatea și valoarea fiecărei arme sunt numere întregi pozitive&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3 2&amp;lt;br&amp;gt;&lt;br /&gt;
3 1 7&amp;lt;br&amp;gt;&lt;br /&gt;
4 5&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
16&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;
def main():&lt;br /&gt;
    with open(&amp;quot;arme.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        # Citim dimensiunile N și M&lt;br /&gt;
        N, M = map(int, f.readline().strip().split())&lt;br /&gt;
        &lt;br /&gt;
        # Citim puterile armelor de la brâu&lt;br /&gt;
        puteri_brau = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        &lt;br /&gt;
        # Citim puterile armelor din camera armelor&lt;br /&gt;
        puteri_camera = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Restricții și precizări&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 1000, &amp;quot;N trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= M &amp;lt;= 1000, &amp;quot;M trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= pb &amp;lt;= 10000 for pb in puteri_brau), &amp;quot;Puterea armelor de la brâu trebuie să fie între 1 și 10000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= pc &amp;lt;= 10000 for pc in puteri_camera), &amp;quot;Puterea armelor din cameră trebuie să fie între 1 și 10000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Sortăm puterile armelor de la brâu în ordine crescătoare&lt;br /&gt;
    puteri_brau.sort()&lt;br /&gt;
&lt;br /&gt;
    # Sortăm puterile armelor din cameră în ordine descrescătoare&lt;br /&gt;
    puteri_camera.sort(reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Înlocuim armele de la brâu cu cele din cameră&lt;br /&gt;
    for i in range(min(N, M)):&lt;br /&gt;
        if puteri_camera[i] &amp;gt; puteri_brau[i]:&lt;br /&gt;
            puteri_brau[i] = puteri_camera[i]&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    # Calculăm suma maximă a puterilor armelor de la brâu&lt;br /&gt;
    suma_maxima = sum(puteri_brau)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;arme.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{suma_maxima}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1063_-_Arme&amp;diff=9911</id>
		<title>1063 - Arme</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1063_-_Arme&amp;diff=9911"/>
		<updated>2024-06-03T00:00:38Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Vasile joacă (din nou!) jocul său preferat cu împuşcături. Personajul său are la brâu N arme, aşezate în N huse speciale, numerotate de la 1 la N. Arma din husa i are puterea pbi (1≤i≤N).&lt;br /&gt;
&lt;br /&gt;
În camera armelor a găsit M arme, aşezate pe perete, în M locaţii, numerotate de la 1 la M. Pentru fiecare armă j (1≤j≤M) este cunoscută puterea sa pcj.&lt;br /&gt;
&lt;br /&gt;
Vasile poate înlocui arme pe care le are la brâu cu arme aflate pe perete în camera armelor. La o înlocuire el ia arma de pe perete din locaţia j (1≤j≤M) şi o pune la brâu în husa i (1≤i≤N), iar arma din husa i o pune pe perete în locaţia j.&lt;br /&gt;
Scrieţi un program care să determine suma maximă a puterilor armelor pe care le va avea la brâu Vasile după efectuarea înlocuirilor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare arme.in conține pe prima linie numerele naturale N M, reprezentând numărul de arme pe care le are la brâu, respectiv numărul de arme aflate în camera armelor. Pe a doua linie se află N numere naturale pb1 pb2 … pbN reprezentând în ordine puterile armelor pe care Vasile le are la brâu. Pe a treia linie se află M numere naturale pc1 pc2 … pcM reprezentând în ordine puterile armelor aflate în camera armelor. Numerele scrise pe aceeaşi linie sunt separate prin spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire arme.out va conține o singură linie pe care va fi scrisă suma maximă a puterilor armelor de la brâul lui Vasile, după efectuarea înlocuirilor.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N, M ≤ 1000&lt;br /&gt;
*Puterile armelor sunt numere naturale ≤ 10.000.&lt;br /&gt;
* Greutatea și valoarea fiecărei arme sunt numere întregi pozitive&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
2 3&amp;lt;br&amp;gt;&lt;br /&gt;
3 4&amp;lt;br&amp;gt;&lt;br /&gt;
4 5&amp;lt;br&amp;gt;&lt;br /&gt;
5 6&amp;lt;br&amp;gt;&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
7&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;arme.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        # Citim dimensiunile N și M&lt;br /&gt;
        N, M = map(int, f.readline().strip().split())&lt;br /&gt;
        &lt;br /&gt;
        # Citim puterile armelor de la brâu&lt;br /&gt;
        puteri_brau = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        &lt;br /&gt;
        # Citim puterile armelor din camera armelor&lt;br /&gt;
        puteri_camera = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Restricții și precizări&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 1000, &amp;quot;N trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= M &amp;lt;= 1000, &amp;quot;M trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= pb &amp;lt;= 10000 for pb in puteri_brau), &amp;quot;Puterea armelor de la brâu trebuie să fie între 1 și 10000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= pc &amp;lt;= 10000 for pc in puteri_camera), &amp;quot;Puterea armelor din cameră trebuie să fie între 1 și 10000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Sortăm puterile armelor de la brâu în ordine crescătoare&lt;br /&gt;
    puteri_brau.sort()&lt;br /&gt;
&lt;br /&gt;
    # Sortăm puterile armelor din cameră în ordine descrescătoare&lt;br /&gt;
    puteri_camera.sort(reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Înlocuim armele de la brâu cu cele din cameră&lt;br /&gt;
    for i in range(min(N, M)):&lt;br /&gt;
        if puteri_camera[i] &amp;gt; puteri_brau[i]:&lt;br /&gt;
            puteri_brau[i] = puteri_camera[i]&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    # Calculăm suma maximă a puterilor armelor de la brâu&lt;br /&gt;
    suma_maxima = sum(puteri_brau)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;arme.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{suma_maxima}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1063_-_Arme&amp;diff=9910</id>
		<title>1063 - Arme</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1063_-_Arme&amp;diff=9910"/>
		<updated>2024-06-03T00:00:27Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Vasile joacă (din nou!) jocul său preferat cu împuşcături. Personajul său are la brâu N arme, aşezate în N huse speciale, numerotate de la 1 la N. Arma din husa i are puterea pbi (1≤i≤N).&lt;br /&gt;
&lt;br /&gt;
În camera armelor a găsit M arme, aşezate pe perete, în M locaţii, numerotate de la 1 la M. Pentru fiecare armă j (1≤j≤M) este cunoscută puterea sa pcj.&lt;br /&gt;
&lt;br /&gt;
Vasile poate înlocui arme pe care le are la brâu cu arme aflate pe perete în camera armelor. La o înlocuire el ia arma de pe perete din locaţia j (1≤j≤M) şi o pune la brâu în husa i (1≤i≤N), iar arma din husa i o pune pe perete în locaţia j.&lt;br /&gt;
Scrieţi un program care să determine suma maximă a puterilor armelor pe care le va avea la brâu Vasile după efectuarea înlocuirilor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare arme.in conține pe prima linie numerele naturale N M, reprezentând numărul de arme pe care le are la brâu, respectiv numărul de arme aflate în camera armelor. Pe a doua linie se află N numere naturale pb1 pb2 … pbN reprezentând în ordine puterile armelor pe care Vasile le are la brâu. Pe a treia linie se află M numere naturale pc1 pc2 … pcM reprezentând în ordine puterile armelor aflate în camera armelor. Numerele scrise pe aceeaşi linie sunt separate prin spaţiu.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire arme.out va conține o singură linie pe care va fi scrisă suma maximă a puterilor armelor de la brâul lui Vasile, după efectuarea înlocuirilor.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ N, M ≤ 1000&lt;br /&gt;
*Puterile armelor sunt numere naturale ≤ 10.000.&lt;br /&gt;
* Greutatea și valoarea fiecărei arme sunt numere întregi pozitive&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
2 3&amp;lt;br&amp;gt;&lt;br /&gt;
3 4&amp;lt;br&amp;gt;&lt;br /&gt;
4 5&amp;lt;br&amp;gt;&lt;br /&gt;
5 6&amp;lt;br&amp;gt;&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
7&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
3&amp;lt;br&amp;gt;&lt;br /&gt;
1 1&amp;lt;br&amp;gt;&lt;br /&gt;
3 4&amp;lt;br&amp;gt;&lt;br /&gt;
4 5&amp;lt;br&amp;gt;&lt;br /&gt;
5&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
6&lt;br /&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;
def main():&lt;br /&gt;
    with open(&amp;quot;arme.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        # Citim dimensiunile N și M&lt;br /&gt;
        N, M = map(int, f.readline().strip().split())&lt;br /&gt;
        &lt;br /&gt;
        # Citim puterile armelor de la brâu&lt;br /&gt;
        puteri_brau = list(map(int, f.readline().strip().split()))&lt;br /&gt;
        &lt;br /&gt;
        # Citim puterile armelor din camera armelor&lt;br /&gt;
        puteri_camera = list(map(int, f.readline().strip().split()))&lt;br /&gt;
&lt;br /&gt;
    # Restricții și precizări&lt;br /&gt;
    assert 1 &amp;lt;= N &amp;lt;= 1000, &amp;quot;N trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    assert 1 &amp;lt;= M &amp;lt;= 1000, &amp;quot;M trebuie să fie între 1 și 1000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= pb &amp;lt;= 10000 for pb in puteri_brau), &amp;quot;Puterea armelor de la brâu trebuie să fie între 1 și 10000&amp;quot;&lt;br /&gt;
    assert all(1 &amp;lt;= pc &amp;lt;= 10000 for pc in puteri_camera), &amp;quot;Puterea armelor din cameră trebuie să fie între 1 și 10000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
    # Sortăm puterile armelor de la brâu în ordine crescătoare&lt;br /&gt;
    puteri_brau.sort()&lt;br /&gt;
&lt;br /&gt;
    # Sortăm puterile armelor din cameră în ordine descrescătoare&lt;br /&gt;
    puteri_camera.sort(reverse=True)&lt;br /&gt;
&lt;br /&gt;
    # Înlocuim armele de la brâu cu cele din cameră&lt;br /&gt;
    for i in range(min(N, M)):&lt;br /&gt;
        if puteri_camera[i] &amp;gt; puteri_brau[i]:&lt;br /&gt;
            puteri_brau[i] = puteri_camera[i]&lt;br /&gt;
        else:&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    # Calculăm suma maximă a puterilor armelor de la brâu&lt;br /&gt;
    suma_maxima = sum(puteri_brau)&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;arme.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{suma_maxima}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3739_-_Cafea&amp;diff=9909</id>
		<title>3739 - Cafea</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3739_-_Cafea&amp;diff=9909"/>
		<updated>2024-06-02T23:56:32Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Algorel a primit de la părinţi o sumă de bani, S, şi o plasă în care încap K grame de cafea. Algorel trebuie să meargă la piaţă şi să cumpere suficientă cafea încât să umple plasa. Pe de altă parte, părinţii nu îi cer înapoi restul. Dacă va reuşi să umple plasa, va putea păstra diferenţa de bani dintre suma primită S şi costul total al cafelei achiziţionate. Dacă nu va reuşi să umple plasa, atunci nu va rămâne cu niciun ban.&lt;br /&gt;
&lt;br /&gt;
La piaţă există N comercianţi care vând cafea. Fiecare dintre aceştia are o cantitate de Ci grame de cafea pe care o vinde cu preţul total de Pi lei (1 ≤ i ≤ N). Comercianţii nu au monede mai mici de 1 leu, aşa că, în cazul în care clientul cumpără o cantitate de cafea al cărei preţ nu este un număr întreg, acesta va plăti suma rotunjită la cea mai apropiată valoare întreagă mai mare sau egală cu valoarea datorată. De exemplu, dacă un comerciant vinde 1000 de grame de cafea la preţul de 25 de lei şi un client vrea să cumpere 250 de grame, atunci acesta va plăti 7 lei, deşi suma datorată era de 6.25 lei.&lt;br /&gt;
Ajutaţi-l pe Algorel să rămână cu o sumă cât mai mare de bani, scriind un program care face acest calcul pe baza datelor corespunzătoare comercianţilor.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fişierul de intrare  cafea.in va conţine pe prima linie, separate prin câte un spaţiu numerele naturale K, S şi N corespunzătoare capacităţii plasei, sumei pe pare o primeşte de la părinţi şi numărului de vânzători. Pe următoarele N linii se vor afla datele corespunzătoare comercianţilor: pe linia i + 1 se vor afla numerele naturale Ci şi Pi reprezentând cantitatea maximă de cafea pe care o vinde comerciantul numărul i şi preţul total cerut de acesta.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire cafea.out va conține pe prima linie un număr natural, reprezentând suma maximă care îi rămâne lui Algorel după ce umple plasa cu cafea.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ K ≤ 1 000 000 000&lt;br /&gt;
*1 ≤ S ≤ 1 000 000 000&lt;br /&gt;
*1 ≤ N ≤ 100 000&lt;br /&gt;
*Ci ∈ [1, 100 000], pentru 1 ≤ i ≤ N&lt;br /&gt;
*Pi ∈ [1, 100 000], pentru 1 ≤ i ≤ N&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
1000 200 4&amp;lt;br&amp;gt;&lt;br /&gt;
500 85&amp;lt;br&amp;gt;&lt;br /&gt;
600 45&amp;lt;br&amp;gt;&lt;br /&gt;
250 35&amp;lt;br&amp;gt;&lt;br /&gt;
1000 1000&lt;br /&gt;
;Iesire&lt;br /&gt;
94&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;cafea.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        k, s, n = map(int, f.readline().strip().split())&lt;br /&gt;
        comercianti = []&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            ci, pi = map(int, f.readline().strip().split())&lt;br /&gt;
            comercianti.append((pi / ci, ci, pi))  # (preț per gram, cantitate maximă, preț total)&lt;br /&gt;
&lt;br /&gt;
    # Sortăm comercianții după prețul per gram&lt;br /&gt;
    comercianti.sort()&lt;br /&gt;
&lt;br /&gt;
    cantitate_cumparata = 0&lt;br /&gt;
    cost_total = 0&lt;br /&gt;
&lt;br /&gt;
    for pret_per_gram, cantitate_max, pret_total in comercianti:&lt;br /&gt;
        if cantitate_cumparata + cantitate_max &amp;lt;= k:&lt;br /&gt;
            cantitate_cumparata += cantitate_max&lt;br /&gt;
            cost_total += pret_total&lt;br /&gt;
        else:&lt;br /&gt;
            cantitate_necesara = k - cantitate_cumparata&lt;br /&gt;
            cost_total += cantitate_necesara * pret_per_gram&lt;br /&gt;
            cantitate_cumparata += cantitate_necesara&lt;br /&gt;
            break&lt;br /&gt;
&lt;br /&gt;
    bani_ramasi = s - cost_total&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;cafea.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{int(bani_ramasi)}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3943_-_Cerc5&amp;diff=9908</id>
		<title>3943 - Cerc5</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3943_-_Cerc5&amp;diff=9908"/>
		<updated>2024-06-02T23:52:39Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se dă numărul natural n. Determinati o modalitate de așezare a numerelor din mulțimea 1,2,…,n&lt;br /&gt;
 pe un cerc astfel încât suma a oricare două nume învecinate să nu fie pătrat perfect.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran cele n numere cerute, separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 35&lt;br /&gt;
*dacă există mai multe modalități de aranjare a numerelor astfel încât să fie îndeplinită condiția, se poate afișa oricare;&lt;br /&gt;
*dacă nu există nicio modalitate de aranjare se va afișa mesajul nu exista&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
32&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
1 8 28 21 4 32 17 19 30 6 3 13 12 24 25 11 5 31 18 7 29 20 16 9 27 22 14 2 23 26 10 15&lt;br /&gt;
&lt;br /&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;
import math&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Verifică dacă un număr este pătrat perfect&lt;br /&gt;
def este_patrat_perfect(x):&lt;br /&gt;
    return int(math.isqrt(x)) ** 2 == x&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcție de backtracking pentru a găsi o soluție validă&lt;br /&gt;
def backtrack(cerc, vizitat, n):&lt;br /&gt;
    if len(cerc) == n:&lt;br /&gt;
        # Verifică dacă primul și ultimul element formează un pătrat perfect&lt;br /&gt;
        return este_patrat_perfect(cerc[-1] + cerc[0])&lt;br /&gt;
&lt;br /&gt;
    for i in range(1, n + 1):&lt;br /&gt;
        if not vizitat[i]:&lt;br /&gt;
            if not cerc or este_patrat_perfect(cerc[-1] + i):&lt;br /&gt;
                cerc.append(i)&lt;br /&gt;
                vizitat[i] = True&lt;br /&gt;
                if backtrack(cerc, vizitat, n):&lt;br /&gt;
                    return True&lt;br /&gt;
                cerc.pop()&lt;br /&gt;
                vizitat[i] = False&lt;br /&gt;
    return False&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcție pentru a găsi aranjarea corectă&lt;br /&gt;
def gaseste_aranjare(n):&lt;br /&gt;
    cerc = []&lt;br /&gt;
    vizitat = [False] * (n + 1)&lt;br /&gt;
    if backtrack(cerc, vizitat, n):&lt;br /&gt;
        return cerc&lt;br /&gt;
    else:&lt;br /&gt;
        return &amp;quot;nu exista&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
# Funcția principală&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input().strip())&lt;br /&gt;
    rezultat = gaseste_aranjare(n)&lt;br /&gt;
    if isinstance(rezultat, list):&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(str, rezultat)))&lt;br /&gt;
    else:&lt;br /&gt;
        print(rezultat)&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;
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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3156_-_perm_min_max&amp;diff=9907</id>
		<title>3156 - perm min max</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3156_-_perm_min_max&amp;diff=9907"/>
		<updated>2024-06-02T23:40:20Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se citește o mulțime cu n numere naturale. Afișați în ordine lexicografică toate permutările mulțimii citite în care elementul minim și cel maxim nu își schimbă poziția.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Programul citește de la tastatură numărul n, iar apoi n numere naturale distincte, separate prin spații.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Programul va afișa pe ecran permutările cerute, pe rânduri separate, fiecare permutare având elementele separate prin câte un spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 10&lt;br /&gt;
*cele n numere citite vor fi mai mici decât 1.000.000.000 și vor fi distincte&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
6&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 7 9 4 5&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
4 2 5 9 7 8&amp;lt;br&amp;gt;&lt;br /&gt;
4 2 5 9 8 7&amp;lt;br&amp;gt;&lt;br /&gt;
4 2 7 9 5 8&amp;lt;br&amp;gt;&lt;br /&gt;
4 2 7 9 8 5&amp;lt;br&amp;gt;&lt;br /&gt;
4 2 8 9 5 7&amp;lt;br&amp;gt;&lt;br /&gt;
4 2 8 9 7 5&amp;lt;br&amp;gt;&lt;br /&gt;
5 2 4 9 7 8&amp;lt;br&amp;gt;&lt;br /&gt;
5 2 4 9 8 7&amp;lt;br&amp;gt;&lt;br /&gt;
5 2 7 9 4 8&amp;lt;br&amp;gt;&lt;br /&gt;
5 2 7 9 8 4&amp;lt;br&amp;gt;&lt;br /&gt;
5 2 8 9 4 7&amp;lt;br&amp;gt;&lt;br /&gt;
5 2 8 9 7 4&amp;lt;br&amp;gt;&lt;br /&gt;
7 2 4 9 5 8&amp;lt;br&amp;gt;&lt;br /&gt;
7 2 4 9 8 5&amp;lt;br&amp;gt;&lt;br /&gt;
7 2 5 9 4 8&amp;lt;br&amp;gt;&lt;br /&gt;
7 2 5 9 8 4&amp;lt;br&amp;gt;&lt;br /&gt;
7 2 8 9 4 5&amp;lt;br&amp;gt;&lt;br /&gt;
7 2 8 9 5 4&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 4 9 5 7&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 4 9 7 5&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 5 9 4 7&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 5 9 7 4&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 7 9 4 5&amp;lt;br&amp;gt;&lt;br /&gt;
8 2 7 9 5 4&lt;br /&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;
from itertools import permutations&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n = int(input())&lt;br /&gt;
    arr = list(map(int, input().split()))&lt;br /&gt;
&lt;br /&gt;
    min_value = min(arr)&lt;br /&gt;
    max_value = max(arr)&lt;br /&gt;
&lt;br /&gt;
    min_index = arr.index(min_value)&lt;br /&gt;
    max_index = arr.index(max_value)&lt;br /&gt;
&lt;br /&gt;
    # To store the results&lt;br /&gt;
    results = set()&lt;br /&gt;
&lt;br /&gt;
    # Generate permutations&lt;br /&gt;
    for perm in permutations(arr):&lt;br /&gt;
        if perm[min_index] == min_value and perm[max_index] == max_value:&lt;br /&gt;
            results.add(perm)&lt;br /&gt;
&lt;br /&gt;
    # Sort results lexicographically&lt;br /&gt;
    results = sorted(results)&lt;br /&gt;
&lt;br /&gt;
    # Print results&lt;br /&gt;
    for result in results:&lt;br /&gt;
        print(&amp;quot; &amp;quot;.join(map(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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=1176_%E2%80%93_FList%C4%83_%C8%98tergere&amp;diff=9906</id>
		<title>1176 – FListă Ștergere</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1176_%E2%80%93_FList%C4%83_%C8%98tergere&amp;diff=9906"/>
		<updated>2024-06-02T23:36:45Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: Ștergerea conținutului paginii&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0884_-_Paznici&amp;diff=9905</id>
		<title>0884 - Paznici</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0884_-_Paznici&amp;diff=9905"/>
		<updated>2024-06-02T23:35:31Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: /* Exemplu 1 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se consideră o clădire de formă dreptunghiulară, formată din n*m camere dispuse sub forma unei matrice cu n linii și m coloane. Anumite camere sunt ocupate şi nu pot fi vizitate, celelalte sunt libere și pot fi vizitate. Dintr-o cameră se poate trece în altă cameră dacă ambele sunt libere și se învecinează pe linie sau pe coloană.&lt;br /&gt;
&lt;br /&gt;
În anumite camere sunt paznici. Din motive de securitate, paznicii se pot deplasa din camera inițială în anumite camere libere din apropiere, dar fără a se îndepărta la o distanță mai mare decât o valoare cunoscută. Fiecare paznic va verifica periodic camerele libere în care poate ajunge.&lt;br /&gt;
&lt;br /&gt;
Să se determine numărul de camere din clădire care nu sunt verificate de niciun paznic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare paznici.in conține pe prima linie trei numere n m p, reprezentând dimensiunile clădirii şi numărul de paznici.&lt;br /&gt;
&lt;br /&gt;
Urmează n linii cu câte m caractere, care pot fi: -, reprezentând o cameră liberă, respectiv #, reprezentând o cameră ocupată.&lt;br /&gt;
&lt;br /&gt;
Urmează p linii cu câte 3 valori i j d, reprezentând informaţiile despre paznici. i j reprezintă indicii camerei, iar d reprezintă distanţa pe care se poate deplasa acel paznic.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire paznici.out va conține pe prima linie numărul C de camere care nu sunt vizitate de niciun paznic.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n, m, p ≤ 200&lt;br /&gt;
*1 ≤ i ≤ n&lt;br /&gt;
*1 ≤ j ≤ m&lt;br /&gt;
*0 ≤ d ≤ 40&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
*4 6 3&amp;lt;br&amp;gt;&lt;br /&gt;
*--#-#-&amp;lt;br&amp;gt;&lt;br /&gt;
*--##--&amp;lt;br&amp;gt;&lt;br /&gt;
*------&amp;lt;br&amp;gt;&lt;br /&gt;
*-----#&amp;lt;br&amp;gt;&lt;br /&gt;
*1 1 1&amp;lt;br&amp;gt;&lt;br /&gt;
*1 6 2&amp;lt;br&amp;gt;&lt;br /&gt;
*4 1 3&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
4&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;
def in_bounds(x, y, n, m):&lt;br /&gt;
    return 0 &amp;lt;= x &amp;lt; n and 0 &amp;lt;= y &amp;lt; m&lt;br /&gt;
&lt;br /&gt;
def mark_guard_reachable(grid, visited, x, y, d, n, m):&lt;br /&gt;
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]  # N, S, W, E&lt;br /&gt;
    queue = [(x, y, 0)]&lt;br /&gt;
    visited[x][y] = True&lt;br /&gt;
&lt;br /&gt;
    while queue:&lt;br /&gt;
        cx, cy, dist = queue.pop(0)&lt;br /&gt;
        if dist &amp;lt; d:&lt;br /&gt;
            for dx, dy in directions:&lt;br /&gt;
                nx, ny = cx + dx, cy + dy&lt;br /&gt;
                if in_bounds(nx, ny, n, m) and not visited[nx][ny] and grid[nx][ny] == &#039;-&#039;:&lt;br /&gt;
                    visited[nx][ny] = True&lt;br /&gt;
                    queue.append((nx, ny, dist + 1))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;paznici.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m, p = map(int, f.readline().strip().split())&lt;br /&gt;
        grid = [list(f.readline().strip()) for _ in range(n)]&lt;br /&gt;
        guards = [tuple(map(int, f.readline().strip().split())) for _ in range(p)]&lt;br /&gt;
&lt;br /&gt;
    visited = [[False for _ in range(m)] for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    for guard in guards:&lt;br /&gt;
        i, j, d = guard&lt;br /&gt;
        mark_guard_reachable(grid, visited, i - 1, j - 1, d, n, m)&lt;br /&gt;
&lt;br /&gt;
    unvisited_count = sum(1 for i in range(n) for j in range(m) if grid[i][j] == &#039;-&#039; and not visited[i][j])&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;paznici.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{unvisited_count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0884_-_Paznici&amp;diff=9904</id>
		<title>0884 - Paznici</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0884_-_Paznici&amp;diff=9904"/>
		<updated>2024-06-02T23:35:09Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: /* Exemplu 2 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se consideră o clădire de formă dreptunghiulară, formată din n*m camere dispuse sub forma unei matrice cu n linii și m coloane. Anumite camere sunt ocupate şi nu pot fi vizitate, celelalte sunt libere și pot fi vizitate. Dintr-o cameră se poate trece în altă cameră dacă ambele sunt libere și se învecinează pe linie sau pe coloană.&lt;br /&gt;
&lt;br /&gt;
În anumite camere sunt paznici. Din motive de securitate, paznicii se pot deplasa din camera inițială în anumite camere libere din apropiere, dar fără a se îndepărta la o distanță mai mare decât o valoare cunoscută. Fiecare paznic va verifica periodic camerele libere în care poate ajunge.&lt;br /&gt;
&lt;br /&gt;
Să se determine numărul de camere din clădire care nu sunt verificate de niciun paznic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare paznici.in conține pe prima linie trei numere n m p, reprezentând dimensiunile clădirii şi numărul de paznici.&lt;br /&gt;
&lt;br /&gt;
Urmează n linii cu câte m caractere, care pot fi: -, reprezentând o cameră liberă, respectiv #, reprezentând o cameră ocupată.&lt;br /&gt;
&lt;br /&gt;
Urmează p linii cu câte 3 valori i j d, reprezentând informaţiile despre paznici. i j reprezintă indicii camerei, iar d reprezintă distanţa pe care se poate deplasa acel paznic.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire paznici.out va conține pe prima linie numărul C de camere care nu sunt vizitate de niciun paznic.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n, m, p ≤ 200&lt;br /&gt;
*1 ≤ i ≤ n&lt;br /&gt;
*1 ≤ j ≤ m&lt;br /&gt;
*0 ≤ d ≤ 40&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4 6 3&amp;lt;br&amp;gt;&lt;br /&gt;
--#-#-&amp;lt;br&amp;gt;&lt;br /&gt;
--##--&amp;lt;br&amp;gt;&lt;br /&gt;
------&amp;lt;br&amp;gt;&lt;br /&gt;
-----#&amp;lt;br&amp;gt;&lt;br /&gt;
1 1 1&amp;lt;br&amp;gt;&lt;br /&gt;
1 6 2&amp;lt;br&amp;gt;&lt;br /&gt;
4 1 3&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
4&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;
def in_bounds(x, y, n, m):&lt;br /&gt;
    return 0 &amp;lt;= x &amp;lt; n and 0 &amp;lt;= y &amp;lt; m&lt;br /&gt;
&lt;br /&gt;
def mark_guard_reachable(grid, visited, x, y, d, n, m):&lt;br /&gt;
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]  # N, S, W, E&lt;br /&gt;
    queue = [(x, y, 0)]&lt;br /&gt;
    visited[x][y] = True&lt;br /&gt;
&lt;br /&gt;
    while queue:&lt;br /&gt;
        cx, cy, dist = queue.pop(0)&lt;br /&gt;
        if dist &amp;lt; d:&lt;br /&gt;
            for dx, dy in directions:&lt;br /&gt;
                nx, ny = cx + dx, cy + dy&lt;br /&gt;
                if in_bounds(nx, ny, n, m) and not visited[nx][ny] and grid[nx][ny] == &#039;-&#039;:&lt;br /&gt;
                    visited[nx][ny] = True&lt;br /&gt;
                    queue.append((nx, ny, dist + 1))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;paznici.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m, p = map(int, f.readline().strip().split())&lt;br /&gt;
        grid = [list(f.readline().strip()) for _ in range(n)]&lt;br /&gt;
        guards = [tuple(map(int, f.readline().strip().split())) for _ in range(p)]&lt;br /&gt;
&lt;br /&gt;
    visited = [[False for _ in range(m)] for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    for guard in guards:&lt;br /&gt;
        i, j, d = guard&lt;br /&gt;
        mark_guard_reachable(grid, visited, i - 1, j - 1, d, n, m)&lt;br /&gt;
&lt;br /&gt;
    unvisited_count = sum(1 for i in range(n) for j in range(m) if grid[i][j] == &#039;-&#039; and not visited[i][j])&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;paznici.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{unvisited_count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=0884_-_Paznici&amp;diff=9903</id>
		<title>0884 - Paznici</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=0884_-_Paznici&amp;diff=9903"/>
		<updated>2024-06-02T23:34:59Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Se consideră o clădire de formă dreptunghiulară, formată din n*m camere dispuse sub forma unei matrice cu n linii și m coloane. Anumite camere sunt ocupate şi nu pot fi vizitate, celelalte sunt libere și pot fi vizitate. Dintr-o cameră se poate trece în altă cameră dacă ambele sunt libere și se învecinează pe linie sau pe coloană.&lt;br /&gt;
&lt;br /&gt;
În anumite camere sunt paznici. Din motive de securitate, paznicii se pot deplasa din camera inițială în anumite camere libere din apropiere, dar fără a se îndepărta la o distanță mai mare decât o valoare cunoscută. Fiecare paznic va verifica periodic camerele libere în care poate ajunge.&lt;br /&gt;
&lt;br /&gt;
Să se determine numărul de camere din clădire care nu sunt verificate de niciun paznic.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare paznici.in conține pe prima linie trei numere n m p, reprezentând dimensiunile clădirii şi numărul de paznici.&lt;br /&gt;
&lt;br /&gt;
Urmează n linii cu câte m caractere, care pot fi: -, reprezentând o cameră liberă, respectiv #, reprezentând o cameră ocupată.&lt;br /&gt;
&lt;br /&gt;
Urmează p linii cu câte 3 valori i j d, reprezentând informaţiile despre paznici. i j reprezintă indicii camerei, iar d reprezintă distanţa pe care se poate deplasa acel paznic.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire paznici.out va conține pe prima linie numărul C de camere care nu sunt vizitate de niciun paznic.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n, m, p ≤ 200&lt;br /&gt;
*1 ≤ i ≤ n&lt;br /&gt;
*1 ≤ j ≤ m&lt;br /&gt;
*0 ≤ d ≤ 40&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4 6 3&amp;lt;br&amp;gt;&lt;br /&gt;
--#-#-&amp;lt;br&amp;gt;&lt;br /&gt;
--##--&amp;lt;br&amp;gt;&lt;br /&gt;
------&amp;lt;br&amp;gt;&lt;br /&gt;
-----#&amp;lt;br&amp;gt;&lt;br /&gt;
1 1 1&amp;lt;br&amp;gt;&lt;br /&gt;
1 6 2&amp;lt;br&amp;gt;&lt;br /&gt;
4 1 3&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
4&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE George&amp;lt;br&amp;gt;&lt;br /&gt;
DEQUEUE&amp;lt;br&amp;gt;&lt;br /&gt;
DEQUEUE&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE Paul&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
Eroare: coada goală&lt;br /&gt;
[&#039;Paul&#039;]&lt;br /&gt;
&lt;br /&gt;
Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def in_bounds(x, y, n, m):&lt;br /&gt;
    return 0 &amp;lt;= x &amp;lt; n and 0 &amp;lt;= y &amp;lt; m&lt;br /&gt;
&lt;br /&gt;
def mark_guard_reachable(grid, visited, x, y, d, n, m):&lt;br /&gt;
    directions = [(-1, 0), (1, 0), (0, -1), (0, 1)]  # N, S, W, E&lt;br /&gt;
    queue = [(x, y, 0)]&lt;br /&gt;
    visited[x][y] = True&lt;br /&gt;
&lt;br /&gt;
    while queue:&lt;br /&gt;
        cx, cy, dist = queue.pop(0)&lt;br /&gt;
        if dist &amp;lt; d:&lt;br /&gt;
            for dx, dy in directions:&lt;br /&gt;
                nx, ny = cx + dx, cy + dy&lt;br /&gt;
                if in_bounds(nx, ny, n, m) and not visited[nx][ny] and grid[nx][ny] == &#039;-&#039;:&lt;br /&gt;
                    visited[nx][ny] = True&lt;br /&gt;
                    queue.append((nx, ny, dist + 1))&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    with open(&amp;quot;paznici.in&amp;quot;, &amp;quot;r&amp;quot;) as f:&lt;br /&gt;
        n, m, p = map(int, f.readline().strip().split())&lt;br /&gt;
        grid = [list(f.readline().strip()) for _ in range(n)]&lt;br /&gt;
        guards = [tuple(map(int, f.readline().strip().split())) for _ in range(p)]&lt;br /&gt;
&lt;br /&gt;
    visited = [[False for _ in range(m)] for _ in range(n)]&lt;br /&gt;
&lt;br /&gt;
    for guard in guards:&lt;br /&gt;
        i, j, d = guard&lt;br /&gt;
        mark_guard_reachable(grid, visited, i - 1, j - 1, d, n, m)&lt;br /&gt;
&lt;br /&gt;
    unvisited_count = sum(1 for i in range(n) for j in range(m) if grid[i][j] == &#039;-&#039; and not visited[i][j])&lt;br /&gt;
&lt;br /&gt;
    with open(&amp;quot;paznici.out&amp;quot;, &amp;quot;w&amp;quot;) as f:&lt;br /&gt;
        f.write(f&amp;quot;{unvisited_count}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
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>Benzar Ioan</name></author>
	</entry>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3550_-_liceu&amp;diff=9902</id>
		<title>3550 - liceu</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3550_-_liceu&amp;diff=9902"/>
		<updated>2024-06-02T23:31:24Z</updated>

		<summary type="html">&lt;p&gt;Benzar Ioan: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Cerința ==&lt;br /&gt;
Marciuc este un băiat foarte neastâmpărat. El refuză să învețe informatică, așa că înainte de fiecare oră el pleacă pentru a explora noul său liceu. La plecare le promite colegilor lui că o să treacă pe la magazin înainte de a se întoarce în clasă, pentru a avea ce să mănânce în pauza următoare. Însă, dacă va ajunge în clasă în mai mult de T secunde, va întarza la ora așa că în acest caz va folosi o ruta directă spre clasă.&lt;br /&gt;
&lt;br /&gt;
Liceul poate fi reprezentat sub forma unei matrice cu n linii și n coloane. Există 3 tipuri de celule:&lt;br /&gt;
&lt;br /&gt;
*celulă liberă, pe unde băiatul poate avansa, o mutare durând o secundă;&lt;br /&gt;
*celulă ocupată de un zid, pe unde băiatul nu poate avansa;&lt;br /&gt;
*celulă în care se află o scurtătură, ce îl duce într-o secundă de la poziția, x1 y1, la poziția x2 y2 sau invers;&lt;br /&gt;
Fiind dat numărul n de linii și de coloane, coordonatele celulelor ocupate de zid și coordonatele scurtăturilor, se cere să se afișeze numărul minim de secunde în care Marciuc reușește să ajungă în clasă, trecând și pe la magazin. Dacă magazinul nu este accesibil sau daca va ajunge în clasă in mai mult de T secunde, atunci el nu va mai merge la magazin și se va afișa numărul minim de secunde în care acesta ajunge de la poziția lui la clasă. De asemenea, se va afișa și traseul folosit.&lt;br /&gt;
&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Pe prima linie a fișierului liceu.in se vor afla 4 numere naturale: n – numărul de linii și de coloane ale matricei, z – numărul de ziduri ce blochează calea băiatului, s – numărul de scurtături și t – numărul de secunde în care Marciuc poate ajunge în clasă dacă vrea să treacă și pe la magazin.&lt;br /&gt;
&lt;br /&gt;
Pe următoarele Z linii se află câte 2 numere reprezentânt coordonatele celulelor ocupate de zid.&lt;br /&gt;
&lt;br /&gt;
Pe următoarele S linii se află câte 4 numere naturale reprezentând coordonatele a două celule ce formează o scurtătură.&lt;br /&gt;
&lt;br /&gt;
Pe ultima linie se află 2 numere ce reprezintă coordonatele magazinului.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire liceu.out va conține pe prima linie numărul minim de secunde în care băiatul ajunge în clasă, iar pe următoarele linii traseul complet al băiatului, celule fiind afișate în ordinea parcurgerii.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
*1 ≤ n ≤ 400&lt;br /&gt;
*5 ≤ z ≤ 100000&lt;br /&gt;
*0 ≤ s ≤ 15500&lt;br /&gt;
*Poziția inițială a lui Marciuc este 1 1, iar poziția clasei este n n&lt;br /&gt;
*Orice traseu de durată minimă este corect. Dacă băiatul poate merge pe la magazin, în traseu trebuie să apară obligatoriu coordonatele magazinului.&lt;br /&gt;
*Daca numărul minim de secunde este corect dar traseul nu este curect se acordă 40% din punctaj.&lt;br /&gt;
*Pentru teste în valoare de 20 de puncte, s = 0.&lt;br /&gt;
*Pentru teste în valoare de 40 de puncte, n ≤ 100.&lt;br /&gt;
*Marciuc poate trece de mai multe ori prin același loc.&lt;br /&gt;
*O celula surtătură poate fi folosită și ca o celula libera.&lt;br /&gt;
*Fiecare celulă are un singur tip. Nu există scurtături spre celule blocate; celulele 1 1, n n și celula pe care este situat magazinul nu sunt blocate.&lt;br /&gt;
*O scurtatură poate fi traversată prin ambele sensuri.&lt;br /&gt;
&lt;br /&gt;
== Exemplu 1 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
5&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE Maria&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE Andrei&amp;lt;br&amp;gt;&lt;br /&gt;
DEQUEUE&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE Ioana&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE Alexandru&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
[&#039;Andrei&#039;, &#039;Ioana&#039;, &#039;Alexandru&#039;]&lt;br /&gt;
&lt;br /&gt;
== Exemplu 2 ==&lt;br /&gt;
;Intrare&lt;br /&gt;
4&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE George&amp;lt;br&amp;gt;&lt;br /&gt;
DEQUEUE&amp;lt;br&amp;gt;&lt;br /&gt;
DEQUEUE&amp;lt;br&amp;gt;&lt;br /&gt;
ENQUEUE Ana&lt;br /&gt;
&lt;br /&gt;
;Iesire&lt;br /&gt;
Eroare: coada goală&lt;br /&gt;
[&#039;Ana&#039;]&lt;br /&gt;
&lt;br /&gt;
Datele de intrare nu corespund restricțiilor impuse.&lt;br /&gt;
== Rezolvare ==&lt;br /&gt;
&amp;lt;syntaxhighlight lang=&amp;quot;python&amp;quot; line&amp;gt;&lt;br /&gt;
def citeste_date():&lt;br /&gt;
    try:&lt;br /&gt;
        n = int(input(&amp;quot;Introduceți numărul de operațiuni (n): &amp;quot;))&lt;br /&gt;
        operatiuni = []&lt;br /&gt;
        for _ in range(n):&lt;br /&gt;
            operatiune = input().strip()&lt;br /&gt;
            operatiuni.append(operatiune)&lt;br /&gt;
        return n, operatiuni&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        return None, None&lt;br /&gt;
&lt;br /&gt;
def valideaza_date(n, operatiuni):&lt;br /&gt;
    if not (1 &amp;lt;= n &amp;lt;= 100):&lt;br /&gt;
        return False&lt;br /&gt;
    for operatiune in operatiuni:&lt;br /&gt;
        if not (operatiune.startswith(&amp;quot;ENQUEUE &amp;quot;) or operatiune == &amp;quot;DEQUEUE&amp;quot;):&lt;br /&gt;
            return False&lt;br /&gt;
        if operatiune.startswith(&amp;quot;ENQUEUE &amp;quot;) and len(operatiune.split()) != 2:&lt;br /&gt;
            return False&lt;br /&gt;
        if operatiune.startswith(&amp;quot;ENQUEUE &amp;quot;) and not operatiune.split()[1].isalpha():&lt;br /&gt;
            return False&lt;br /&gt;
    return True&lt;br /&gt;
&lt;br /&gt;
def proceseaza_operatiuni(n, operatiuni):&lt;br /&gt;
    coada = []&lt;br /&gt;
    for operatiune in operatiuni:&lt;br /&gt;
        if operatiune.startswith(&amp;quot;ENQUEUE &amp;quot;):&lt;br /&gt;
            _, nume = operatiune.split()&lt;br /&gt;
            coada.append(nume)&lt;br /&gt;
        elif operatiune == &amp;quot;DEQUEUE&amp;quot;:&lt;br /&gt;
            if coada:&lt;br /&gt;
                coada.pop(0)&lt;br /&gt;
            else:&lt;br /&gt;
                print(&amp;quot;Eroare: coada goală&amp;quot;)&lt;br /&gt;
    return coada&lt;br /&gt;
&lt;br /&gt;
def main():&lt;br /&gt;
    n, operatiuni = citeste_date()&lt;br /&gt;
    &lt;br /&gt;
    if n is None or operatiuni are None or not valideaza_date(n, operatiuni):&lt;br /&gt;
        print(&amp;quot;Datele de intrare nu corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
        return&lt;br /&gt;
    &lt;br /&gt;
    print(&amp;quot;Datele de intrare corespund restricțiilor impuse.&amp;quot;)&lt;br /&gt;
    rezultat = proceseaza_operatiuni(n, operatiuni)&lt;br /&gt;
    print(rezultat)&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    main()&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
</feed>