<?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=1323_-_Matrice_Rara</id>
	<title>1323 - Matrice Rara - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=1323_-_Matrice_Rara"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1323_-_Matrice_Rara&amp;action=history"/>
	<updated>2026-05-01T06:38:43Z</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=1323_-_Matrice_Rara&amp;diff=8840&amp;oldid=prev</id>
		<title>Zmicala Narcis: Pagină nouă: == Cerința == Se citesc două matrice rare și se cere să se calculeze suma lor. O matrice &#039;&#039;&#039;A(n,m)&#039;&#039;&#039; se numește rară dacă majoritatea elementelor sale sunt egale cu zero (cel puţin jumătate). Datorită numărului mic de numere nenule, o matrice rară &#039;&#039;&#039;A(n,m)&#039;&#039;&#039;, având &#039;&#039;&#039;k&#039;&#039;&#039; elemente nenule, poate fi memorată folosind un șir &#039;&#039;&#039;X&#039;&#039;&#039; conţinând &#039;&#039;&#039;k&#039;&#039;&#039; triplete de forma &#039;&#039;&#039;(linie, coloană , valoare)&#039;&#039;&#039;, corespunzătoare valorilor nenule ale matricei. Elemente...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=1323_-_Matrice_Rara&amp;diff=8840&amp;oldid=prev"/>
		<updated>2024-01-03T13:04:47Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: == Cerința == Se citesc două matrice rare și se cere să se calculeze suma lor. O matrice &amp;#039;&amp;#039;&amp;#039;A(n,m)&amp;#039;&amp;#039;&amp;#039; se numește rară dacă majoritatea elementelor sale sunt egale cu zero (cel puţin jumătate). Datorită numărului mic de numere nenule, o matrice rară &amp;#039;&amp;#039;&amp;#039;A(n,m)&amp;#039;&amp;#039;&amp;#039;, având &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; elemente nenule, poate fi memorată folosind un șir &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; conţinând &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; triplete de forma &amp;#039;&amp;#039;&amp;#039;(linie, coloană , valoare)&amp;#039;&amp;#039;&amp;#039;, corespunzătoare valorilor nenule ale matricei. Elemente...&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;
Se citesc două matrice rare și se cere să se calculeze suma lor.&lt;br /&gt;
O matrice &amp;#039;&amp;#039;&amp;#039;A(n,m)&amp;#039;&amp;#039;&amp;#039; se numește rară dacă majoritatea elementelor sale sunt egale cu zero (cel puţin jumătate). Datorită numărului mic de numere nenule, o matrice rară &amp;#039;&amp;#039;&amp;#039;A(n,m)&amp;#039;&amp;#039;&amp;#039;, având &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; elemente nenule, poate fi memorată folosind un șir &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; conţinând &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; triplete de forma &amp;#039;&amp;#039;&amp;#039;(linie, coloană , valoare)&amp;#039;&amp;#039;&amp;#039;, corespunzătoare valorilor nenule ale matricei. Elementele șirului &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; se memorează în ordine lexicografică după &amp;#039;&amp;#039;&amp;#039;(linie,coloana)&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
De exemplu matricea cu &amp;#039;&amp;#039;&amp;#039;n = m = 3&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
: 1 0 2&lt;br /&gt;
: 0 0 5&lt;br /&gt;
: 0 2 0&lt;br /&gt;
se va memora sub forma sirului &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; continand &amp;#039;&amp;#039;&amp;#039;4&amp;#039;&amp;#039;&amp;#039; triplete : &amp;#039;&amp;#039;&amp;#039;{(1,1,1) , (1,3,2) , (2,3,5) , (3,2,2)}&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;matrice_rarain.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie , dimensiunile celor două matrice &amp;#039;&amp;#039;&amp;#039;n m&amp;#039;&amp;#039;&amp;#039; – reprezentând numărul de linii şi coloane, şi &amp;#039;&amp;#039;&amp;#039;N1 N2&amp;#039;&amp;#039;&amp;#039;, numărul de elemente nenule ale matricei &amp;#039;&amp;#039;&amp;#039;A&amp;#039;&amp;#039;&amp;#039;, respectiv matricei &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;. Apoi următoarele &amp;#039;&amp;#039;&amp;#039;N1&amp;#039;&amp;#039;&amp;#039; linii vor conține triplete – elementele nenule ale matricei A în ordine lexicografică, iar ultimele N2 linii vor conține triplete reprezentând elementele nenule ale matricei &amp;#039;&amp;#039;&amp;#039;B&amp;#039;&amp;#039;&amp;#039;, tot în ordine lexicografică .&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;matrice_raraout.txt&amp;#039;&amp;#039;&amp;#039; va conține pe prima linie numărul de elemente diferite de &amp;#039;&amp;#039;&amp;#039;0&amp;#039;&amp;#039;&amp;#039; din matricea sumă &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; şi apoi matricea în sine sub forma tripletelor în ordine lexicografică, câte unul pe o linie .&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ n , m ≤ 1.000.000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ N1 , N2 ≤ 300.000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;-1.000.000.000 ≤ A[i][j], B[i][j] ≤ 1.000.000.000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; matrice_rarain.txt&lt;br /&gt;
: 5 6 3 3&lt;br /&gt;
: 1 1 2&lt;br /&gt;
: 3 4 3&lt;br /&gt;
: 4 6 1&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 3 4 -2&lt;br /&gt;
: 4 6 2&lt;br /&gt;
; matrice_raraout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 4&lt;br /&gt;
: 1 1 2&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 3 4 1&lt;br /&gt;
: 4 6 3&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; matrice_rarain.txt&lt;br /&gt;
: 1000001 6 3 3&lt;br /&gt;
: 1 1 2&lt;br /&gt;
: 3 4 3&lt;br /&gt;
: 4 6 1&lt;br /&gt;
: 1 2 3&lt;br /&gt;
: 3 4 -2&lt;br /&gt;
: 4 6 2&lt;br /&gt;
; matrice_raraout.txt&lt;br /&gt;
: Datele introduse nu corespund restricțiilor impuse.&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;
# 1323 - Matrice Rara&lt;br /&gt;
def validare(matrice_a1, matrice_b1):           # functia de validare a datelor de intrare&lt;br /&gt;
    for matrice in [matrice_a1, matrice_b1]:&lt;br /&gt;
        if len(matrice) &amp;gt; 1000000:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
        for element in matrice:&lt;br /&gt;
            if element[2] &amp;lt; -1000000000 or element[2] &amp;gt; 1000000000:&lt;br /&gt;
                raise ValueError&lt;br /&gt;
&lt;br /&gt;
    fisier_iesire.write(&amp;quot;Datele introduse corespund restrictiilor impuse.\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def suma_matrici(matrice_a1, matrice_b1):                     # functia de rezolvare&lt;br /&gt;
    suma = {}&lt;br /&gt;
    for element in matrice_a1 + matrice_b1:&lt;br /&gt;
        if (element[0], element[1]) not in suma:&lt;br /&gt;
            suma[(element[0], element[1])] = 0&lt;br /&gt;
        suma[(element[0], element[1])] += element[2]&lt;br /&gt;
&lt;br /&gt;
    matrice_suma1 = [(k[0], k[1], v) for k, v in suma.items() if v != 0]&lt;br /&gt;
    matrice_suma1.sort()&lt;br /&gt;
&lt;br /&gt;
    return matrice_suma1&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    fisier_intrare = open(&amp;quot;matrice_rarain.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    fisier_iesire = open(&amp;quot;matrice_raraout.txt&amp;quot;, &amp;quot;w&amp;quot;)       # fisierul out trebuie declarat cu optiunea &amp;quot;w&amp;quot; (write)&lt;br /&gt;
&lt;br /&gt;
    try:&lt;br /&gt;
        n, m, N1, N2 = map(int, fisier_intrare.readline().split())&lt;br /&gt;
        matrice_a = [list(map(int, fisier_intrare.readline().split())) for _ in range(N1)]&lt;br /&gt;
        matrice_b = [list(map(int, fisier_intrare.readline().split())) for _ in range(N2)]&lt;br /&gt;
&lt;br /&gt;
        validare(matrice_a, matrice_b)                 # apelul functiei de validare&lt;br /&gt;
&lt;br /&gt;
        matrice_suma = suma_matrici(matrice_a, matrice_b)               # apelul functiei de rezolvare&lt;br /&gt;
        fisier_iesire.write(f&amp;quot;{len(matrice_suma)}\n&amp;quot;)&lt;br /&gt;
        for elem in matrice_suma:&lt;br /&gt;
            fisier_iesire.write(f&amp;quot;{elem[0]} {elem[1]} {elem[2]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        fisier_iesire.write(&amp;quot;Datele introduse nu corespund restrictiilor impuse.&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/syntaxhighlight&amp;gt;&lt;/div&gt;</summary>
		<author><name>Zmicala Narcis</name></author>
	</entry>
</feed>