infoarena

infoarena - concursuri, probleme, evaluator, articole => Arhiva de probleme => Subiect creat de: Andrei Grigorean din Decembrie 13, 2010, 00:37:53



Titlul: 1092 Joculet
Scris de: Andrei Grigorean din Decembrie 13, 2010, 00:37:53
Aici puteti discuta despre problema Joculet (http://infoarena.ro/problema/joculet).


Titlul: Răspuns: 1092 Joculet
Scris de: Alexandru-Iancu Caragicu din Decembrie 14, 2010, 19:19:25
De ce e limita de timp pusa asa de strans de N^2 depaseste la limita?


Titlul: Răspuns: 1092 Joculet
Scris de: Simoiu Robert din Decembrie 14, 2010, 19:26:56
Nu e stransa, din cate vad sursa ta, si a multor care iau 60 puncte, nu e dinamica corecta, e gresita. Din acea cauza ai un incorect, si din intamplare ai luat celelalte teste. Fa dinamica corecta, si ai sa vezi ca iei 100 puncte lejer.


Titlul: Răspuns: 1092 Joculet
Scris de: Alexandru-Iancu Caragicu din Decembrie 14, 2010, 20:07:04
Nu e stransa, din cate vad sursa ta, si a multor care iau 60 puncte, nu e dinamica corecta, e gresita. Din acea cauza ai un incorect, si din intamplare ai luat celelalte teste. Fa dinamica corecta, si ai sa vezi ca iei 100 puncte lejer.

nu prea cred ca e gresita, ca e verificata, dar in fine (dinamica nu e gresita, o fi vre-un test particular care nu-mi vine in minte)


Titlul: Răspuns: 1092 Joculet
Scris de: Simoiu Robert din Decembrie 14, 2010, 21:02:55
Iti spun eu sigur, spre exemplu iti poate spune Oprica Dragos, care are aceleasi rezultate ca si tine ( 60 puncte, acelasi Incorect si 2 TLE ) , ca are o dinamica gresita. Daca vrei poti pune aici cum ai facut-o, si o sa-ti spuna daca e gresita sau nu ;) .


Titlul: Răspuns: 1092 Joculet
Scris de: Dragos din Decembrie 15, 2010, 00:38:38
Citat
D[ i ][ i ] = V[i ] pentru 1 ≤ i ≤ N
D[ i ][j] = max(V[ i ] - D[i + 1][j], V[j] - D[ i ][j - 1]), i ≠ j
D[ i ][j] = max(D[ i][j], V[ i ] + V[j] - D[i + 1][j - 1]), j - i ≥ 2
Solutia se va afla in D[1][N].
Pentru a obtine insa 100 de puncte nu trebuie retinuta intreaga matrice, ci doar ultimele doua linii.
Care sunt ultimele 2 linii?
Nu cumva trebuia diagonale? Si chiar si asa cum as putea tine ultimele 2 diagonale?


Titlul: Răspuns: 1092 Joculet
Scris de: Paul-Dan Baltescu din Decembrie 15, 2010, 10:56:13
Eu am transformat dinamica respectiva in D[ i ][ j ] = suma maxima pe care o poate obtine primul jucator pe o secventa de lungime i care incepe la pozitie j. Am avut nevoie de ultimele 3 linii, dar merge. :)


Titlul: Răspuns: 1092 Joculet
Scris de: Flaviu Pepelea din Decembrie 15, 2010, 14:59:37
Ajunge sa retii doar ultimele 2 linii. Dupa cum se observa si din recurenta din articolul de solutii, la fiecare pas nu ai nevoie decat de linia i si i + 1. Iar in legatura cu memoria, vroiam sa pun limita 648kb, dar nu prea am eu permisiunea asta, pentru ca problema nu a fost adaugata de pe contul meu. Poate se ofera vreun admin sa modifice limita :).


Titlul: Răspuns: 1092 Joculet
Scris de: Alexandru-Iancu Caragicu din Decembrie 15, 2010, 15:01:13
Eu m-am gandit asa:

a[ i ][ j ] -> diferenta maxima care o poate obtine jucatorul care este la mutare daca are la
          dispozitie o tabla cu nr de la i la j

a[ i ][ j ] = max(v[ i ] - a[ i+1 ][ j ], v[ j ] - a[ i ][ j-1 ], v[ i ] + v[ j ] - a[ i+1 ][ j-1 ]);

si parcurg matricea luand intai elem de lungime 1 (a[ i ][ i ]), de lungime 2 (a[ i ][ i+1 ])...pana la cea finala de lungime n (a[ 1 ][ n ]).


Titlul: Răspuns: 1092 Joculet
Scris de: Dragos din Decembrie 15, 2010, 18:32:13
Ajunge sa retii doar ultimele 2 linii. Dupa cum se observa si din recurenta din articolul de solutii, la fiecare pas nu ai nevoie decat de linia i si i + 1. Iar in legatura cu memoria, vroiam sa pun limita 648kb, dar nu prea am eu permisiunea asta, pentru ca problema nu a fost adaugata de pe contul meu. Poate se ofera vreun admin sa modifice limita :).
Oups  :?!  Asa este, nu stiu de ce am avut impresia ca nu se poate cu 2 linii, cred ca m-au derutat j-urile.
Acum iau 70 pe sursa facuta cu 2 linii cu relatia din articolul de solutii.
Si vad ca mai sunt si altii care au picat testele 4,9,10.
Ce contin special aceste teste?

Later edit: Am luat 100, problema era de la faptul ca declaram numerele de pe tabele int, in loc de long long, sau nu faceam conversia cand calculam matricea dp[][].


Titlul: Răspuns: 1092 Joculet
Scris de: Andrei Grigorean din Decembrie 15, 2010, 19:07:02
Am modificat limita de memorie si am reevaluat sursele din arhiva.


Titlul: Răspuns: 1092 Joculet
Scris de: Login Iustin Anca din Decembrie 17, 2010, 17:07:15
Care este raspunsul corect pentru :
3
8 12 -5


Titlul: Răspuns: 1092 Joculet
Scris de: Simoiu Robert din Decembrie 17, 2010, 17:12:56
Cod:
-9


Titlul: Răspuns: 1092 Joculet
Scris de: Login Iustin Anca din Decembrie 17, 2010, 17:24:35
Pentru
3
8 12 -5
nu se poate si in felul urmator? primul jucator alege 8, al doilea -5, apoi primul 12, cu diferenta 25 (25> -9).


Titlul: Răspuns: 1092 Joculet
Scris de: Paul-Dan Baltescu din Decembrie 17, 2010, 18:14:53
Citat
Sa se determine diferenta maxima dintre punctajul primului si celui de-al doilea jucator, diferenta care poate fi obtinuata in cel mai rau caz, indiferent de cum joaca cel de-al doilea jucator.

Nu e bine cum spui tu, deoarece al doilea jucator joaca optim (cauta sa minimeze diferenta).


Titlul: Răspuns: 1092 Joculet
Scris de: Simoiu Robert din Decembrie 17, 2010, 18:20:09
Corect e ca primul sa ia pe 8 si pe -5 ( sa nu-l lase pe al doilea sa ia pe -5, sa minimeze diferenta ) , si al doilea il ia pe 12, care a mai ramas. Rezultatul este ( 8-5 ) - 12 = -9 .