<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3745_-_Oposumi</id>
	<title>3745 - Oposumi - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3745_-_Oposumi"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3745_-_Oposumi&amp;action=history"/>
	<updated>2026-06-17T08:35:16Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://wiki.universitas.ro/index.php?title=3745_-_Oposumi&amp;diff=9969&amp;oldid=prev</id>
		<title>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 &lt; J, atunci nivelul I va fi poziționat mai sus decât nivelul J, adică nivelul I va fi mai aproa...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3745_-_Oposumi&amp;diff=9969&amp;oldid=prev"/>
		<updated>2024-06-03T15:44:41Z</updated>

		<summary type="html">&lt;p&gt;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;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&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, &amp;#039;r&amp;#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, &amp;#039;w&amp;#039;) as file:&lt;br /&gt;
        for line in result:&lt;br /&gt;
            if isinstance(line, list):&lt;br /&gt;
                file.write(&amp;#039; &amp;#039;.join(map(str, line)) + &amp;#039;\n&amp;#039;)&lt;br /&gt;
            else:&lt;br /&gt;
                file.write(str(line) + &amp;#039;\n&amp;#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 = [[&amp;#039;-&amp;#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 = &amp;#039;oposumi.in&amp;#039;&lt;br /&gt;
    output_file = &amp;#039;oposumi.out&amp;#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__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    main()&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Benzar Ioan</name></author>
	</entry>
</feed>