infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Dan-Leonard Crestez din Martie 08, 2004, 19:51:45



Titlul: 002 Jocul Flip
Scris de: Dan-Leonard Crestez din Martie 08, 2004, 19:51:45
Aici puteţi discuta despre problema Jocul Flip (http://infoarena.ro/problema/flip).


Titlul: 002 Jocul Flip
Scris de: Irina Trocan din Martie 16, 2004, 19:17:10
N-ar strica sa dati mai multe exemple...


Titlul: e bunicica
Scris de: Silviu-Ionut Ganceanu din Martie 27, 2004, 15:50:31
Problema lui Mircea e buna.. desi e simpla.. trebuie sa fie si probleme de astea pe site pentru cei mai slabi care nu pot face chestii avansate.. poate nu-ti place tie dintr-un mod pur personal, nu stiu.. Sincer eu nu agreez problemele de formule si nu ca nu m-as prinde... ci pentru ca nu consider aceste probleme de 'informatica'.. tot ce trebuie sa faci e sa gasesti formula si apoi sa bagi repede numerele mari (eventual).. total inutil .. sincer eu nu as da la un baraj pentru IOI o asa problema.. decat daca e se rezolva cu dinamica (vezi gardx a lui Andreica de la loturile din 2002, x=4 sau 5).. sa-mi spuneti si mie cand vedeti la IOI o problema de formula, la americani sau mai stiu eu pe unde.. as spune ca e spefic romaneasca faza cu formulele...


Titlul: 002 Jocul Flip
Scris de: Irina Trocan din Martie 28, 2004, 08:25:50
Cum putem propune probleme? As avea cateva sugestii...

Intr-adevar, sunt prea multe probleme cu formule. Anul trecut, la clasa a VIII-a, prima problema cred ca a fost facuta mai degraba plecand de la formula...


Titlul: 002 Jocul Flip
Scris de: Andrei G�nczi in C++ :D din Martie 28, 2004, 12:13:33
chiaaaaaaaaar... cum putem propune probleme...  :D


Titlul: 002 Jocul Flip
Scris de: Tene Matei din Martie 29, 2004, 21:00:14
Asta-i o problema cu formula ? Eu am facut-o prin comparatii intre suma nr negative si suma nr pozitive dintr-o coloana respectiv linie. Impropriu spus "am facut-o" pentru ca evaluatorul nu mi-a dat decat 40 pcte ! Insa chiar nu vad unde-i greseala in rationament ! Este pur si simplu logic ! Si totusi evaluatorul pare sa aiba o problema cu rezolvarea asta. De-asta am apelat la acest forum...
Eu tot fac flip pana cand suma numerelor negative (in valoare absoluta) devine mai mica decat suma nr pozitive de pe orice coloana si linie...]

Any other ideas where I've been missing out ?  :(


Titlul: 002 Jocul Flip
Scris de: Cristian Strat din Martie 30, 2004, 02:09:43
Citat
Eu tot fac flip pana cand suma numerelor negative (in valoare absoluta) devine mai mica decat suma nr pozitive de pe orice coloana si linie...]


pai nu trebuie sa fie doar mai mica ci cat mai mica intrucat iti cere suma totala maxima

nu stiu exact ce si cum faci dar poate te ajuta sa-ti spun ca problema se face cu backtracking in complexitate O(2^N). succes!


Titlul: 002 Jocul Flip
Scris de: ciprycus din Iunie 29, 2004, 22:03:09
ce se pune in stiva?


Titlul: 002 Jocul Flip
Scris de: Hlihor Sergiu din Septembrie 29, 2004, 16:52:34
O linie sau o coloana se poate inmulti o singura data cu -1?  Sau putem sa le inmultim de cate ori ne taie capu?


Titlul: 002 Jocul Flip
Scris de: Mircea Pasoi din Octombrie 03, 2004, 11:49:17
Citat din mesajul lui: SergiuH
O linie sau o coloana se poate inmulti o singura data cu -1?  Sau putem sa le inmultim de cate ori ne taie capu?


De cate ori vrei, dar are vreun sens sa faci de mai multe ori?  :?:


Titlul: 002 Jocul Flip
Scris de: Adrian Negreanu din Ianuarie 17, 2005, 09:08:43
Fac flip pe coloane de suma negativa si obtin o suma imbunatatita.
Fac flip pe linii de suma negativa si obtin o suma imbunatatita.

Daca ma opresc aici, evaluatorul imi da 20 de puncte.

Daca reiau procesul de calcul, pana cand nu mai am sume negative pe linii sau pe coloane evaluatorul imi da 30 de puncte.

Si ma asteptam matematic ca problema sa mearga.

Unde poate fi problema?


Titlul: 002 Jocul Flip
Scris de: VladS din Ianuarie 27, 2005, 20:48:03
Pentru a lua 100 trebuie optimizata operatia de calcul al sumei?
Cam ce complexitate e recomandata (pentru aceasta operatie)?  :lol:


Titlul: zicea cineva ceva de o formula ?
Scris de: Liviu Bunda din Februarie 09, 2005, 08:06:08
a zis cineva ceva de o formula...sunt curios de o idee asupra formulei dc exista. o sa implementez un back sa vad cate puncte ia si mai postez aici rezultatele.


Titlul: 002 Jocul Flip
Scris de: Silviu-Ionut Ganceanu din Februarie 09, 2005, 14:04:32
Nu e nici o formula la mijloc. Se foloseste tehnica backtracking.. totusi backtracking-ul direct nu va lua prea multe puncte. El se poate optimiza daca observi un lucru destul de simplu. Mai posteaza daca ai nevoie de ajutor ;).


Titlul: 002 Jocul Flip
Scris de: Luca Vlad din Martie 21, 2005, 11:27:02
deci... am incercat sa o rezolv fara backtracking si nu inteleg unde gresesc.... eu am gandit in felul urmator... fac o parcugere pe coloane, si daca pe vreo coloana suma elementelor este mai mica decat zero ... o intorc.... dupa care fac o parcurgere pe linii si la fel daca gasesc vreo suma mai mica ca 0 o intorc si reiau parcurgerea matricii pe coloane...... si totusi am obtinut 0 puncte... nu vad cum sar putea face cu back... mati putea lumina va rog? :)

[later edit]
sau ati putea macar sami mai dati niste teste? sa vad unde gresesc cu logica mea? multumesc :)


Titlul: 002 Jocul Flip
Scris de: Silviu-Ionut Ganceanu din Martie 21, 2005, 11:47:11
Nu am timp sa creez un test pe care "logica ta" sa pice. Ai incredere in mine si crede-ma pe cuvant ca nu este corecta. Dar cum aschia nu sare departe de trunchi, extinzand un pic ideea ta, ce-ar fi daca ai genera toate posibilitatile de a inmulti cu 1/-1 pe coloane si apoi sa faci ceva pentru linii ? Te ajuta cu ceva sugestia mea ?


Titlul: 002 Jocul Flip
Scris de: Luca Vlad din Martie 21, 2005, 11:54:31
am sa incerc... nu imi trebuie neaparat sa creezi un test... macar cele de la evaluator pt ca acelea lea picat... oricum.. o sa vad ce pot face... sper sa imi iasa :)

[later edit]
poate is mai incet eu de minte... deci sa bag un backtracking in care in stiva sa retin care coloana am inmultito cu -1 si apoi sa mai bag unu pt linii? asta nu ar depasi timpul de executie?  :)


Titlul: 002 Jocul Flip
Scris de: Andrei G�nczi in C++ :D din Martie 22, 2005, 10:44:54
Citat din mesajul lui: llucky
am sa incerc... nu imi trebuie neaparat sa creezi un test... macar cele de la evaluator pt ca acelea lea picat... oricum.. o sa vad ce pot face... sper sa imi iasa :)

[later edit]
poate is mai incet eu de minte... deci sa bag un backtracking in care in stiva sa retin care coloana am inmultito cu -1 si apoi sa mai bag unu pt linii? asta nu ar depasi timpul de executie?  :)


ideea e ca tu faci back doar pe linii, in 2^N (n<=16) si verifici ceva pe coloane, shi ai complexitate totala O(N*2^N) care itzi intra lejer in timp.


Titlul: 002 Jocul Flip
Scris de: Iorgulescu Calin din Aprilie 12, 2005, 10:51:45
Eu am incercat pana acum un back destul de simplu in care tineam o stiva (m+n), deci si pt. linii si pt. coloane. Drept urmare nu am luat decat 40 de puncte. Dar citind posturile mi-am dat seama ca nu am abordarea corecta. Dar totusi, nu prea imi dau seama cum as putea face. :oops: Deci pt. fiecare coloana fac un back pe linii si verific ceva pe coloane? Dar totusi ce? Am incercat sa iau fiecare coloana si sa ii fac flip si sa fac back pe coloane pt. ea iar apoi sa iau suma maxima, dar nici asa nu a mers. Poate ati putea sa-mi dati un sfat.


Titlul: 002 Jocul Flip
Scris de: Piros Lucian din Aprilie 12, 2005, 12:04:19
Citat din mesajul lui: calinux
Deci pt. fiecare coloana fac un back pe linii si verific ceva pe coloane? Dar totusi ce?


Poti sa verifici daca suma pe coloane nu e mai mica decat 0 ?!;)


Titlul: 002 Jocul Flip
Scris de: VladS din Aprilie 12, 2005, 17:32:40
Ai putea citi solutiile problemelor de la ONI 2002 clasa a IX-a. Poate te ajuta.
Succes.


Titlul: 002 Jocul Flip
Scris de: Iorgulescu Calin din Aprilie 12, 2005, 22:20:16
Gata ... am reusit si eu .... Multumesc tuturor care mi-au raspuns la post..... Sunteti cei mai tari!  :wink:

 :D  :D  :D  :D  :D  :D  :D


Titlul: 002 Jocul Flip
Scris de: Ciocas Radu din Decembrie 26, 2005, 01:50:12
Citat din mesajul lui: calinux
Eu am incercat pana acum un back destul de simplu in care tineam o stiva (m+n), deci si pt. linii si pt. coloane. Drept urmare nu am luat decat 40 de puncte. Dar citind posturile mi-am dat seama ca nu am abordarea corecta. Dar totusi, nu prea imi dau seama cum as putea face. :oops: Deci pt. fiecare coloana fac un back pe linii si verific ceva pe coloane? Dar totusi ce? Am incercat sa iau fiecare coloana si sa ii fac flip si sa fac back pe coloane pt. ea iar apoi sa iau suma maxima, dar nici asa nu a mers. Poate ati putea sa-mi dati un sfat.


M+N sau m*n ? explica te rog putin raspunsul


Titlul: 002 Jocul Flip
Scris de: Filip Cristian Buruiana din Decembrie 26, 2005, 14:09:36
Complexitatea optima e O((2^m) * n). De aici e destul de evident cum se face...

[Later edit]: calinux se referea ca tine o stiva de lungime (m+n) adica genera toate posibilitatile de a face flip la linii si coloane intr-o matrice MxN ( genera toate submultimile linii si coloane )


Titlul: 002 Jocul Flip
Scris de: Tira Cristian din Februarie 15, 2006, 13:25:18
Imi explica cineva ce ii cu RUN ERROR - SIGKILL ca tot asta o primesc la fiecare test! ](*,)  ](*,)


Titlul: 002 Jocul Flip
Scris de: Filip Cristian Buruiana din Februarie 15, 2006, 15:13:05
De obicei eu primeam SIGKILL cand declaram prea multa memorie ( adica mai mult de 64 MB ). Sau sa nu depasesti memoria stivei daca faci recursiv ( 1 MB ) - asta e cel mai probabil.


Titlul: 002 Jocul Flip
Scris de: Tira Cristian din Februarie 16, 2006, 13:21:19
Merci dar tot nu primesc mai mult de 10 pc. nu stiu ce sa fac. la toate exemplele formaulate de mine imi da corect(verificat pe hartie). #-o


Titlul: 002 Jocul Flip
Scris de: Marius Stroe din Februarie 16, 2006, 22:47:33
Citat din mesajul lui: Crusher
Merci dar tot nu primesc mai mult de 10 pc. nu stiu ce sa fac. la toate exemplele formaulate de mine imi da corect(verificat pe hartie). #-o


E clar ca nu ai o solutie corecta! Daca ai N linii poti sa folosesti bitii de 1 din reprezentarea binara a numerelor din [0, 2^N-1] pentru un flip  :wink: , fara backtracking si stive!


Titlul: 002 Jocul Flip
Scris de: Tira Cristian din Februarie 20, 2006, 12:36:03
imi poate spune cineva la exemplul
3 3
10 -2 -3
1 3 4
5 -1 -1
cat este suma maxima? #-o


Titlul: 002 Jocul Flip
Scris de: Bogdan-Cristian Tataroiu din Februarie 20, 2006, 16:09:19
Citat din mesajul lui: Crusher
imi poate spune cineva la exemplul
3 3
10 -2 -3
1 3 4
5 -1 -1
cat este suma maxima? #-o


28


Titlul: 002 Jocul Flip
Scris de: Tira Cristian din Februarie 21, 2006, 13:32:39
merci. Asa imi da si mie! Inseamna ca ce face programul e bine. Dar tot nu-mi dau seama de ce nu primeste numai 10 pc. O sa incerc sa dau si numere mai mari sa vad daca acolo nu o da in bara. :evil:


Titlul: 002 Jocul Flip
Scris de: Machu Picchu din Februarie 21, 2006, 22:03:25
Am facut problema si am luat 80 de puncte, doua teste imi ies din timp, se poate sa fie din cauza ca folosesc pascal si nu c++? Ce ar trebui sa fac?


Titlul: 002 Jocul Flip
Scris de: Andrei Grigorean din Februarie 21, 2006, 22:14:02
intra si in pascal lejer. incearca sa fac ce a zis marius mai sus: sa te folosesti de reprezentarea binara a numerelor din [0, 2^N-1]. ;)


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ciordas Dragos din Noiembrie 03, 2006, 22:27:44
Imi da bine si la testul anterior, si la cel din problema. Dar totusi iau WA la toate.
La testul asta suma e 79 ?
7 3
10 -2 -3
1 3 4
5 -1 -1
5 6 -9
7 15 -8
-5 9 13
5 6 7


Titlul: Raspuns: 002 Jocul Flip
Scris de: Bondane Cosmin din Noiembrie 03, 2006, 22:57:09
mie imi da 67. [cu sursa de 100]


Titlul: Raspuns: 002 Jocul Flip
Scris de: Mierla Laurentiu Marian din Noiembrie 04, 2006, 22:00:44
Imi da bine si la testul anterior, si la cel din problema. Dar totusi iau WA la toate.
La testul asta suma e 79 ?
7 3
10 -2 -3
1 3 4
5 -1 -1
5 6 -9
7 15 -8
-5 9 13
5 6 7
Conform algoritmului meu (pentru care am obtinut 100 p.) raspunsul este tot 79, dar vazand ce timp ai obtinut pentru fiecare test (0.01s) am ceva dubii in legatura cu algoritmul tau.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ciordas Dragos din Noiembrie 05, 2006, 00:29:37
Totusi cat da 67 sau 79 ?
Algoritmul meu verifica fiecare coloana, apoi fiecare rand, si daca suma pe vreun rand sau coloana e mai mica sau egala cu 0 inmulteste cu -1. Cand suma pe fiecare rand, respectiv pe fiecare coloana e mai mare ca 0 se opreste. Probabil e ceva gresit la el, dar momentan nu-mi dau seama ce :-k .


Titlul: Raspuns: 002 Jocul Flip
Scris de: Mierla Laurentiu Marian din Noiembrie 05, 2006, 09:24:56
Din moment ce 79>67 si in contextul problemei ne trebuie o suma cat mai mare, teoretic 79 este corect.
Vezi cat iti da petru
3 3
12 -4 -5
2 5 7
7 -2 -2
si apoi posteaza aici.
Dupa algoritmul tau cred ca da 22, dar corect este 42.
Citeste toate posturile de mai sus. O sa gasesti multe indicii.
 :thumbup:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ciordas Dragos din Noiembrie 05, 2006, 12:33:15
42 imi da... daca vrei iti dau un pm cu sursa


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ciocas Radu din Noiembrie 05, 2006, 12:41:27
42 imi da... daca vrei iti dau un pm cu sursa

Trebuie sa intelegi ca nu poti ajunge la o solutie maxima (optima) printr-o astfel de metoda, e adevarat poti prinde cateva teste dar asta doar din noroc. Ai nevoie de o tehnica care sa te conduca catre o solutie optima, in cazul de fata backtracking e cel mai la indemana din cauza restrictiilor lejere. Rezolva problema prin backtracking nu te mai chinui cu greedy, deoarece tehnica greedy nu ofera o solutie optima doar cand poti demonstra matematic acest lucru


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ciordas Dragos din Noiembrie 05, 2006, 13:03:23
Momentan am luat 30 pe sursa si ma multumesc cu atat pana mai invat ceva informatica. Ms pt ajutor.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Marius Stroe din Noiembrie 05, 2006, 16:57:41
Momentan am luat 30 pe sursa si ma multumesc cu atat pana mai invat ceva informatica. Ms pt ajutor.
Nu te multumi cu putin!  :wink:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ceauru Andrei din Decembrie 12, 2006, 20:46:33
ma fratilor!!!! problema e foarte simpla!! s-a dat acum cateva zile la dan barbilian. ca sa rezolvi problema trebuie sa verifici pe fiecare linie, respectiv coloana, daca suma elementelor negative in modul este mai mare ca suma elementelor pozitive. daca e asa inmultesti toata linia cu -1.(acelasi lucru si pt coloane)    =D&gt;   
PS: nu e vorba de nici o formula, cum zic altii!!!!


Titlul: Raspuns: 002 Jocul Flip
Scris de: Filip Cristian Buruiana din Decembrie 12, 2006, 22:04:32
Nu e asta solutia corecta intotdeauna. Trimite in arhiva de probleme sa vezi cate puncte obtii cu solutia asta.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Solomon Avner din Ianuarie 26, 2007, 16:14:16
Backtracking 100%  :fighting:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Diculescu Elena Alexandra din Ianuarie 31, 2007, 15:40:09
Daca faci cu back ajunge la 4294967296 cazuri..maxim...nu garantez ca iti intra in timp... :sad:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Ianuarie 31, 2007, 15:45:18
backu nu e 100% ci doar 50% :D si intra in timp.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Spulber Iosif din Februarie 01, 2007, 11:38:21
I. M-am gandit, cum s-a mai zis, sa fac suma de negative si suma de pozitive si daca e mai mare atunci FLIP. La fel, s-a mai spus ca asta nu e solutie (cand faci FLIP strici alte sume care ar putea fi abordate mai "eficient" - dai FLIP la alea, o "sacrifici" pe asta... ma rog, intelegi ideea)

II. Backtracking - asta pare a fi cel mai logic... dar totusi... de ce sa te complici? Asa ca ajungi la III.

III. Dai FLIP doar la o coloana si o linie nu? Atunci de ce sa nu iei doua for-uri si pentru fiecare linie si fiecare coloana sa dai FLIP, calculezi suma si voila.

PS: Totusi, nu am incercat deci... :) poate vorbesc in dodii.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Februarie 01, 2007, 12:27:21
[Dai FLIP doar la o coloana si o linie nu?]

NU. poti sa dai flip la oricate linii si la oricate coloane.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Spulber Iosif din Februarie 01, 2007, 13:46:08
Ah, atunci cade III. Clar Backtracking :) Era mai interesant fara :)


Titlul: Raspuns: 002 Jocul Flip
Scris de: Silaghi Raul din Februarie 05, 2007, 11:05:58
si eu am probleme la "Jocul" asta. nushtiu cum sta treaba la voi da eu oricum as incerca nu imi iese.Eu adun elementele negative si apoi elementele pozitive de pe fiecare linie si daca |elemente negative |> elemente pozitive
comut coloana. Acelas lucru si pentru coloane. si primesc 10 p din mila  :-k si la restu imi zice k raspuns gresit.
Va rog ajutati-ma  :thumbdown:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Paul-Dan Baltescu din Februarie 05, 2007, 11:35:20
Ce faci tu acolo e greedy, nu backtracking. Citeste topicul! Gasesti suficiente indicatii.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Silaghi Raul din Februarie 05, 2007, 12:10:46
pot sa il citesc k au mai multi ideea aceasta si mie mi se pare buna. Iar eu nu fac Backtrking la probleme din astea nici daca ..... :evil:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Adrian Diaconu din Februarie 05, 2007, 12:39:32
Pai chiar nu este buna ideea ... Nu da raspuns bun pentru un caz extrem de simplu
Cod:
2 3
-4 -2
Tu te uiti la prima linie si alegi sa o intorci. Obtii
Cod:
-2 3
4 -2
A doua linie o lasi asa cum este si cand verifici pe coloane din nou nu vei face nici o modificare.
Suma in cazul tau va fi 3.
Daca pe cazul initial am fi intors doar ultima coloana obtineam
Cod:
2 3
4 2
suma 11

In cazul in care faci intai verificarea pe coloane si apoi pe linii se poate construi un exemplu asemanator.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Silaghi Raul din Februarie 05, 2007, 12:52:41
Hmmmm.... la asta nu ma-m gandit.... :-k  si atunci cum ar trebui sa procedez???
tu de exemplu cum teai gandit?? :-'


Titlul: Raspuns: 002 Jocul Flip
Scris de: Adrian Diaconu din Februarie 05, 2007, 13:20:08
Daca citeai atent posturile anterioare ai fi vazut ca s-a mai discutat asta...
Solutia este backtracking...


Titlul: Raspuns: 002 Jocul Flip
Scris de: Radu Patulescu din Februarie 21, 2007, 09:21:08
Am citit tot threadul de vreo 3 ori ca sa nu-mi scape nimic. Am mers pe varianta mea initiala, prin care verific toate posibilitatile: Intorc fiecare coloana, si pe urma parcurg fiecare linie. Unde Suma_linie < 0 intorc linia. La sfarsit calculez suma intregii matrici si o compar cu suma dinainte de "flipuri". Dupa ce termin coloanele aplic acelasi algoritm pentru linii. In teorie problema este buna, si in toate exemplele din acest thread mi-a mers. Dar la evaluare iau doar 10 puncte :(


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ivan Nicolae din Februarie 21, 2007, 10:03:25
 Ideea e buna... ai gresit ceva la implementare. Pan' nu-ti vad sursa nush ce sa zic...... incearca sa o implementezi din nou de la zero.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Radu Patulescu din Februarie 21, 2007, 10:11:00
ok.multumesc mult..asta voiam sa stiu. daca am gresit ceva in gandirea sau daca trebuie sa ma uit pe implementare:)


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ivan Nicolae din Februarie 21, 2007, 10:29:35
Intorc fiecare coloana, si pe urma parcurg fiecare linie. Unde Suma_linie < 0 intorc linia.
Sper ca aici ai vrut sa zici ca incerci toate posibiliatile de a intoarce coloane.... :-'


Titlul: Raspuns: 002 Jocul Flip
Scris de: Nicu G din Februarie 23, 2007, 11:48:52
vreau sa vad o sursa , cum spuneam si in alt topic incerc sa fac trecerea de la pascal la c++ si nu stiu cum sa fac  "ceva"


Titlul: Raspuns: 002 Jocul Flip
Scris de: Bogdan-Alexandru Stoica din Februarie 23, 2007, 12:39:39
pai posteaza aici acel "ceva" si poate reusim sa te lamurim :)


Titlul: Raspuns: 002 Jocul Flip
Scris de: Adrian Diaconu din Februarie 23, 2007, 12:42:16
Poti sa intrebi cum se face acel "ceva". O sursa asa direct nu cred ca iti va da nimeni mai ales la modul imperativ sub care ai cerut-o. Oricum iti va fi mult mai de ajutor sa intelegi acel "ceva" si apoi sa il implementezi de unul singur.


Titlul: Raspuns: 002 Jocul Flip
Scris de: Andrei Grigorean din Februarie 23, 2007, 19:56:50
vreau sa vad o sursa , cum spuneam si in alt topic incerc sa fac trecerea de la pascal la c++ si nu stiu cum sa fac  "ceva"

Ar fi bine ca inainte sa faci probleme pe infoArena in C++ sa iti iei o carte sau o documentatie de pe net si sa inveti bine limbajul. Implementarea acestei probleme nu este deloc greu de "tradus" din pascal in C++, asa ca nu ar trebui sa iti ia mai mult de cateva ore sa reusesti sa iei 100 de pct.

Bafta  :thumbup:


Titlul: Raspuns: 002 Jocul Flip
Scris de: Suciu Adrian din Februarie 25, 2007, 16:01:32
Am facut un btrack de m(nr de coloane) si fac flip la linie daca suma e <0 :

Compilare:

Citat
Test   Timp executie   Memorie folosita   Mesaj   Punctaj
1   4ms   12kb   Ok!   10
2   0ms   8kb   Ok!   10
3   40ms   176kb   Raspuns gresit   0
4   0ms   12kb   Ok!   10
5   20ms   176kb   Ok!   10
6   24ms   176kb   Ok!   10
7   208ms   180kb   Ok!   10
8   236ms   176kb   Ok!   10
9   236ms   176kb   Ok!   10
10   252ms   172kb   Ok!   10
Punctaj total:   90
  ](*,) ](*,)

De ce nu merge pt testu 3 ? :((

Later edit :

Nvm.. am rezolvat problema  :yahoo:.. nu mergea daca aveam mai multe coloane decat linii  :-'


Titlul: Raspuns: 002 Jocul Flip
Scris de: Ivan Nicolae din Februarie 25, 2007, 17:07:22
Am facut un btrack de m(nr de coloane) si fac flip la linie daca suma e <0 :

..................................

De ce nu merge pt testu 3 ? :((

  Asta cred ca numai tu poti sa afli....  :thumbup:  vezi si tu prin codul daca ai..... greseli :-'


Titlul: Răspuns: 002 Jocul Flip
Scris de: Busuioceanu Alexandru din Februarie 28, 2007, 21:20:20
prieteni am inceput si eu sa invatz de unul singur c++ si sunt la inceput pana acum n`am mai folosit martirci iar in cartile mele din care invatz nu am exemple concrete asa ca va rog mult sa imi dati si mie o solutie la aceasta problema daca nu se poate aici pe forum la email: [email protected]
va multumesc !


Titlul: Răspuns: 002 Jocul Flip
Scris de: Bondane Cosmin din Februarie 28, 2007, 21:29:17
Nu cred ca vei primi ceva sursa la problema asta...

Legat de matrici :

int a[101][101]; // declararea unei matrici

// Sper ex ai aici afisarea unei matrici cu n linii si m coloane.
for(int i = 1; i <= n; i++ )
{
   for (int j = 1; j <= m; j++ )
   {
        fout << a[i,j] << " ";
   }
   fout << "\n";
}


Titlul: Răspuns: 002 Jocul Flip
Scris de: Ivan Nicolae din Februarie 28, 2007, 21:54:39
 Sursa corecta sigur nu primesti.... dar daca citesti mai sus pe forum gasesti destule idei....  :-'
 Daca vrei surse cu matrici.... asta se rezolva  :D    desi ce a scris cosmin mai sus pare a fi arhisuficient pentru a intelege.....  :weightlift:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Tabara Mihai din Februarie 28, 2007, 22:12:30
prieteni am inceput si eu sa invatz de unul singur c++ si sunt la inceput pana acum n`am mai folosit martirci iar in cartile mele din care invatz nu am exemple concrete asa ca va rog mult sa imi dati si mie o solutie la aceasta problema daca nu se poate aici pe forum la email: [email protected]
va multumesc !

Depinde din ce manuale inveti.Eu te-as sfatui sa iti faci rost de niste carti care te pun pe picioare cu baza din C++. Aici as recomanda Tudor Sorin de a IX-a.

( sunt si exemple cu siruri, matrici, algoritmi mai mici etc )  :ok:

 :thumbup:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Stamate Cosmin din Martie 01, 2007, 20:52:11
Pai... am incercat si eu sa rezolv problema asta (mi-a aratat-o unul de a X-a). Nu am facut inca backtracking (sunt a IX-a) fiindca nu prea m-a atras, afland defectele metodei. Eu am mers pe idea (postata anterior) ca verific, pe fiecare coloana, daca suma numerelor negative (transformate in numere pozitive cand le adaug) este mai mare decat cele pozitive. Daca da, pastrez coloana. Apoi din toate coloanele o aleg pe cea la care diferenta e cea mai mare. La fel pentru linii. Apoi fac flip la cea care are diferenta mai mare, coloana sau linia. Si repet procesul. Am facut programul (in Pascal) si merge perfect cu toate datele de intrare pe care le incerc. Totusi, evaluatorul mi-a dat 0 puncte pentru fiecare test, pentru raspuns gresit. Ma poate lamuri careva care ar fi problema? :sad: Ms mult.

Folosesc Borland Pascal, apropo, ar putea asta reprezenta vreo problema? :-s


Titlul: Răspuns: 002 Jocul Flip
Scris de: Suciu Adrian din Martie 01, 2007, 21:04:56
Citat
Folosesc Borland Pascal, apropo, ar putea asta reprezenta vreo problema?

Nu cred ca asta ar putea reprezenta o problema .. s-au mai discutat ideile tale pe threadul asta ... ideea e pe scurt ca daca se foloseste metoda ta, nu vei gasi suma optima doar pentru unele cazuri .. de ce ? citeste mai sus ca este explicat mai bine decat pot eu ... solutia este sa faci un btracking pe coloane/linii si apoi sa faci flipurile necesare pe linii/coloane :P


Titlul: Răspuns: 002 Jocul Flip
Scris de: Stamate Cosmin din Martie 01, 2007, 21:06:48
Meh... atunci ma bag sa invat si metoda asta :P. Oricum, solutia mea mi se pare foarte logica (lol) si nu pricep de ce nu merge deoarece am obtinut rezultate bune la testele mele. Ms de ajutor! :D

EDIT: Daca te refereai la explicatia asta (http://infoarena.ro/forum/index.php/topic,29.msg11995.html#msg11995), atunci sa stii ca este o diferenta intre solutia la care se adresa explicatia aia si solutia mea. A mea ar solutiona cu succes datele alea de intrare :).


Titlul: Răspuns: 002 Jocul Flip
Scris de: Busuioceanu Alexandru din Martie 01, 2007, 21:11:37
Cod:
Restrictii si precizari

    * 1 ≤ N, M ≤ 16
    * Tabla de joc contine numere intregi din intervalul [-1.000.000,1.000.000]

deci zice ca n e minim 1 iar m e maxim 16 deci la matrice la m voi pune 16 si la n?
adik matrice [ x ][16] //fara spatii

x=?



Titlul: Răspuns: 002 Jocul Flip
Scris de: Stamate Cosmin din Martie 01, 2007, 21:14:32
* 1 ≤ N, M ≤ 16

=

1≤N≤16, 1≤M≤16

:)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Suciu Adrian din Martie 01, 2007, 21:23:30
A mea ar solutiona cu succes datele alea de intrare :).
O solutioneaza ?  .. daca da incearca si asta ..

Cod:
3 3
2 -3 3
4 0 -5
3 20 7

Ar trebui sa iti afiseze 35 dar raspunsul corect e 37.Daca iti da 37 incearca sa faci transpusa matricii asteia si vezi ce rezultat iti da :P . Daca tot 37 iti da inseamna ca exemplul meu nu e bun  :oops:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Stamate Cosmin din Martie 01, 2007, 21:50:44
Ufff... da... da 35. De ce, nu stiu. Oricum, am incercat sa fac pe foaie problema. Uite cum am mers:

Flip la a doua linie.
Cod:
2 -3 3
-4 0 5
3 20 7

Flip la prima coloana.
Cod:
-2 -3 3
4 0 5
-3 20 7

Flip la prima linie.
Cod:
2 3 -3
4 0 5
-3 20 7

Care da 35. Nu vad cum as putea obtine 37 :oops:...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Suciu Adrian din Martie 01, 2007, 22:01:29
of scuze .. greseala mea .. vroiam sa zic ca s-ar putea sa iti arate 33 si raspunsul corect e 35 nu eram atent cand am scris postul .. se pare ca nu e exemplul meu bun.. scuze de deranj :P


Titlul: Răspuns: 002 Jocul Flip
Scris de: Stamate Cosmin din Martie 01, 2007, 22:22:43
Ufff... scuze si eu de deranj, am facut niste greseli si imi dadea 35 din greseala. Totusi erau greseli in flip.in. :oops: Da, imi da 33 si vad acum unde e greseala. Totusi, nu ma las pana nu o rezolv fara backtracking. Scuze din nou, iar am fost neatent, ca de obicei :oops:.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Suciu Adrian din Martie 01, 2007, 22:31:47
Totusi, nu ma las pana nu o rezolv fara backtracking. :oops:.

Daca reusesti de 100 vreau si eu sursa : :wink: :D


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vlad Paunescu din Martie 07, 2007, 19:42:37
M-am chinuit ceva timp sa rezolv aceasta problema. O prima idee ar fi sa generezi toate combinatiile in care poti inmulti liniile cu -1 sau 1 ( inmultirea cu 1 se face inmultind de 2 ori cu -1). Apoi, dupa fiecare combinatie generata sa verifici fiecare coloana daca suma sa negativa si daca da sa ii faci flip.
O problema ajutatoare ar fi generarea tuturor combinatiilor de 0 si 1 de lungime n.

Cod:
...

[Editat de moderator: nu mai posta cod asa explicit. Cei care stiu cum se genereaza se descurca sa implementeze singuri. Poti da indicii sau sa explici cum se genereaza daca chiar vrei]


Titlul: Răspuns: 002 Jocul Flip
Scris de: razyelx din Aprilie 02, 2007, 20:47:09
nu am citit pe aici pre multe postu-ri numa primele.. as vrea sa stiu fara backtracking nu se poate? :P


Titlul: Răspuns: 002 Jocul Flip
Scris de: Pandia Gheorghe din Aprilie 02, 2007, 20:51:20
Daca permite evalutaorul marimea sursei, poti face cu precompilare. Generezi toate combinatiile de 1 si 0 de lungime 16 si apoi verifici pentru un n dat.

Dar backtracking-ul se comporta exemplar, si te-as sfatui sa nu te complici cand nu e necesar!  :ok:


Titlul: Răspuns: 002 Jocul Flip
Scris de: razyelx din Aprilie 02, 2007, 21:27:33
eu mi-am format un algoritm pe care iau numa 30  de pct. suna cam asa... Fac suma elementele de pe coloane daca e sub 0 inmultesc coloana cu -1 la fel si cu randurile... pt exemplu merge  =D&gt;. smecher nu? as dori sa imi spuneti care e bugg-ul in gandirea mea? adik am eu cateva indei dar... nu sunt sigur..


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sima Cotizo din Aprilie 02, 2007, 21:35:18
Ce faci tu e un greedy... O sa iti zic ce a zis si Greco in alt thread, "nu intreba ce e gresit, mai bine demonstreaza de ce e bine!"... in general greedy-ul buseste... aici din cate imi aduc aminte e un back + o dinamica : o dinamica iti face intotdeauna solutia optima (daca e corecta :P ) iar backul verifica toate variantele... in schimb cu greedy speculezi...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Aprilie 02, 2007, 21:52:01
Citat
smecher nu?

Nu e nimik smcher in ce ai gandit tu ;)). Daca te uitai pe posturile anterioare ai fi vazut ca s-au mai gandit mai multi la ideea asta si au trebuit sa renunte ptr ca NU este o solutie corecta. Ce faci u e 100% greedy, si cum a zis si sima cotizo acesta nu este corect. Daca postezi pe forum o demonstratie matematica corecta la greedyu tau eu promit ca iti voi gasi bugul in asa fel incat as iei 100 ;)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Nicodei Eduard din Aprilie 19, 2007, 11:54:19
eu mi-am format un algoritm pe care iau numa 30  de pct. suna cam asa... Fac suma elementele de pe coloane daca e sub 0 inmultesc coloana cu -1 la fel si cu randurile.

Recunosc, asta este prima rezolvare care mi-a venit in minte. Dar am 2 exemple care nu merg cu metoda asta:

  5   -1    5  5 5
  5   -1    5  5 5
-1  100 -1  -1 -1
  5   -1    5  5  5
  5   -1    5  5  5
se comuta linia 3 si coloana 2.

-1 10 10 10
-1 10 10 10
100 -1 -1 -1
-1 10 10 10
200 -1 -1 -1
-1 10 10 10
aici sunt liniile 3 si 5 si coloana 1.

ma rog, in exemplele astea, toate elementele devin in final pozitive, dar nu-i obligatoriu.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Mesc Alin din Mai 07, 2007, 22:58:35
OK, dupa ceva incercari 30, 70, 90, 100.
Nu am facut cu backtracking, desi e clar ca asa ar fi cel mai bine.
Am facut un soi de greedy cu perturbari random - deci un algoritm probabilist.
Adica, incerc sa maresc maximal suma pe principiile de bun-simt, pe linie si coloana - cand chestia se poate, flip. In caz ca nu se poate mari suma, atunci coafez matricea pseudoaleator de cateva ori si continui cautarea.
Cea mai interesanta chestie la solutia mea cred ca este faptul ca merge :-). Tehnic vorbind, cred ca este asemanatoare cu random-restart steepest ascent hill-climbing: http://en.wikipedia.org/wiki/Hill_climbing (http://en.wikipedia.org/wiki/Hill_climbing) doar ca nu face random-restart, ci random-sidestepping, random-jiggle, sau cam asa ceva. Oricum, traiasca si-nmulteasca(-se) random seed-ul de pe masina de evaluare ;-).

O sa incerc acum si cu backtracking si... mai am o idee :-).

Alin



Titlul: Răspuns: 002 Jocul Flip
Scris de: Andrei Grigorean din Mai 08, 2007, 09:32:08
Nu este deloc greu sa implementezi un back la problema asta ;).

Pana atunci, long live ciucuielile!


Titlul: Răspuns: 002 Jocul Flip
Scris de: Mesc Alin din Mai 08, 2007, 20:53:55
Tocmai, nu e deloc greu cu back :-) De aia ma gandeam la ceva mai interesant, in masura in care se va putea.

Alin


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sebastian Crisan din Iunie 03, 2007, 16:58:23
am o intrebare, desi e offtopic...

am facut declaratia
Cod:
long long  int SMax=-32000000000;

si la compilare obtin eroarea

Cod:
user.cpp:4: error: integer constant is too large for 'long' type
  :shock:

ma poate lamuri cineva pls?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Puni Andrei Paul din Iunie 03, 2007, 17:19:55
ai putea sa incerci

Cod:
long long  int SMax=-3200000*10000;


Titlul: Răspuns: 002 Jocul Flip
Scris de: Bondane Cosmin din Iunie 03, 2007, 17:20:47
Incearca :
long long  int SMax=-32000000000LL;


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sebastian Crisan din Iunie 03, 2007, 17:38:20
au mers ambele varinate pe care mi le-ai recomandat... ms de ajutor...  :ok:
dar poate imi explica cineva care era problema...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Iunie 03, 2007, 17:49:12
Problema era ca nu poti atribui direct unei variabile un numar mai mare de 32 biti  :thumbup:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Adrian Diaconu din Iunie 03, 2007, 23:55:52
Daca nu pui LL la sfarsit compilatorul presupune ca este int dar -32000000000 nu se incadreaza in timpul int.
LL la sfarsit semnifica faptul ca este vorba de o constanta long long.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Calin Paul din Iulie 03, 2007, 19:52:26
Citat
O((2^m) * n)

ce inseamna O ala ? ;D
sa nu mor prost nu de alta  :quagmire:

(nu e offtopic ca a montionat cineva chestia asta acu vreo 70 de posturi xD)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Iulie 03, 2007, 20:35:35
Constanta :P. acel 2^m*n reprezinta un numar de operatii destul de orientativ.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Stefan Istrate din Iulie 03, 2007, 20:47:41
Constanta? :eyebrow: Notatia O este pentru o functie ce exprima dependenta ordinului de crestere al timpului/memoriei in raport cu variabilele date.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Tirca Bogdan din Ianuarie 06, 2008, 12:38:57
Eu nu am incercat prin backtraking.In fine solutia mea nu e foarte reusita dar nu asta ar fi problema cea mai mare.Ci  faptul ca in flip.out imi scrie de 3 ori solutia .Ex: dak solutia este 24 in flip.out imi va scrie 242424.Cine stie de ce :((.Si sa nu credeti ca am scris de mai mule ori in fisier.Am o singura --fprintf(g,"%ld",.....);
In locul ... este variabila;


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Ianuarie 06, 2008, 12:53:27
Pai ai putea sa postezi sursa... ca altfel nu ne puteam da seama... ori da`mi un mesaj provat cu Id-ul tau, si te ajut cu placere. [ pt ca nu prea e permisa postarea surselor pe forum]  :ok:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Bondane Cosmin din Ianuarie 06, 2008, 12:55:53
Eu nu am incercat prin backtraking.In fine solutia mea nu e foarte reusita dar nu asta ar fi problema cea mai mare.Ci  faptul ca in flip.out imi scrie de 3 ori solutia .Ex: dak solutia este 24 in flip.out imi va scrie 242424.Cine stie de ce :((.Si sa nu credeti ca am scris de mai mule ori in fisier.Am o singura --fprintf(g,"%ld",.....);
In locul ... este variabila;

Poate variabila aia chiar are valoarea 242424. Incearca fprintf(g,"%ld",varialbila-242424); si vezi daca iti afiseaza 0.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Tirca Bogdan din Ianuarie 06, 2008, 13:06:11
Pai gasi care era problema.Eu aveam mai multe variabile pentru mai multe sume totale ale unor matrici.Iar la sfarsit aveam mai multe if...
        if...ca sa aflu maxima dintre ele .Si dupa ce bagai "else" intre ele nu mai am problema asta.Dar de ce nu mergea doar cu "if" simplu?Oare la mine toate sumele matricelor sunt egale?:((Nu cred dar se poate :(( bogdan_tmm e id
       


Titlul: Răspuns: 002 Jocul Flip
Scris de: Prigoana Cristian din Martie 02, 2008, 14:36:18
de exemplu, am linia 1 2 -3 -4, trebuie sa o comut, ea devenind -1,-2,3,4, si daca am de comutat prima  coloana, atuncia linia devine 1,-2,3,4?   :D


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Martie 02, 2008, 15:52:24
da


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vladimir Oltean din Martie 05, 2008, 03:59:44
am... facut problema :-s chiar daca e ora 4 noaptea/dimineata si lumea sforaie pe la mine prin casa, am avut mult de invatat la backtracking din problema asta... multumesc pentru sugestiile din posturile anterioare :ok:


Titlul: Răspuns: 002 Jocul Flip
Scris de: irimias robert din Martie 13, 2008, 21:42:41
ash avea shi io ontrebare
deci, eu am dat solutia asta in cpp

Cod:
#include <fstream>
using namespace std;

ifstream f ("flip.in");
ofstream g ("flip.out");

long v[1000][16], n, m, sl[1000], sc[16];

void read()
{    f >> n;
     f >> m;
     for (int i=0 ; i<n; i++)
         for (int j=0; j<m; j++)
            f >> v[i][j];
}

void change()
{    int s=0;
     for (int i=0; i<n; i++)
         for (int j=0; j<m; j++)
         {   sl[i]=sl[i]+v[i][j];
             sc[j]=sc[j]+v[i][j];
         }
     for (int j=0; j<m; j++)
         while (sc[j]<0)
         {     for (int i=0; i<n; i++)
                   v[i][j]*=-1;
               sc[j]*=-1;
         }   
     for (int i=0; i<n; i++)
         while (sl[i]<0)
         {     for (int j=0; j<m; j++)
                   v[i][j]*=-1;
               sl[i]*=-1;
         }
     for (int i=0; i<n; i++)
         for (int j=0; j<m; j++)
             s=s+v[i][j];
     g << s;
}

int main()
{    read();
     change();
     f.close();
     g.close();
     return 0;
}

dar nush de ce nu imi da numai 10 puncte shi chiar nunteleg dc

numi puteti pls da ink cateva exemple sa vad ce are sau sami explicati????????

ms

Editat de admin: Folosesti tagul code cand vrei sa postezi surse.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Bondane Cosmin din Martie 13, 2008, 22:09:34
Problema se rezolva cu ajutorul backtracking-ului, nu cu greedy cum ai facut tu. Poti citi cele 5 pagini ale topicului daca nu te prinzi nicicum de rezolvare. Spor!


Titlul: Răspuns: 002 Jocul Flip
Scris de: Bogdan-Alexandru Stoica din Martie 13, 2008, 22:13:49
Solutia nu este corecta. Incearca sa fixezi liniile pe care le inmultesti cu -1 si apoi, pentru fiecare fixare, sa calculezi prin programare dinamica ce coloane inmultesti cu -1.

Uite cateva teste pe care programul tau nu le trece:

Cod:
3 3
-1 -1 2
-1 3 -1
1 -1 2

Raspunsul tau este 5, dar raspunsul corect este 11 (se inmulteste cu -1 linia 2 si coloana 2)

Cod:
4 3
-1 2 -1
1 -1 -1
3 -1 -2
3 1 -1

Raspunsul tau este 10, dar raspunsul corect este 14 (imultesc cu -1 lina 1, coloana 2 si coloana 3)

Cod:
5 3
-1 1 -1
2 -3 -1
-3 2 4
1 -2 3
3 2 1

Raspunsul tau este 14, dar raspunsul corect este 16 (imnultesti cu -1 linia 1, linia 3 si coloana 2)

Cod:
9 6
1 3 -14 -6 4 -3
-3 -2 3 4 5 -1
3 2 -5 -7 6 7
7 8 1 -4 12 3
-4 32 -10 3 4 5
3 1 4 5 6 -7
13 3 -14 3 2 -4
3 1 4 5 6 7
-1 -1 -13 -1 -1 -1

Raspunsul tau este 123, dar raspunsul corect este 189.

Sper sa te ajute. Spor.  :thumbup:


Titlul: Răspuns: 002 Jocul Flip
Scris de: S. Alex din Martie 30, 2008, 03:18:08
am facut si eu un soi de backtracking si nu inteleg de ce iau numa 60. unele teste nu le prind, am citit in mare topicu` asta nu vad de ce iau eu doar 60 .. ar trebui sami acopere toate testele :-? am luat un backtracking pt linii toate posibilitatile cu -1 respectiv 1 de inmultire la fiecare linie, si pt fiecare caz am inmultit coloanele cu -1 respectiv 1 dupa cum era mai mare suma coloanei.. idei, motive pt care nu e buna idea/ luasem numa 60?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Andrei Grigorean din Martie 30, 2008, 13:13:08
Ideea ta e buna, probabil ca ai gresit pe undeva implementarea :)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Andrici Cezar din Aprilie 25, 2008, 18:13:16
am o intrebare.... se pot schimba mai multe linii si mai multe coloane?
 :-s si zicetimi si mie ce am gresit ca mor :readthis:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Lucian Boca din Aprilie 25, 2008, 19:31:28
Da, pot fi schimbate oricate linii si oricate coloane. Incearca o rezolvare care sa ia in vedere toate cazurile.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Manea Constantin din Noiembrie 14, 2008, 22:50:42
Poate cineva sa ma ajute sa vad ce este gresit in teoria mea?
Cod:
   1. #include <fstream.h>  
   2. int main () 
   3. {long double a[30][30][2];//declararea contine o matrice tridimensionala pentru a stoca sumele fiecarei linii/coloane 
   4. int i,n,m,j,x,k; 
   5. ifstream f("flip.in"); 
   6. ofstream g("flip.out"); 
   7. f>>n>>m; 
   8. for (i=1;i<=n;i++) 
   9.     for (j=1;j<=m;j++) 
  10.         f>>a[i][j][0];//cea de-a treia dimensiune este 0 pentru numerele introduse de la tastatura 
  11.   
  12. for (i=1;i<=n;i++) 
  13.     {a[i][1][1]=0;//cea de-a treia dimensiune este 1 pentru a stoca suma liniilor i in ea 
  14.     for (j=1;j<=m;j++) 
  15.         a[i][1][1]=a[i][1][1]+a[i][j][0]; 
  16.     if (a[i][1][1]<0) //daca suma era negativa atunci urmeaza comutarea liniei astfel: 
  17.         for (k=1;k<=m;k++) 
  18.             a[i][k][0]=0-1*a[i][k][0]; 
  19.     } 
  20.   
  21. for (j=1;j<=m;j++)  //aceeasi procedura a fost urmata ulterior la coloane 
  22.     {a[j][1][1]=0; 
  23.     for (i=1;i<=n;i++) 
  24.         a[j][1][1]=a[j][1][1]+a[i][j][0]; 
  25.     if (a[j][1][1]<0) 
  26.         for (k=1;k<=n;k++) 
  27.             a[k][j][0]=0-1*a[k][j][0]; 
  28.     } 
  29.   
  30. x=0; // x este suma numerelor din noua matrice 
  31. for (i=1;i<=n;i++) 
  32.     for (j=1;j<=m;j++) 
  33.          x=x+a[i][j][0]; 
  34. g<<x; 
  35. // problema este ca nu stiu unde as putea gresi; nu am gasit niciun exemplu in care teoria sa nu fie confirmata si totusi, aparent ele exista; 
  36. }


***Daca am infaptuit ceva ilegal postand acest cod, pe care-l dau de buna voie, va rog editati, cine poate mesajul... ***


Titlul: Răspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Noiembrie 14, 2008, 22:55:09
Nu ai facut nimic ilegal postand acest cod, deoarece el nu merge. Algoritmul din radacina nu e bine gandit, nu stiu sa iti dau exemple concrete pe care sa nu iti mearga deoarece codul e mult prea lung pentru a il putea urmari insa pot sa te asigur ca nu e bine. Citeste ce s-a mai discutat aici, vei gasi hinturi destul de multe cu referire la rezolvarea corecta si destul de multe teste care sa pice solutii gresite.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Manea Constantin din Noiembrie 15, 2008, 11:59:30
Doream sa stiu doar daca ideea este buna; greseli de programare poate sunt, insa ma intreb daca o metoda de rezolvare este cea de a verifica daca suma pe fiecare linie este pozitiva, in caz contrar, ea urmand a fi schimbata. Apoi se repeta procedura pe fiecare coloana si pe urma se face suma...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Noiembrie 15, 2008, 13:14:43
Citeste tot topicul, si o sa vezi de ce nu e buna metoda asta. Rezolvarea consta in generarea tuturor posibilitatilor, lucru pe care il poti face prin backtracking. Succes!  :thumbup:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Manea Constantin din Noiembrie 15, 2008, 13:18:33
Inteleg rezolvarea enuntata pe topic... doresc insa sa gasesc ceva original;


Titlul: Răspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Noiembrie 15, 2008, 13:51:01
succes :d


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Noiembrie 15, 2008, 16:30:18
Inteleg rezolvarea enuntata pe topic... doresc insa sa gasesc ceva original;

Puteai face ceva "original", fara a trage cu ochiul pe forum.  :D Daca gasesti alta rezolvare, spune-ne si noua, ca suntem tare curiosi. :D


Titlul: Răspuns: 002 Jocul Flip
Scris de: Manea Constantin din Noiembrie 15, 2008, 17:17:11
Din ce am inteles de pe forum, trebuie sa iau in considerare toate cazurile posibile. Nu m-am uitat prea mult si nici pe toate paginile, deoarece ar fi fost mai bine sa iau rezolvarea de la altcineva :) (doar se pot lua rezolvari de la problema asta, nu?) Daca rezolvarea propusa de mine este si ea inclusa pe forum, atunci imi cer scuze; nu va pot dovedi ca m-am gandit de unul singur la ea;


Titlul: Răspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Noiembrie 15, 2008, 21:48:39
e o singura solutie discutata pe forum si acceptata ca fiind corecta.


Titlul: Răspuns: 002 Jocul Flip
Scris de: razyelx din Noiembrie 25, 2008, 22:51:52
Am revenit la aceasta problema, pentru ca cica se apropie perioada tezelor si tre sa invatz ceva backtrack(glumesc). Am rezolvat-o cu back.
Dar din pacate i-au doar 40 pct pt ca imi iese din timp. Ma gandesc ca greseala e la calcularea sumei.

Algoritmul de back e varianta aia cu stiva de m+n in care generez toate aranjamentele cu repetitie dintre -1, 1. Deci inainte de a ceda tentatiei si a ma uita in sursa, dati-mi si mie o mana de ajutor cu calcularea sumei.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Savin Tiberiu din Noiembrie 25, 2008, 23:56:58
tu faci 2^(N+M), iar solutia oficiala e 2^N * M. Nu trebuie sa faci o stiva de N+M, trebuie sa faci o stiva de doar N elemente, adik incerci toate posibilitatile de a comuta liniile si apoi coloanele incerci sa le comuti inteligent ;)


Titlul: Răspuns: 002 Jocul Flip
Scris de: razyelx din Noiembrie 26, 2008, 14:40:20
Ms mult. Am rezolvat-o si eu. Numai ca am facut-o in O(2^m * n). Oricum e acelasi lucru, dar mi s-a parut mai bine sa merg pe coloane, cu permutarile. 


Titlul: Răspuns: 002 Jocul Flip
Scris de: dinu sorin din Februarie 24, 2009, 14:57:40
Cod:
Cod:
#include<stdio.h>
long mat[16][16];
long max =-1099999999;
int sol[16];
int n,m;
void citire()
{
freopen("flip.in","r",stdin);
   scanf("%d",&n);
   scanf("%d",&m);
   for(int i=1;i<=n;i++)
      for(int j=1;j<=m;j++)
         scanf("%ld",&mat[i][j]);
}

long suma_col(int col)
{
long s=0;int x;
   for(int i=1;i<=n;i++)
      {
         if(sol[i])x=-1;
         else x=1;
         s+=mat[i][col]*x;
      }
   if(s>0)return s;
   else return -s;
}

void do_max()
{
   int i;
   long max2=0;
   for(i=1;i<=m;i++)
      max2+=suma_col(i);
   if(max2>max)max=max2;
}
int add2sol()
{
   int poz=1;
   while(sol[poz]!=0)
      sol[poz++]=0;
   sol[poz]=1;
   //printf("poz: %d ; ",poz);
   return poz<=n;
}
void tip_sol()
{
   for(int i=1;i<=n;i++)printf("%d ",sol[i]);
   printf("\n");
}
int main()
{
   freopen("flip.out","w",stdout);
   citire();
   do
   {
      //tip_sol();
      do_max();
   }
   while(add2sol());
   printf("%ld",max);
   return 0;
}
Pct:
Cod:
Test  	Timp executie  	Memorie folosita  	Mesaj 	Punctaj/test
1 0ms 8kb Ok! 10
2 0ms 8kb Ok! 10
3 0ms 8kb Ok! 10
4 8ms 204kb Raspuns gresit 0
5 4ms 8kb Ok! 10
6 56ms 208kb Ok! 10
7 32ms 204kb Ok! 10
8 604ms 184kb Time limit exceeded. 0
9 0ms 8kb Raspuns gresit 0
10 548ms 176kb Time limit exceeded. 0
Punctaj total 60
Ideea e ca algoritmul meu are o complexitate mai mica decat cel cu backtracking dar nu reusesc sa iau decat 60pct...
L-am verificat, si reverificat, si tot asa pana m-am dat batut...
Va rog daca vedeti unde ar putea gresi sa-mi spuneti :D

Merci, Sorin


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Februarie 24, 2009, 15:43:25
Esti sigur ca iei in considerare toate posibilitatile? Explica-ne ideea de rezolvare, ca ia destul timp sa intelegem singuri din sursa.  :)


Titlul: Răspuns: 002 Jocul Flip
Scris de: dinu sorin din Februarie 24, 2009, 16:31:44
Ok. Ideea algoritmului:

Iau toate posibilitatie de comutare a linilor. In loc sa folosesc un backtracking, folosesc un vector sol de n elemente (n nr de linii). Vectorul sol este initial 0,0,0... Apoi, pentru a  genera toate posibilitatile consider vectorul sol drept un numar un baza 2. Si la fiecare pas adaug 1 in sol[0] (consider ca numarul este scris invers). La fiecare solutie (adica dupa ce am adaugat 1) iau modul de suma pe fiecare coloana si o adaug la max2(suma matricei pentru sol respectiva). Iau modul pentru ca in cazul in care suma este negativa eu as avea posibilitatea sa comut acea coloana, pentru ca suma sa fie maxima. De fiecare data verific max2 cu max(suma maxima generala) si modific max(dupa caz).

Cam asta este explicatia algoritmului...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Februarie 24, 2009, 17:53:37
Mi se pare cam dubioasa metoda de a calcula sol[]-ul. Nu garantez ca e gresita, insa acolo mi se pare putin aiurea. Ai putea sa iei fiecare numar x de la 0 la 2^nr_linii , si sa consideri sol[]-ul ca fiind reprezentarea binara a numarului x. Asa generezi cu siguranta toate posibilitatile, si e mai comod de calculat sol[]-ul. In rest, ideea e buna. Dar mai inainte de toate, declara matricea de 18*18 si trimite solutia asa cum e acum. [pt ca daca o declari de 16, o sa iti aloce memorie doar pentru pozitiile 0,1,2...15.] Spor!


Titlul: Răspuns: 002 Jocul Flip
Scris de: dinu sorin din Februarie 24, 2009, 19:29:31
100. da, de la matrice era. Nu ma gandisem la asta. Merci mult.

Nu fac cu unsir de nr de la 0 la 2^n-1 pentru ca stiu de la permutari ca e mai performat cu vector deoarece faci mai putine operatii la adaugare de unitate decat la conversie in baza 2.

Am comparat timpii de la testul meu cu alte teste si la majoritatea am iesit in avantaj. Probabil daca mai lucrez la el o sa obtin timpi mai buni. :) dar nu are rost :))


Titlul: Răspuns: 002 Jocul Flip
Scris de: Alexandru Gherghe din Martie 08, 2009, 00:09:48
nu pricep de ce nu este compilatata.


Titlul: Răspuns: 002 Jocul Flip
Scris de: gaboru corupt din Martie 08, 2009, 00:14:00
main-ul trebuie sa returneze "int". pune int main in loc de void main si la sfarsit pune un return 0.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Dan H Alexandru din Martie 22, 2009, 18:54:51
 ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)  ](*,)
NU IMI IESE!!!!!!!

 ](*,) 
NU IMI IESE!!!
:horsy: HELP!  :'(


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sima Cotizo din Martie 22, 2009, 18:58:59
Iti inteleg supararea, dar asta nu e un motiv sa postezi asa. Nu cred ca are nimeni datoria sa iti citeasca sursa in pascal si sa-ti explice ce ai gresit. Incepe prin a citi acest topic cap-coada, poate gasesti cateva idei bune, iar apoi incearca sa faci debug pe o sursa cu o idee buna.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Mocanu Marius din Martie 25, 2009, 16:47:40
Sal...ajutati-ma si pe mine va rog,ce pun in backtrack ?? ce specific? generez posibilitati.........
de ex la linii incerc sa le iau 1,(1 si 2),(1 si 2 si 3) , (1 si 3) , (2 si 3) , (2 ,3) si la coloane la fel....generez posibilitati de inmultire cu unu de felu asta?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Martie 25, 2009, 16:57:47
Topicul acesta are 6 pagini. Iti garantez ca vei gasi explicatia solutiei in toate cele 6 pagini. Succes!  :)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Lodoaba Sorin din Aprilie 01, 2009, 08:56:07
este pe aici cineva ce lucreaza in pascal?????


Titlul: Răspuns: 002 Jocul Flip
Scris de: Gabriel Bitis din Aprilie 02, 2009, 16:53:46
Gasesti solutii prea superficiale !
De ce nu explici mai mult cum scoti -urile, dar prima data rezolva si tu problema sa vezi daca merge  :peacefingers:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Andrei Grigorean din Aprilie 02, 2009, 17:02:56
Ce tare ma amuza utilizatorii cu 3 posturi si 2 probleme rezolvate care ne explica intr-un mod agresiv cum se fac unele probleme la care ei nu au sursa, ca sunt gresite testele, ca nu sunt bune compilatoarele, ca rata impunge, etc.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Codrea Marcel din Aprilie 02, 2009, 17:28:09
cum adica "in mod agresiv"?

Sa iti explic. Atunci cand comentezi pe un forum de specialisti hardware iti permiti sa folosesti orice fel de limbaj. Insa noi suntem o comunitate de oameni pasionati de software. Suntem mai gingasi, mai inteligenti si nu ne place sa distrugi corola de minuni infoarena.

Revenind la tonul serios :

Aici se pregatesc cei mai buni din tara pentru olimpiada de informatica. Oamenii astia au participat pe la loturi, pe la competitii internationale, stiu probabil mai mult despre algoritmi decat stii tu despre propriul tau corp(nu ma numar printre ei). Atunci cand un incepator le explica faptul ca gasesc solutii prea complicate la probleme elementare pentru nivelul lor, folosind  :fighting:, nu le prea convine.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Rusu Radu din Aprilie 28, 2009, 14:25:42
Este neceasara implementarea pe numere mari????  :-' sau rezultatele incap pe long long int :D


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Aprilie 28, 2009, 14:34:03
E suficient int.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Rusu Radu din Aprilie 29, 2009, 17:40:07
Okay msm:D


Titlul: Răspuns: 002 Jocul Flip
Scris de: Paun Silviu din Mai 01, 2009, 23:27:01
of...cred ca am citit o serie de aberatii...Este relativ usor..se calculeaza suma fiecarei coloane, respectiv linie. Coloanei/liniei cu suma minima i se va aplica flip. Trebuie sa aveti insa grija pentru ca atunci cand aplici flip la o coloana j elementele de pe linia i se vor modifica deci veti avea de testat 2 cazuri. Prima data cand testezi coloana pentru inceput, si cazul 2 cand testezi linia la inceput. Rezultatul final va fi maximul dintre cele 2 cazuri.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Mai 02, 2009, 08:19:20
of...cred ca am citit o serie de aberatii...

Eu tocmai am mai citit una :

Citat
Este relativ usor..se calculeaza suma fiecarei coloane, respectiv linie. Coloanei/liniei cu suma minima i se va aplica flip. Trebuie sa aveti insa grija pentru ca atunci cand aplici flip la o coloana j elementele de pe linia i se vor modifica deci veti avea de testat 2 cazuri. Prima data cand testezi coloana pentru inceput, si cazul 2 cand testezi linia la inceput. Rezultatul final va fi maximul dintre cele 2 cazuri.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Adrian Bona din Septembrie 09, 2009, 18:20:37
cred ca imi scapa ceva simplu ...
am incercat toate testele care au fost puse pe forum .... si imi dau ok ....
daca poate cineva sa se uite peste sursa mea as fi recunoscator.
merci anticipat.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Bozianu Ana din Septembrie 09, 2009, 18:56:57
@adib : Sper sa fi citit cu suficienta atentie sursa ta si sa nu gresesc in ceea ce spun.
           Efectul final al functiei reactsume ar fi urmatorul -> se schimba semnul pe o anumita linie si apoi
           se calculeaza suma fiecarei coloane in matricea modificata in vectorul x.
           Apeland apoi functia back este adevarat ca iei in calcul toate modurile in care s-ar putea schimba
           semnele pe coloane.
           Concluzia este simpla. Realizezi toate posibilele Flip-uri pe coloana dar corespunzator unui singur Flip pe linie.
           Probabil ca testele pe care obtii punctele sunt obtinute exact pe astfel de situatii particulare.
           Sper ca ai inteles ce am vrut sa spun. Oricum ideea de a lucra cu back mi s-a parut interesanta si poate fi
           un inceput pentru o rezolvare putin diferita de solutia oficiala a problemei.
         


Titlul: Răspuns: 002 Jocul Flip
Scris de: Adrian Bona din Septembrie 10, 2009, 09:30:50
done ... 1 nu calculam sumele cand trebuia
2 nu era buna ideea ... nu ii deajuns sa faci flip doar pe o linie odata ...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Alexandru-Iancu Caragicu din Noiembrie 12, 2009, 13:04:21
Nu conteaza daca faci flip pe o linie sau o coloana mai mult de o data. Gandeste-te la o valoare din matrice. Daca-i schimbi de 2 ori comutatorul pt linie, e ca si cum nu l-ai schimbat deloc.
Sa comuti linia i, pe urma coloana j, si pe urma din nou linia i, e ca si cum ai comuta doar linia j.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vlad Eugen Dornescu din Noiembrie 14, 2009, 10:53:31
cum se face backtracking ?imi scrieti si mie algoritmul in limbaj c++ va rog?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Dogaru Beniamin din Noiembrie 30, 2009, 21:58:52
Poate sa imi explice si mie cineva ce trebuie sa faca problema asta? ca stau de 3 zile la ea si nu reusesc. Pe ex dat imi ruleaza corect dar tot 0 pct iau. SE pot  face flip pe mai multe coloane si mai multr linii sau doar pe o linie si o coloana?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Paul-Dan Baltescu din Noiembrie 30, 2009, 22:02:48
Se poate face flip pe oricate linii si/sau coloane.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Dogaru Beniamin din Decembrie 01, 2009, 20:44:12
Imi explica si mie cineva cum s-ar face prb asta, ca nu reusesc sa iau pct maxim si nu stiu ce am gresit.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Pripoae Teodor Anton din Decembrie 01, 2009, 22:45:53
Citeste tot topicul, sigur o sa te lamuresti.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vlad Tarniceru din Decembrie 11, 2009, 17:35:07
ideea e usoara,eu zic ca trebuie facut asa:
1:calculez suma de pe fiecare linie(linia i) si verific daca suma<suma*(-1).daca e asa inmultesti fiecare din termenii de pe linia i cu (-1);
2:calculez suma de pe fiecare coloana(coloana j) si verific daca suma<suma*(-1).daca e asa inmultesti fiecare din termenii de pe coloana j cu (-1);
3.explicatie:daca (-a)+b+(-c)=s,atunci a+(-b)+c=s*(-1);(s=(-a)+b+(-c);daca il inmultesti pe s cu (-1) este clar ca suma relatiei *(-1) este s(s cel nou))
acum nu stiu cat de rapid e acest algoritm,cred ca face mai mult de 60-70 de puncte(sper)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Florian Marcu din Decembrie 11, 2009, 17:37:45
Nu e corect. Citeste toate paginile topicului ca sa vezi de ce si ca sa vezi cum se face!


Titlul: Răspuns: 002 Jocul Flip
Scris de: Munteanu Cosmin din Martie 07, 2010, 22:13:55
Nu se precizeaza cate comutari face Gigel. Daca avem la dispozitie o infinitate de comutari pe tabla, din cate stiu eu ar trebui sa ajungem la orice aranjament, astfel ar trebui sa facem doar suma valorilor absolute numerelor de pe tabla. Doresc sa stiu, cate comutari face Gigel, doar una?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Andrei Grigorean din Martie 07, 2010, 22:22:48
Oricate. Un exemplu pentru rationamentul tau:

Cod:
-1 1
1 -1


Titlul: Răspuns: 002 Jocul Flip
Scris de: Oancea Catalin din Mai 06, 2010, 19:44:48
Pai pentru testul
-1 1
1 -1
suma maxima este 4

Eu am verificat pe linii si pe coloane in acelas timp suma si vedeam ce se intampla daca inmultesc una dintre ele cu -1 si tot nu e bine ( imi da doar 30 puncte )


Titlul: Răspuns: 002 Jocul Flip
Scris de: Adrian Craciun din Mai 06, 2010, 20:53:54
nu te-ai exprimat bn cu acest "vedeam ce se intampla" - poti sa dai o exemplificare?
probabil algoritmul tau sare niste cazuri care duc la solutia optima...indiciu - iei 100p cu backtraking :ok:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Simoiu Robert din Mai 07, 2010, 15:00:40
Daca ai fi citit bine enuntul, ai fi vazut ca se pot inmulti o coloana sau o linie de mai multe ori, nu doar odata.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Oancea Catalin din Mai 07, 2010, 19:47:37
Cat va da pentru testul :

5 14
7 -6 -1 0 0 0 0 1 100 -175 3 18 25 0
-2 1 100 105 3 -2 1 0 -175 100 18 3 25 2
1 -2 0 100 -2 3 0 1 100 100 100 18 -1000 35
0 0 1 800 632 -34 0 -100 -175 75 3 100 -100
100 -100 100 -100 100 -100 100 -100 100 -100 100 -100 100 -100

 ](*,)  ](*,) :angry:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Simoiu Robert din Mai 07, 2010, 21:18:49
Cu sursa de 100 pct. :
Cod:
4519



Titlul: Răspuns: 002 Jocul Flip
Scris de: Oancea Catalin din Mai 08, 2010, 13:30:35
mie imi da 4577
ciudat... pentru ca me imi da mai mult
poate cineva sa mai bage testul ala?

o sa ma apuc sa il rezolv  ](*,) ](*,) ](*,)


Titlul: Răspuns: 002 Jocul Flip
Scris de: FMIAnita Liviu din Mai 31, 2010, 13:51:59
Salut,am incercat si eu ceva,insa nustiu unde am gresit... am cotrobait umpic si prin celelalte surse,insa nu prea am inteles mare lucru...ma poate ajuta cineva?
Pe treaba asta am scos 20 de puncte:
Cod:
#include<fstream.h>
int main(){
int N,M,i,j,Sneg,Spoz,S=0;
ifstream fin("flip.in");
ofstream fout("flip.out");
fin>>N>>M;
int v[N][M];
for(i=0;i<N;i++)
for(j=0;j<M;j++)
fin>>v[i][j];
for(i=0;i<N;i++){
Spoz=0;
Sneg=0;
for(j=0;j<M;j++){
if(v[i][j]>0)
Spoz+=v[i][j];
else
Sneg+=v[i][j];}
if(-Sneg>Spoz)
for(j=0;j<M;j++)
v[i][j]=-v[i][j];}
for(i=0;i<M;i++){
Sneg=0;
Spoz=0;
for(j=0;j<N;j++){
Spoz+=v[j][i];
Sneg+=v[j][i];}
if(-Sneg>Spoz)
for(j=0;j<N;j++)
v[j][i]=-v[j][i];}
for(i=0;i<N;i++)
for(j=0;j<M;j++)
S+=v[i][j];
fout<<S;
return 0;}
Dupa asta,m-am enervat,si am zis sa calculeze suma pozitiva,negativa,si asa mai departe,pana ii ies ochii (pixelii,vorbim de calculator).Deci am pus un while,si a iesit asta:
Cod:
#include<fstream.h>
int main(){
int N,M,i,j,Sneg,Spoz,S=0,ok=0;
ifstream fin("flip.in");
ofstream fout("flip.out");
fin>>N>>M;
int v[N][M];
for(i=0;i<N;i++)
for(j=0;j<M;j++)
fin>>v[i][j];
while(ok++<10000){
for(i=0;i<N;i++){
Spoz=0;
Sneg=0;
for(j=0;j<M;j++){
if(v[i][j]>0)
Spoz+=v[i][j];
else
Sneg+=v[i][j];}
if(-Sneg>Spoz)
for(j=0;j<M;j++)
v[i][j]=-v[i][j];}
for(i=0;i<M;i++){
Sneg=0;
Spoz=0;
for(j=0;j<N;j++){
Spoz+=v[j][i];
Sneg+=v[j][i];}
if(-Sneg>Spoz)
for(j=0;j<N;j++)
v[j][i]=-v[j][i];}}
for(i=0;i<N;i++)
for(j=0;j<M;j++)
S+=v[i][j];
fout<<S;
return 0;}
cu care am mai "stors" inca 10 puncte (30 in total).Insa mai sunt 70 pana la 100,si eu nustiu unde am abordat gresit problema.Ma poate ajuta cineva?
PS:Imi poate da cineva un link(preferabil in romana) de pe care sa invat backtracking(macar elementele de baza,sa zic asa).Si, eventual, sa-mi spuneti daca trebuie sa cunosc mai stiu eu ce tehnici de programare,ca sa poat intelege backtracking(recursivitate stiu,insa nu sunt "doxa").


Titlul: Răspuns: 002 Jocul Flip
Scris de: Milut Petronela din August 15, 2010, 14:43:31
dc iau 20 de puncte daca pun liniile in stiva si iau 100 daca pun coloanele? k doar e la fel scris, am modificat unde trebuia n cu m, l cu c... :?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vlad Tarniceru din August 15, 2010, 18:12:11
la ce te referi cand zici "sa le pui in stiva" ? :?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Milut Petronela din August 15, 2010, 18:53:10
ma refer cand pun valorile 1/-1


Titlul: Răspuns: 002 Jocul Flip
Scris de: FMI Paun Matei din Septembrie 07, 2010, 09:11:21
trebuie sa luam toate nr pozitive asa iei 100 :yahoo: :winner1:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vlad Tarniceru din Septembrie 07, 2010, 10:27:15
trebuie sa luam toate nr pozitive asa iei 100 :yahoo: :winner1:
nu-i adevarat deloc (cum adica sa iei toate numerele pozitive? scrie in enunt ca trebuie sa inmultesti un rand cu -1 sau 1, deci daca iei, iei tot randul, nu doar numerele pozitive....). nu mai da hinturi care nu sunt bune si nu mai da hinturi daca nu-ti cere nimeni (adica eu vad ca nu ai facut problema, nici macar nu ai trimis-o, deci de unde poti fi sigur ca asta e solutia?)

hint : se face cu backtracking ... :D

succes si mai atent pe viitor :P


Titlul: Răspuns: 002 Jocul Flip
Scris de: Cristian Lambru din Ianuarie 27, 2011, 22:32:23
Salut la toata lumea! Vreau si eu sa stiu cu ce gresesc. Fac un backtracking recursiv de n+m elemente. Multimea variabilelor pe care poate sa le ia e 1/-1, cum trebuie sa fac ca sa il optimizez, deoarece imi depaseste timpul pe 5 teste. Multumesc!

LE : Am reusit s-o fac facand backtracking de n elemente si calculand maximul dintre coloane : 100 pct :) !


Titlul: Răspuns: 002 Jocul Flip
Scris de: FMI Ciprian Olariu din Februarie 01, 2011, 07:55:16
Se tot chinuia un coleg sa faca problema si i-a iesit numai de 20-30pct si de asta am stat aseara sa ma uit pe forum(gandindu-ma ca oricum n-as scoate mai mult de atat) si dupa ce am citit tot(foarte multe replici comice,contre intre greedy si backtracking,etc.) am zis aseara sa incerc si eu o idee sa vad daca imi iese  :?
Ideea mea era sa fac toate posibilitatile pentru linii,simuland adunarea in baza 2 pentru maxim 16 linii,adica 2^16,apoi la fiecare posibilitate,dupa ce faceam flip la liniile marcate cu 1,parcurgeam toata matricea noua(pe cea initiala o pastram altundeva) si calculam suma de pe fiecare coloana in modul si o adaugam la suma si comparam cu maximul si actualizam,apoi copiam din nou matricea initiala in cea de "lucru",mai goleam vectorul cu sumele de pe coloane si generam urmatoarea posibilitate,avand o singura functie in program,anume cea pentru FlipLinie  :)
Deci va spun sincer ca mai mult de 10 puncte nu credeam sa iau,mai ales gandindu-ma si la timp,desi acum imi dau seama ca la 16*16 nu e asa mult,iar daca stau sa ma gandesc mai bine ce am facut eu acopera totusi toate variantele de matrice intr-un mod mai rapid  :D
Oricum am ramas cu gura cascata dupa ce dintr-o singura trimitere pe infoarena(si mi-a luat 10 minute sa fac problema,fiind clasa a IX-a) am luat 100  :o

Multumesc pentru sfaturile de pe acest topic  :) Cei care inca nu v-ati prins cum se face chiar ar trebui sa cititi mai atent forumul

PS : sper ca n-am facut ceva rau postand ideea destul de completa aici  :?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Robert Badea din Februarie 05, 2011, 20:27:40
Ce e faza cu 2 ridicat la numărul de coloane/linii ? Că tot nu mă prind.

EDIT: Gata, m-am prins, nu mai este nevoie.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Ciobotariu Narcis din Februarie 21, 2011, 08:41:57
mia dat rezultatul din exemplu dar iau doar 0 puncte...dc? ](*,)...eu vad care coloana are nr de elemente negative mai mare si retin nr coloanei si vad la fiecare linie suma minima si retin nr liniei,de aici cand intalnesc coloana si linia retinuta inmultesc cu -1...ce e gresit?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Gabriel Bitis din Februarie 21, 2011, 08:47:29
Ai aici 7 pagini pline cu indicii, trebuie doar sa citesti putin mai mult.  :ok:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Usurelu Daniel Constantin din Martie 28, 2011, 16:42:50
 :angry: Am 3 erori care ma dispera si nu imi dau seama


Titlul: Răspuns: 002 Jocul Flip
Scris de: Panaete Adrian din Martie 28, 2011, 17:35:29
@ Usurelu Daniel

Am cautat printre sursele trimise recent la problema si nu am gasit niciuna trimisa de tine. Da un nr de Job al sursei tale daca vrei sa primesti sfaturi.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Gabriel Bitis din Martie 28, 2011, 17:35:46
Salut Daniel,

Te rog sa ai putin grija la calitatea posturilor tale. Azi ai postat de doua ori cam aiurea:

Numere prime :
Citat
Chiar asa de grea e .Incat sa iei 0 puncte
Nu ajuti pe nimeni, nici nu ceri ajutor. Nu e nici macar o remarca cat de cat inteligenta.

:angry: Am 3 erori care ma dispera si nu imi dau seama
Ceri ajutor? Spune care sunt erorile, nu are nimeni de unde sa stie ce erori ai tu devreme ce nu ai submitat nicio sursa la problema asta.

Pe viitor te rog sa gandesti putintel mai mult inainte sa postezi.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Tirla Alin din Martie 31, 2011, 19:27:50
am facut un back da nu iau decat 20 pe el imi da timp depasit...cum las putea face mai eficient?



PS
vedeti daca macar am facut codu sursa corect


Titlul: Răspuns: 002 Jocul Flip
Scris de: Tirla Alin din Aprilie 01, 2011, 08:58:07
 :winner1:am facuto yeeeeeeee!!! am fost gresita la faptu ca faceam back si din linie si din coloana si atunci imi lua prea mult :banana:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Lodoaba Sorin din Iulie 12, 2011, 10:37:08
as avea si eu o intrebare... o linie/coloana se poate schimba o singura data nu ? adica nu poti sa inmultesti o linie cu -1 de mai multe ori nu ?.... (daca ai putea, atunci suma maxima ce se poate obtine este suma numerelor in modul )


Titlul: Răspuns: 002 Jocul Flip
Scris de: cont cu nume gresit sau fals din Iulie 12, 2011, 10:47:34
daca inmultesti o coloana cu -1 de ori e ca si cum n-ai fi inmultit-o deloc ( (-1)*(-1)=1 ), prin urmare nu are sens sa o inmultesti mai mult de o data.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Tudor Costin Razvan din Decembrie 10, 2011, 21:18:15
  E mai bun .campion asta e prea simplu.  ](*,) :thumbdown: :fighting:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Alexandru Gaman din Decembrie 14, 2011, 07:34:42
In primul rand, buna ziua.
Ieri m-am hotarat sa ma apuc de niste programare serioasa, astfel incat am inceput sa iau arhiva de probleme la rost si am dat peste problema flip.
Dupa ceva munca, a rasarit un algoritm care functioneaza pe toate cazurile prezentate aici pe forum insa problema e ca iau doar 30 de puncte din cauza rezultatelor eronate, ceea ce mi se pare ciudat, deci m-am hotarat sa va cer ajutorul.

Ideea de implementare a fost discutata si mai devreme pe forum asa ca o sa prezint un pseudocod simplu

backtracking dupa numar de linii
daca iteratorul depaseste returnez sol
in caz contrar
pentru linia normala (not flipped)
pentru fiecare coloana verific daca valoarea flipped este mai mare decat val normala
in cazul in care val normala este mai mare, adaug la total si trec la urmatoarea coloana
in cazul in care val flipped este mai mare, adaug la total, inmultesc val coloanei cu -1 si trec la urmatoarea coloana

pentru linia inmultita cu -1, acelasi lucru, doar ca... in cazul in care totalul liniei inmultite cu -1 este mai mare decat totalul liniei normale, modific matricea

orice ajutor este binevenit, mai jos este linkul catre ultima verificare
http://infoarena.ro/job_detail/648742 (http://infoarena.ro/job_detail/648742)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Elena Obreja din Ianuarie 04, 2013, 12:50:41
ideea e usoara,eu zic ca trebuie facut asa:
1:calculez suma de pe fiecare linie(linia i) si verific daca suma<suma*(-1).daca e asa inmultesti fiecare din termenii de pe linia i cu (-1);
2:calculez suma de pe fiecare coloana(coloana j) si verific daca suma<suma*(-1).daca e asa inmultesti fiecare din termenii de pe coloana j cu (-1);
3.explicatie:daca (-a)+b+(-c)=s,atunci a+(-b)+c=s*(-1);(s=(-a)+b+(-c);daca il inmultesti pe s cu (-1) este clar ca suma relatiei *(-1) este s(s cel nou))
acum nu stiu cat de rapid e acest algoritm,cred ca face mai mult de 60-70 de puncte(sper)

Exact asta a fost si ideea mea si am luat 20 de puncte pe ea... :sad:


Titlul: Răspuns: 002 Jocul Flip
Scris de: George Marcus din Ianuarie 04, 2013, 12:56:22
Dupa cum vezi, iti da raspuns gresit. Asta fiindca nu e corect algoritmul. Vezi posturile anterioare.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Calin-Lucian din Ianuarie 20, 2013, 15:32:48
Sunt nou pe site, as dori putin ajutor din partea celor veterani daca se poate.Rulez problema si rezultatul imi da 28.Cu toate acestea, cand am trimis problema la verificat, am luat 0 puncte, insa problema merge si nici ca si algoritm(dpdv al corectitudinii) nu e gresit.Tin sa mentionez ca am rezolvat problema in Borland Pascal, si nu in Free.Sa fie acesta impedimentul?
Va multumesc frumos pentru atentie :)


Titlul: Răspuns: 002 Jocul Flip
Scris de: George Marcus din Ianuarie 20, 2013, 15:37:09
Numele fisierului nu e cu F mare.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Dumitriu Sebastian din Iulie 09, 2013, 21:19:46
buna sunt mai incepator in informatica si .. :D
am o mica rugaminte la tine..ai putea sa-mi explici ce fac mai exact urmatoarele secvente din program?
lim=1<<n;
if(i & (1<<(j-1)))
P.S: ti-am inteles in totalitate si-ti apreciez logica cu exceptia celor mentionate..deci daca mi-ai explica putin ti-as fi recunoscator ;)


Titlul: Răspuns: 002 Jocul Flip
Scris de: Salajan Razvan din Iulie 09, 2013, 21:28:39
E vorba despre operatii pe biti. Iti recomand sa cauti pe infoarena/google ce sunt. a << b <=> a * 2^b; iar secventa "i & (1<<(j-1))" verifica daca al (j-1) bit din configuratia binara a lui i are valoarea 1.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Saru Mihai din Octombrie 21, 2013, 20:50:56
Dupa ce am trecut singur prin toate etapele discutate aici (greedy -20pct, back simplu-40pct) am ajuns la backul optimizat care ar trebui sa dea 100 de pct, dar imi da 70 si chiar nu pot sa-mi dau seama de ce...  ](*,)
Vazand ca nu gasesc nimic in neregula, am aruncat un ochi pe sursele de 100 de pct trimise si e exact aceiasi idee... Deci nu inteleg de ce nu merge...
Va rog, daca se poate uita cineva pe sursa pe care am trimis-o si sa-mi zica daca vede ceva gresit...


Titlul: Răspuns: 002 Jocul Flip
Scris de: George Marcus din Octombrie 22, 2013, 10:14:46
Cod:
for(int j = 0;j < tabla.m;j++){
  sumaLinie += linie[j] * tabla.a[i][j];
}

Cred ca voiai sa scrii linie[i].


Titlul: Răspuns: 002 Jocul Flip
Scris de: Saru Mihai din Octombrie 22, 2013, 14:45:17
Pai in algoritmul meu, "linie[16]" reprezinta o linie cu "m" componente, care contine semnele pentru fiecare
coloana  (generate de backtracking). Daca parcurg fiecare coloana din fiecare linie a matricei, cu "j",
atunci si vectorul cu semne pentru fiecare coloana il parcurg tot cu acelasi "j".


Titlul: Răspuns: 002 Jocul Flip
Scris de: Saru Mihai din Octombrie 22, 2013, 15:03:50
Gata  :winner1:, am rezolvat, a fost o problema de neatentie din partea mea  :-', in back-ul in care generam linia eu foloseam ca numar de coloane pe "n".

Mersi George Marcus pentru ca ti-ai aratat interesul in a ma ajuta.  :D


Titlul: Răspuns: 002 Jocul Flip
Scris de: George Marcus din Octombrie 22, 2013, 18:05:51
A fost cam confuz ca ai numit vectorul linie desi era pentru coloane :P


Titlul: Răspuns: 002 Jocul Flip
Scris de: Buzatu Razvan-Ionut din Noiembrie 28, 2013, 22:00:59
#include <fstream>
 
using namespace std;
 
int main()
{
    int a[100][100],n,m,sl1=0,sl2=0,smax=0,i,j;
    ifstream f("flip.in");
    ofstream g("flip.out");
    f>>n>>m;
    for(i=0;i<n;i++)for(j=0;j<m;j++)f>>a[j];
    for(i=0;i<n;i++)for(j=0;j<n;j++){sl1=sl1+a[j];
                                      sl2=sl2+(a[j]*(-1));}
                                      if(sl2>sl1)for(j=0;j<n;j++)a[j]=a[j]*(-1);
    for(i=0;i<n;i++)for(j=0;j<n;j++)smax=smax+a[j];
    g<<smax;
    f.close();
    g.close();
    return 0;
}

Imi baga in g 16 in loc de 28. Deci rezultatul evaluarii: 0 puncte. Any help?  #-o


Titlul: Răspuns: 002 Jocul Flip
Scris de: Vintur Cristian din Februarie 22, 2014, 16:50:50
Cod:
using namespace std;
#include <fstream>
#include <vector>
ifstream fin("flip.in");
ofstream fout("flip.out");

int m, n, max1=0; // n linii    m coloane
int l[16];
int t[16][16];
vector <bool> v(17, 0);


int main()
{
    int i, j, k, gata=0, s, s1;
    fin>>m>>n;
    for(i=0; i<n; i++)
        for(j=0; j<m; j++)
            {fin>>t[i][j]; l[i]+=t[i][j];}
    while(!gata)
    {
        s=0;
        for(j=0; j<m; j++)
        {   //calculam fiecare coloana
            s1=0;
            for(i=0; i<n; i++)
                if(v[i]==1) s1-=t[i][j];
                else s1+=t[i][j];
            if(s1<0) s1=-s1;
            s+=s1;
        }
        if(s>max1) max1=s;
        for(i=n-1; i>=0 && v[i]==1; i--) v[i]=0;
        if(i>=0) v[i]=1;
        else gata=1;
    }
    fout<<max1;
    return 0;
}

imi da 50 puncte si nu stiu unde gresesc, o idee?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Zamfir Ovidiu din Martie 15, 2014, 01:02:44
am trimis din greseala sursa unei alte probleme si evaluatorul imi arata "in asteptare" si nu pot sa mai trimit surse  ](*,)
Ma poate ajuta cineva?


Titlul: Răspuns: 002 Jocul Flip
Scris de: Breahna David din Mai 31, 2014, 12:27:51
bună, am citit tot acest topic și m-am apucat să rezolv problema..
n-am luat decît 10/20 puncte,,, m-am săturat să tot caut greșeală și nu înțeleg unde-i în algoritm sau în implementare...

Algroritmul..
1. Fac combinări de n(linii).
2. La fiecare combinare fac flip liniile din combinari si flip doar la coloanele mai mici ca 0.
3. Daca suma obtinuta e mai mare ca precedenta o salvez..

Uita-ti si codul.. care e destul de mare ))
Pot sa spun ca intra lejer in timp dar imi da raspuns gresit..

Cod:

#include <iostream>
#include<fstream>
 
 
 
using namespace std;
 
ifstream f;
ofstream g;
 
int i,j,n,m,t[20][20],a[20];

long long sss;
 
void suma()
        {
        int i,j;
        for(i=1;i<=n;i++){t[m+1]=0;
        for(j=1;j<=m;j++)t[m+1]+=t[j];}
 
        for(i=1;i<=n;i++){t[n+1]=0;
        for(j=1;j<=m;j++)t[n+1]+=t[j];}
        }
 
int sumat()
        {
 
        int qw=0;
        for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)qw+=t[j];
        return qw;
        }
 
void linie(int mn)
        {
        for(int i=1;i<=m;i++)t[mn]*=-1;
         }
void coloana(int mn)
        {
        for(int i=1;i<=n;i++)t[mn]*=-1;
        }

void afis(int k,int t[20][20])
        {
         for(int i=1;i<=k;i++)linie(a);
         suma();
         for(int i=1;i<=m;i++)if(t[n+1]<0){coloana(i);}
         int zxc;
         zxc=sumat();
         if(zxc>sss)sss=zxc;
        }
void back(int k)
        {
        if(k<=n){
        afis(k,t);
        for(int i=a[k];i<=n;i++)
                {
                int ok=1;
                int j=1;
                while(j<=k&&ok){if(i==a[j])ok=0;j++;}
 
                if(ok){
                        a[k+1]=i;
                        back(k+1);
                        }
                }
        }}
 
long long k;
 
 
int main()
{
 
f.open("flip.in");
g.open("flip.out");
 
f>>n>>m;
 
for(i=1;i<=n;i++)
for(j=1;j<=m;j++)f>>t[j];
 
sss=sumat();
a[0]=1;
back(0);
 
g<<sss;
g.close();
}

Va rog mult,, ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) ](*,) :fighting: :fighting:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Iulia Moldovan din Iunie 24, 2014, 17:04:47
Buna ziua!
Cum sunt incepatoare in acest domeniu, sigur nelamurirea mea vi se va parea o banalitate, doar ca pe mine ma calca pe nervi de ceva vreme...
Valoarea care se afla la intersectia dintre linia si coloana care trebuie inmultite cu (-1), va avea valoarea sa de la inceput? Sau va ramane la cea inmultita doar o data cu (-1)?
Acesta este codul meu:
#include <fstream>
using namespace std;
ifstream fin("flip.in");
ofstream fout("flip.out");
int x[18][18];
int main()
{
    int n,m,i,j,butc=0,butl=0,s=0,sc=0,sl=0,min1,min2;
    fin>>n>>m;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            fin>>x[j];
    for(j=1;j<=m;j++)
    {
        sc=0;
        for(i=1;i<=n;i++)
            sc+=x[j];
        if(j==1)
            min1=sc;
        if(sc<min1)
        {
            min1=sc;
            butc=j;
        }
    }
    for(i=1;i<=n;i++)
    {
        sl=0;
        for(j=1;j<=m;j++)
            sl+=x[j];
        if(i==1)
            min2=sl;
        if(sl<min2)
        {
            min2=sl;
            butl=i;
        }
    }
    for(i=1;i<=n;i++)
       x[butc]*=(-1);
    for(j=1;j<=m;j++)
        x[butl][j]*=(-1);
    x[butl][butc]*=(-1);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
            s+=x[j];
    fout<<s;
    return 0;
}

Nu pot sa imi dau seama din ce cauza punctajul meu este 0, chiar daca am trimis 2 "tipuri" de surse: una in care valoarea aceea de la intersectie era inmultita de 2 ori cu (-1) si una in care era inmultita doar o singura data.
Va multumesc pentru timpul acordat!


Titlul: Răspuns: 002 Jocul Flip
Scris de: Pirtoaca George Sebastian din Iunie 24, 2014, 17:50:55
Din cate vad eu tu găsești linia și coloana cu suma minima și le înmulțești cu -1, ceea ce nu e corect. Poți schimba starea mai multor linii si a mai multor coloane. Ca sa rezolvi problema trebuie sa înveți backtracking.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Iulia Moldovan din Iunie 24, 2014, 21:24:22
@Pirtoaca George Sebastian
Multumesc pentru raspuns.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sandu Cristian din Septembrie 06, 2014, 10:27:55
Buna ziua,
Nu inteleg ce ar putea sa fie gresit...


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sandu Cristian din Septembrie 06, 2014, 10:30:16
Cod:
#include <iostream>
#include <fstream>

using namespace std;

ifstream fin ("flip.in");
ofstream fout ("flip.out");

int n, m, i, j, a[20][20], s;
int main()
{
    fin >> n >> m;

    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
            fin >> a[i][j];
        }
    }
    for (j=0; j<m; j++)
    {
        s = 0;
        for (i=0; i<n; i++)
        {
            s = s + a[i][j];
        }
        if (s<0)
        {
            for (i=0; i<n; i++)
            {
                a[i][j] = a[i][j] * (-1);
            }
        }
    }
    for (i=0; i<m; i++)
    {
        s = 0;
        for (j=0; j<n; j++)
        {
            s = s + a[i][j];
        }
        if (s<0)
        {
            for (j=0; j<m; j++)
            {
                a[i][j] = a[i][j]*(-1);
            }
        }
    }
    s = 0;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
        {
            s = s + a[i][j];
        }
    }
    fout << s;
    return 0;
}

Nu inteleg de ce primesc doar 20 de puncte, am incercat cu mai multe numere si imi iese chiar BINE pe PC, dar pe site...


Titlul: Răspuns: 002 Jocul Flip
Scris de: George Marcus din Septembrie 06, 2014, 11:56:50
Nu am testat, dar probabil iti da gresit pe un test de genul asta.

2 2
-2 3
3 -2

Raspuns: 10


Titlul: Răspuns: 002 Jocul Flip
Scris de: Sandu Cristian din Septembrie 21, 2014, 18:37:44
Gata, m-am prins cum trebuie facut.  :D Multumesc.  :yahoo:


Titlul: Răspuns: 002 Jocul Flip
Scris de: Burcea Geanin-Mihai din Ianuarie 28, 2015, 23:25:39
@Sandu Cristian, ce ai modificat in codul tau? Primesc doar 10 puncte, desi in PC merg toate exemplele


Titlul: Răspuns: 002 Jocul Flip
Scris de: No Name din Februarie 16, 2015, 22:04:03
Am incercat sa fac ceva, dar mi se afiseaza 12, nu reusesc sa imi dau seama ce am gresit.

Cod:
#include <iostream>
#include <fstream>
using namespace std;


int main()
{
int N, M, s1, s2;
ifstream in;
ofstream out;
in.open("flip.in");
in >> N >> M;
in.close();
int tabel[16][16];
for (int i = 0; i < N; i++) //atribuie valorile
{
for (int j = 0; j < M; j++)
{
in >> tabel[i][j];
}
}
for (int i = 0; i < N; i++)// verifica daca liniile sunt <0, iar daca da schimba semnul la fiecare numar de pe linie
{
s1 = 0;
for (int j = 0; j < M; j++)
{
s1 = s1 + tabel[i][j]; // ia fiecare termen de pe coloanele din acea linie si fa suma termenilor
}
if (s1 < 0) // daca suma termenilior <0 atunci schimba semnul tuturor termenilor implicati
{
for (int j = 0; j < M; j++)
{
tabel[i][j] = 0 - tabel[i][j];
}
}
}
for (int j = 0; j < M; j++)// verifica daca coloanele sunt <0, iar daca da schimba semnul la fiecare numar de pe coloana
{
s2 = 0;
for (int i = 0; i < N; i++)
{
s2 = s2 + tabel[i][j]; // ia fiecare termen de pe liniile din acea coloana si fa suma termenilor
}
if (s2 < 0) // daca suma termenilor <0 atunci schimba semnul tuturor termenilor implicati
{
for (int i = 0; i < N; i++)
{
tabel[i][j] = 0 - tabel[i][j];
}
}
}
int s3 = 0;
for (int i = 0; i < N; i++) // calculare suma finala
{
for (int j = 0; j < M; j++)
{
s3 = s3 + tabel[i][j];
}
}
out.open("flip.out");
out << s3;
out.close();
return 0;
}


Titlul: Răspuns: 002 Jocul Flip
Scris de: Moldoveanu Vlad din Septembrie 04, 2015, 10:17:39
Ok, am incercat o metoda liniara si am obtinut 28 pe testul dat, dar evaluatorul mi-a dat 30 puncte, restul testelor fiind gresite. Apoi am incercat o varianta cu backtracking, iar pe testul dat exemplu obtin suma maxima 29, inversand (de exemplu), linia 3 si coloana 2. Pe solutia asta am primit 40 puncte, iar pe celelalte cazuri depaseste timpul.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Moldoveanu Vlad din Septembrie 04, 2015, 10:34:17
Ok, obtineam 29 din cauza fisierului de intrare (schimbasem pe metoda liniara ca sa testez si alte cazuri, ups), insa as fi curios sa vad sursa originala.


Titlul: Răspuns: 002 Jocul Flip
Scris de: Muntean Ionut din Aprilie 07, 2018, 14:58:55
Stie cineva daca pot vedea ce date de intrare introduce evaluatorul pentru fiecare test? Am gasit niste date de intrare in comentarii pentr ucare nu functioneaza codul meu (si multumesc pentru asta ) si as vrea sa vad si altele pe care nu ar merge codul meu. Mersi!


Titlul: Răspuns: 002 Jocul Flip
Scris de: Dinica Andrei Cristian din Octombrie 14, 2018, 09:34:48
Vre-un sfat pentru optimizare?

https://infoarena.ro/job_detail/2259180