<?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=3437_-_Datorii_1</id>
	<title>3437 - Datorii 1 - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.universitas.ro/index.php?action=history&amp;feed=atom&amp;title=3437_-_Datorii_1"/>
	<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3437_-_Datorii_1&amp;action=history"/>
	<updated>2026-05-01T09:10:26Z</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=3437_-_Datorii_1&amp;diff=8842&amp;oldid=prev</id>
		<title>Zmicala Narcis: Pagină nouă: Într-o țară îndepărtată, economia este în criză. Cea mai mare problemă este lipsa de capital care creează blocaje financiare. De exemplu, o firmă &#039;&#039;&#039;X&#039;&#039;&#039; poate avea datorii către o firmă &#039;&#039;&#039;Y&#039;&#039;&#039; pe care nu le poate plăti, deoarece o altă firmă &#039;&#039;&#039;Z&#039;&#039;&#039; are datorii către firma &#039;&#039;&#039;X&#039;&#039;&#039; pe care nu le-a plătit, ş.a.m.d. Există o listă cu toate datoriile firmelor sub forma următoare: &#039;&#039;&#039;X &gt; Y S&#039;&#039;&#039; cu semnificaţia “firma &#039;&#039;&#039;X&#039;&#039; datorează firmei &#039;&#039;&#039;Y&#039;&#039;&#039; suma...</title>
		<link rel="alternate" type="text/html" href="https://wiki.universitas.ro/index.php?title=3437_-_Datorii_1&amp;diff=8842&amp;oldid=prev"/>
		<updated>2024-01-03T13:37:07Z</updated>

		<summary type="html">&lt;p&gt;Pagină nouă: Într-o țară îndepărtată, economia este în criză. Cea mai mare problemă este lipsa de capital care creează blocaje financiare. De exemplu, o firmă &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; poate avea datorii către o firmă &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; pe care nu le poate plăti, deoarece o altă firmă &amp;#039;&amp;#039;&amp;#039;Z&amp;#039;&amp;#039;&amp;#039; are datorii către firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; pe care nu le-a plătit, ş.a.m.d. Există o listă cu toate datoriile firmelor sub forma următoare: &amp;#039;&amp;#039;&amp;#039;X &amp;gt; Y S&amp;#039;&amp;#039;&amp;#039; cu semnificaţia “firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039; datorează firmei &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; suma...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;Într-o țară îndepărtată, economia este în criză. Cea mai mare problemă este lipsa de capital care creează blocaje financiare. De exemplu, o firmă &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; poate avea datorii către o firmă &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; pe care nu le poate plăti, deoarece o altă firmă &amp;#039;&amp;#039;&amp;#039;Z&amp;#039;&amp;#039;&amp;#039; are datorii către firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; pe care nu le-a plătit, ş.a.m.d.&lt;br /&gt;
Există o listă cu toate datoriile firmelor sub forma următoare:&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;X &amp;gt; Y S&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
cu semnificaţia “firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039; datorează firmei &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; suma &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;”. Este posibil ca &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; să aibă mai multe datorii la firma &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; (în funcţie de contractele derulate împreună) sau chiar ca &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; să aibă datorii la &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; să aibă datorii la &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
== Cerințe ==&lt;br /&gt;
Cunoscând lista cu datoriile firmelor, scrieți un program care să rezolve următoarele cerințe:&lt;br /&gt;
1. determină numărul de firme distincte care apar în această listă;&lt;br /&gt;
2. realizează o situație financiară a firmelor distincte din această listă, scrise în ordine lexicografică; pentru fiecare firmă se vor determina două valori &amp;#039;&amp;#039;&amp;#039;SD SP&amp;#039;&amp;#039;&amp;#039;, unde &amp;#039;&amp;#039;&amp;#039;SD&amp;#039;&amp;#039;&amp;#039; reprezintă suma totală a datoriilor pe care firma le are către alte firme, iar &amp;#039;&amp;#039;&amp;#039;SP&amp;#039;&amp;#039;&amp;#039; este totalul sumelor pe care firma trebuie să le primească de la alte firme.&lt;br /&gt;
== Date de intrare ==&lt;br /&gt;
Fișierul de intrare &amp;#039;&amp;#039;&amp;#039;datorii1in.txt&amp;#039;&amp;#039;&amp;#039; conține pe prima linie un număr natural &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; reprezentând cerința care&lt;br /&gt;
trebuie să fie rezolvată (&amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039; sau &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;). Pe a doua linie se află un număr natural &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039; care reprezintă numărul de înregistrări existente în lista datoriilor firmelor. Pe următoarele &amp;#039;&amp;#039;&amp;#039;D&amp;#039;&amp;#039;&amp;#039; linii sunt descrise datoriile firmelor, în forma specificată în enunț, câte o datorie pe o linie.&lt;br /&gt;
== Date de ieșire ==&lt;br /&gt;
Fișierul de ieșire &amp;#039;&amp;#039;&amp;#039;datoriiout.txt&amp;#039;&amp;#039;&amp;#039; va conține răspunsul la cerinţa &amp;#039;&amp;#039;&amp;#039;C&amp;#039;&amp;#039;&amp;#039; specificată în fișierul de intrare. Dacă &amp;#039;&amp;#039;&amp;#039;C=1&amp;#039;&amp;#039;&amp;#039; fișierul va conține un număr natural, reprezentând numărul de firme distincte care apar în lista menționată. Dacă &amp;#039;&amp;#039;&amp;#039;C=2&amp;#039;&amp;#039;&amp;#039; fișierul va conține pentru fiecare dintre firmele distincte din lista menționată câte un singur triplet de forma &amp;#039;&amp;#039;&amp;#039;X SD SP&amp;#039;&amp;#039;&amp;#039;, unde &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; este numele firmei, iar &amp;#039;&amp;#039;&amp;#039;SD&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;SP&amp;#039;&amp;#039;&amp;#039; au semnificația din enunț pentru firma &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039;; tripletele vor fi scrise astfel încât numele firmelor să apară în ordine lexicografică, fiecare triplet pe câte o linie a fișierului, iar &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;SD&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;SP&amp;#039;&amp;#039;&amp;#039; vor fi separate prin câte un singur spațiu.&lt;br /&gt;
== Restricții și precizări ==&lt;br /&gt;
* Există în total cel mult &amp;#039;&amp;#039;&amp;#039;6000&amp;#039;&amp;#039;&amp;#039; de firme distincte în lista menționată de datorii.&lt;br /&gt;
* Numele unei firme este format din maximum &amp;#039;&amp;#039;&amp;#039;20&amp;#039;&amp;#039;&amp;#039; de caractere (litere mari şi mici ale alfabetului englez, cifre, spaţii); se face distincţie între literele mari şi literele mici în numele firmelor; nu există alte restricţii referitoare la numele firmelor.&lt;br /&gt;
* Două firme distincte au nume distincte. O firmă nu poate avea datorii la ea însăși.&lt;br /&gt;
* În descrierea unei datorii &amp;#039;&amp;#039;&amp;#039;(X &amp;gt; Y S)&amp;#039;&amp;#039;&amp;#039; există un singur spaţiu între &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;&amp;gt;&amp;#039;&amp;#039;&amp;#039;, un singur spațiu între &amp;#039;&amp;#039;&amp;#039;&amp;gt;&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039;, respectiv un singur spațiu între &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;S&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;1 ≤ D ≤ 80000&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
* Sumele datorate de firme sunt numere naturale nenule ≤106.&lt;br /&gt;
* Dacă &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; și &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; sunt numele a două firme distincte, iar &amp;#039;&amp;#039;&amp;#039;k (k≥0)&amp;#039;&amp;#039;&amp;#039; este valoarea maximă cu proprietatea că secvența formată din primele &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; caractere din &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; este identică cu secvența formată din primele caractere din &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039;, spunem că &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; precedă din punct de vedere lexicografic pe &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039; dacă &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; are doar &amp;#039;&amp;#039;&amp;#039;k&amp;#039;&amp;#039;&amp;#039; caractere sau dacă al k+1-lea caracter din &amp;#039;&amp;#039;&amp;#039;X&amp;#039;&amp;#039;&amp;#039; este mai mic decât al k+1-lea caracter din &amp;#039;&amp;#039;&amp;#039;Y&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Pentru teste valorând &amp;#039;&amp;#039;&amp;#039;30&amp;#039;&amp;#039;&amp;#039; de puncte cerinţa este &amp;#039;&amp;#039;&amp;#039;1&amp;#039;&amp;#039;&amp;#039;. Pentru teste valorând &amp;#039;&amp;#039;&amp;#039;60&amp;#039;&amp;#039;&amp;#039; de puncte cerinţa este &amp;#039;&amp;#039;&amp;#039;2&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
* Pentru teste valorând &amp;#039;&amp;#039;&amp;#039;40&amp;#039;&amp;#039;&amp;#039; de puncte D≤1000. Pentru teste valorând &amp;#039;&amp;#039;&amp;#039;45&amp;#039;&amp;#039;&amp;#039; de puncte numele firmelor nu&lt;br /&gt;
conțin spaţii.&lt;br /&gt;
* În concurs s-au acordat &amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039; puncte din oficiu. Pe site se acordă &amp;#039;&amp;#039;&amp;#039;10&amp;#039;&amp;#039;&amp;#039; puncte pentru exemple.&lt;br /&gt;
== Exemplul 1 ==&lt;br /&gt;
; datoriiin.txt&lt;br /&gt;
: 1&lt;br /&gt;
: 4&lt;br /&gt;
: Vasile Inc &amp;gt; Anatolia 100&lt;br /&gt;
: ana &amp;gt; Anatolia 10&lt;br /&gt;
: ana &amp;gt; Vasilescu Inc 5&lt;br /&gt;
: Popa25 PF &amp;gt; Anatolia 30&lt;br /&gt;
; datoriiout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: 5&lt;br /&gt;
== Exemplul 2 ==&lt;br /&gt;
; datoriiin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 5&lt;br /&gt;
: Vasile Inc &amp;gt; Anatolia 100&lt;br /&gt;
: ana &amp;gt; Anatolia 10&lt;br /&gt;
: ana &amp;gt; Vasilescu Inc 5&lt;br /&gt;
: Popa25 PF &amp;gt; Anatolia 30&lt;br /&gt;
: Popa25 PF &amp;gt; ana 50&lt;br /&gt;
; datoriiout.txt&lt;br /&gt;
: Datele introduse corespund restricțiilor impuse.&lt;br /&gt;
: Anatolia 0 140&lt;br /&gt;
: Popa25 PF 80 0&lt;br /&gt;
: Vasile Inc 100 0&lt;br /&gt;
: Vasilescu Inc 0 5&lt;br /&gt;
: ana 15 50&lt;br /&gt;
== Exemplul 3 ==&lt;br /&gt;
; datoriiin.txt&lt;br /&gt;
: 2&lt;br /&gt;
: 6&lt;br /&gt;
: Vasile Inc &amp;gt; Anatolia 100&lt;br /&gt;
: ana &amp;gt; Anatolia 10&lt;br /&gt;
: ana &amp;gt; Vasilescu Inc 5&lt;br /&gt;
: Popa25 PF &amp;gt; Anatolia 30&lt;br /&gt;
: Popa25 PF &amp;gt; ana 50&lt;br /&gt;
: Vasile Inc &amp;gt; Vasile Inc 20&lt;br /&gt;
; datoriiout.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;
# 3437 - Datorii 1&lt;br /&gt;
from collections import defaultdict&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def validare(datorii_val1):           # functia de validare a datelor de intrare&lt;br /&gt;
    if len(datorii_val1) &amp;gt; 6000:&lt;br /&gt;
        raise ValueError&lt;br /&gt;
&lt;br /&gt;
    for X_val1, Y_val1, S_val1 in datorii_val1:&lt;br /&gt;
        if len(X_val1) &amp;gt; 20 or len(Y_val1) &amp;gt; 20 or S_val1 &amp;lt;= 0 or S_val1 &amp;gt; 10**6:&lt;br /&gt;
            raise ValueError&lt;br /&gt;
&lt;br /&gt;
    file_out.write(&amp;quot;Datele de intrare corespund restrictiilor impuse\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
def rezolvare(datorii_val1):                     # functia de rezolvare&lt;br /&gt;
    firme = defaultdict(lambda: [0, 0])  # dictionar cu valori default [0, 0]&lt;br /&gt;
    for X_val1, Y_val1, S_val1 in datorii_val1:&lt;br /&gt;
        firme[X_val1][0] += S_val1  # adaugam la suma datoriilor firmei X&lt;br /&gt;
        firme[Y_val1][1] += S_val1  # adaugam la suma pe care firma Y trebuie sa o primeasca&lt;br /&gt;
&lt;br /&gt;
    for firma in sorted(firme.keys()):  # sortam firmele lexicografic&lt;br /&gt;
        file_out.write(f&amp;quot;{firma} {firme[firma][0]} {firme[firma][1]}\n&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;#039;__main__&amp;#039;:&lt;br /&gt;
    file_in = open(&amp;quot;datoriiin.txt&amp;quot;, &amp;quot;r&amp;quot;)         # declararea fisierelor&lt;br /&gt;
    file_out = open(&amp;quot;datoriiout.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;
    # din cauza datelor de intrare pot aparea 2 tipuri de erori, valueError sau IndexError pe care le tratam&lt;br /&gt;
    try:&lt;br /&gt;
        C = int(file_in.readline())      # citirea cerintei&lt;br /&gt;
        D = int(file_in.readline())      # citirea numarului de datorii&lt;br /&gt;
        datorii_val = []&lt;br /&gt;
        for _ in range(D):&lt;br /&gt;
            X_val, _, Y_val, S_val = file_in.readline().split()&lt;br /&gt;
            S_val = int(S_val)&lt;br /&gt;
            datorii_val.append((X_val, Y_val, S_val))&lt;br /&gt;
&lt;br /&gt;
        validare(datorii_val)                 # apelul functiei de validare&lt;br /&gt;
        if C == 2:&lt;br /&gt;
            rezolvare(datorii_val)             # apelul functiei de rezolvare&lt;br /&gt;
&lt;br /&gt;
    except ValueError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare nu corespund restrictiilor impuse&amp;quot;)&lt;br /&gt;
    except IndexError:&lt;br /&gt;
        file_out.write(&amp;quot;Datele de intrare 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>