Intuiție / reformulare
Esența problemei e simplă — pentru fiecare firmă vrem două totaluri: cât datorează (SD) și cât are de primit (SP). O datorie X > Y S contribuie cu la SD-ul lui și cu la SP-ul lui . Atât. Apoi numărăm firmele (C1) sau le listăm ordonat (C2).
Capcana adevărată e citirea. Numele firmelor pot conține spații (Vasile Inc, Popa25 PF), deci dacă citești cu operatorul >> (care se oprește la spațiu), un nume se rupe în bucăți și totul se strică. Trebuie să citești linia întreagă și să o desfaci cu grijă.
Ideea cheie
Două observații rezolvă tot:
-
Parsarea. Separatorul
" > "apare exact o dată pe linie (numele nu conțin caracterul>). Deci este tot ce e înainte de" > ". În restul liniei, suma este ultimul cuvânt, iar este tot ce rămâne între" > "și ultimul spațiu. -
Structura. Un
map<string, ...>cu chei nume de firmă rezolvă deodată trei lucruri: ține totalurile per firmă, creează automat intrarea la prima accesare (deci ambele firme dintr-o datorie apar, chiar dacă una nu mai apare niciodată ca debitor sau creditor) și păstrează cheile sortate lexicografic — exact ordinea cerută la afișare.