[13] Concurs - Datorii

[13] Concurs - Datorii

Postby Mihai » 21 Aug 2011, 17:24

Datorii

Iahim încearcă, pe cât posibil, să facă în fiecare zi câte o faptă bună. Astăzi, el s-a gândit că ar fi frumos să își plătească datoriile pe care le are față de unii prieteni. Pentru asta, Iahim a creat o listă care conține atât prietenii care îi sunt îndatorați cât și cei cărora le este dator și a salvat-o în fișierul bitcell13.in respectând următoarele reguli:
  • pe fiecare linie a fișierului se află numele unui prieten urmat o sumă de bani; această sumă de bani este un număr întreg din intervalul [-1000,1000] reprezentând suma pe care o datorează unui prieten (dacă este număr negativ) sau suma datorată de un prieten (dacă este număr pozitiv);
  • numele unui prieten poate conține doar litere ale alfabetului englezesc și cifre;
  • numele prietenilor sunt scurte, cu o lungime de maximum 10 caractere;
    nu vor exista doi prieteni cu același nume
  • conține maximum 100 de linii

Acum, Iahim ar vrea să știe dacă poate alege un grup de prieteni astfel încât să-și poată plăti toate datoriile față de cei din grup strângând toți banii de la prietenii din grup care îi sunt datori și să rămână, la final, fără niciun ban.
Dacă există un astfel de grup, se va afișa în fișierul bitcell13.out "DA" iar în caz contrar se va afișa "NU". Se acordă puncte suplimentare dacă în cazul în care răspunsul este "DA" se vor afișa pe următoarele linii din fișier numele prietenilor care fac parte din grup în ordine alfabetică (cerința este opțională).

Exemplu:

bitcell13.in:
  1. Ionut 103
  2. Bogdan -50
  3. Marian -29
  4. Grigore -20
  5. Sebi 200
  6. Medana -33


bitcell13.out:
  1. DA
  2. Bogdan
  3. Grigore
  4. Ionut
  5. Medana


Explicație: în cazul de față, Iahim poate lua cei 103 lei cu care Ionuț îi este dator și să-și plătească datoriile de 50, 20 și 33 de lei față de Bogdan, Grigore și respectiv Medana. Afișarea grupului de prieteni este opțională și aduce puncte bonus.

Perioada de desfăşurare:

16-27 August - înscrierea în concurs
28 August - desemnarea câștigătorului

P.S.: Problema este o variantă simplificată a celei cu caloriile de aici. Mulțumesc Smith pentru pontul referitor la problema aia :).

Atenție: pentru că a trecut aproape o săptămână și nu a venit nimeni cu o rezolvare, am spus să o simplific modificând limitele datelor de intrare: sumele de bani pe care trebuie să le restituie sau să le primească sunt numere întregi din intervalul [-100,100] și numărul de linii din fișier este de maximum 30.
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25

Re: [13] Concurs - Datorii

Postby sharky92 » 22 Aug 2011, 12:24

Am o mica intrebare , in cazul de fata Iahin de ce nu are la dispozitie 303 lei , stransi de la Ionut (103) si Sebi (200) ?
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: [13] Concurs - Datorii

Postby Cosmin_NTG » 22 Aug 2011, 12:52

La asta m-am gandit si eu atunci cand am vazut pentru prima oara problema. Explicatia este in enunt: "Iahim ar vrea să știe dacă poate alege un grup de prieteni astfel încât să-și poată plăti toate datoriile față de cei din grup strângând toți banii de la prietenii din grup care îi sunt datori și să rămână, la final, fără niciun ban.". Acel "grup" este explicatia. Deci programul trebuie sa verifice daca se poate forma un grup cu semnificatia de mai sus astfel incat Iahim sa gestioneze banii doar in acel grup (asta inseamna sa preia banii de la cei ce ii sunt datori lui Iahim iar cu toti acesti bani sa-si plateasca toate datoriile din acest grup). Deci trebuie doar verificata existenta acelui grup.
0,0p / 0 votes
Thinking about solutions is better than thinking about problems
User avatar
Cosmin_NTG
Byte
 
Joined: 11 Jan 2011
Location: 192.2L1.44G
Status: 10

Re: [13] Concurs - Datorii

Postby sharky92 » 25 Aug 2011, 13:07

Sper sa nu fiu singurul participant :D .

Executabilul : http://www.2shared.com/file/CFdxHqai/bitcell.html
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: [13] Concurs - Datorii

Postby eni4ever » 25 Aug 2011, 23:08

^ Oare numai mie nu-mi merge ? (simptom : don't send)

Rezolvarea mea este în ataș. No cookies for me, I guess :).
0,0p / 0 votes
Attachments
eni.rar
Rezolvare eni4ever 4 BC13.
(11.94 KiB) Downloaded 14 times
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: [13] Concurs - Datorii

Postby sharky92 » 25 Aug 2011, 23:39

Chiar acum l-am incercat dinou si merge ok , nu imi da eroare.

Executabil : http://www.2shared.com/file/jwdsNdV5/bitcell.html
0,0p / 0 votes
Last edited by sharky92 on 26 Aug 2011, 08:45, edited 2 times in total.
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: [13] Concurs - Datorii

Postby new_luca » 26 Aug 2011, 01:17

Sharky cel putin la mine rezolvarea ta nu printeaza "NU" deloc :p, a lui eni4ever pare ok :D

Eu sunt cam incepator intr-ale programarii si chiar nu am reusit sa o rezolv, dar ma prind eu dupa ce se termina concursul cum sta treaba :D
0,0p / 0 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Re: [13] Concurs - Datorii

Postby noobakaflo » 26 Aug 2011, 09:22

Eu nu prea reusesc sa inteleg problema... Deci , programul ar trebui sa verifice daca Iahim poate restituii banii UNUI SINGUR prieten indatorat lui,unui grup de prieteni ( ceea ce inteleg din exemplu)? Sau...sa verifice daca toti banii primiti sunt egali cu toti banii indatorati...?
0,0p / 0 votes
User avatar
noobakaflo
Bit
 
Joined: 10 Dec 2010
Location: Ploiesti
Status: 1

Re: [13] Concurs - Datorii

Postby DarkByte » 26 Aug 2011, 09:28

Trebuie sa gaseasca un subgrup de prieteni (care ii datoreaza SI carora le datoreaza bani) in asa fel incat, daca isi aduna toti banii de la prietenii care ii sunt datori, poate plati datoriile catre prietenii carora le este dator, fara a ramane cu bani.

Bineinteles, se presupune ca Iahim nu are niciun ban.
0,0p / 0 votes
User avatar
DarkByte
11011011
 
Joined: 29 Dec 2009
Status: 140

Re: [13] Concurs - Datorii

Postby sharky92 » 29 Aug 2011, 20:43

And the winner is ?
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: [13] Concurs - Datorii

Postby new_luca » 29 Aug 2011, 23:02

Probabil nu s-a oferit nimeni sa "jurizeze" concursul iar Mihai este plecat in vacanta :p pentru ceva timp.
0,0p / 0 votes
Image
User avatar
new_luca
Byte
 
Joined: 03 Jul 2011
Location: Gaesti
Status: 12

Re: [13] Concurs - Datorii

Postby noobakaflo » 29 Aug 2011, 23:09

new_luca wrote:Probabil nu s-a oferit nimeni sa "jurizeze" concursul iar Mihai este plecat in vacanta :p pentru ceva timp.

Foarte probabil.. Pentru cei care au trimis solutii...cum se făcea ? Am avut si eu o idee,dar se lega de backtracking( încă nu ştiu cu ce se mănâncă). Se putea fara ? :D
0,0p / 0 votes
User avatar
noobakaflo
Bit
 
Joined: 10 Dec 2010
Location: Ploiesti
Status: 1

Re: [13] Concurs - Datorii

Postby eni4ever » 29 Aug 2011, 23:20

^ Puteai să încerci o soluție recursivă dar, după natura problemei (complexitate exponențială), îți rugai neamul din anul 2500 să-ți trimită rezultatul pentru, să zicem, 15 prieteni. Asta considerând că ar mai exista picior de om prin anul acela.

Problema este clasică. Este o variațiune a deja celebrei și totodată dificilei probleme cu rucsacul : problema cu subsume.
0,0p / 0 votes
Image

"Rațiunea vine în umbre scurte numite suferințe." Victor Adăscăliței
"Bender: Anything less than immortality is a complete waste of time.
Zoidberg: Then suicide it is! Step into my office ..." Futurama S06E06
User avatar
eni4ever
DWord
 
Joined: 03 Jan 2010
Location: Timișoara
Status: 57.83

Re: [13] Concurs - Datorii

Postby sharky92 » 30 Aug 2011, 09:35

Eu am ales sa folosesc metoda BackTracking si pentru 20 de prieteni am avut timp sa imi contactez neamurile din 2500 :D.
0,0p / 0 votes
User avatar
sharky92
Bit
 
Joined: 09 Nov 2010
Status: 2

Re: [13] Concurs - Datorii

Postby Mihai » 31 Aug 2011, 11:53

Deocamdată nu am avut timp să mă uit peste soluții așa că nu mă pot pronunța. O să-l rog totuși pe Victor să dea el drumul la un nou concurs (te rog, Victor ;D) urmând ca la acesta să stabilesc câștigătorul atunci când voi prinde ceva timp liber.
0,0p / 0 votes
User avatar
Mihai
Byte
 
Joined: 29 Dec 2009
Status: 25


Return to Concursuri de programare desktop

Who is online

Users browsing this forum: No registered users and 0 guests

cron