Pagini: 1 ... 3 4 [5] 6 7 ... 9   În jos
  Imprimă  
Ajutor Subiect: 002 Jocul Flip  (Citit de 85908 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #100 : 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
Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #101 : 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 Sad(.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.
Memorat

vid...
Bogdan_tmm
De-al casei
***

Karma: 4
Deconectat Deconectat

Mesaje: 122



Vezi Profilul
« Răspunde #102 : 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?Sad(Nu cred dar se poate Sad( bogdan_tmm e id
       
Memorat
cristiprg
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #103 : 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?   Very Happy
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #104 : Martie 02, 2008, 15:52:24 »

da
Memorat
vlad_oltean
Strain
*

Karma: 2
Deconectat Deconectat

Mesaje: 25



Vezi Profilul
« Răspunde #105 : Martie 05, 2008, 03:59:44 »

am... facut problema Eh? 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
Memorat
robigi
Strain
*

Karma: 5
Deconectat Deconectat

Mesaje: 40



Vezi Profilul
« Răspunde #106 : 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?HuhHuh?

ms

Editat de admin: Folosesti tagul code cand vrei sa postezi surse.
« Ultima modificare: Martie 13, 2008, 21:45:00 de către Andrei Grigorean » Memorat
cos_min
Nu mai tace
*****

Karma: 48
Deconectat Deconectat

Mesaje: 493


live


Vezi Profilul
« Răspunde #107 : 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!
Memorat

vid...
fireatmyself
Nu mai tace
*****

Karma: 36
Deconectat Deconectat

Mesaje: 492



Vezi Profilul
« Răspunde #108 : 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.  Thumb up
Memorat

Viata e scurta. Daca nu o putem lungi, macar s-o facem lata.
O_Neal
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #109 : 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 Confused 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?
Memorat
wefgef
Nu mai tace
*****

Karma: 1049
Deconectat Deconectat

Mesaje: 3.008


razboinicu' luminii


Vezi Profilul
« Răspunde #110 : Martie 30, 2008, 13:13:08 »

Ideea ta e buna, probabil ca ai gresit pe undeva implementarea Smile
Memorat

omului i-au fost date instinctele pentru a supravietui, nu pentru a fi sclavul lor.
andrici_cezar
De-al casei
***

Karma: -47
Deconectat Deconectat

Mesaje: 121



Vezi Profilul
« Răspunde #111 : Aprilie 25, 2008, 18:13:16 »

am o intrebare.... se pot schimba mai multe linii si mai multe coloane?
 Eh? si zicetimi si mie ce am gresit ca mor Read This!
Memorat
amadaeus
Client obisnuit
**

Karma: 28
Deconectat Deconectat

Mesaje: 93



Vezi Profilul
« Răspunde #112 : 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.
Memorat

"one of these days I'm going to cut you into little pieces..."
venom4u31
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #113 : 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... ***
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #114 : 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.
« Ultima modificare: Noiembrie 15, 2008, 11:17:30 de către Bogdan Tataroiu » Memorat
venom4u31
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #115 : 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...
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #116 : 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!  Thumb up
Memorat
venom4u31
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #117 : Noiembrie 15, 2008, 13:18:33 »

Inteleg rezolvarea enuntata pe topic... doresc insa sa gasesc ceva original;
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #118 : Noiembrie 15, 2008, 13:51:01 »

succes :d
Memorat
Florian
Nu mai tace
*****

Karma: 125
Deconectat Deconectat

Mesaje: 832



Vezi Profilul
« Răspunde #119 : 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.  Very Happy Daca gasesti alta rezolvare, spune-ne si noua, ca suntem tare curiosi. Very Happy
Memorat
venom4u31
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #120 : 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 Smile (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;
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #121 : Noiembrie 15, 2008, 21:48:39 »

e o singura solutie discutata pe forum si acceptata ca fiind corecta.
Memorat
razyelx
Client obisnuit
**

Karma: 0
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #122 : 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.
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #123 : 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 Wink
Memorat
razyelx
Client obisnuit
**

Karma: 0
Deconectat Deconectat

Mesaje: 82



Vezi Profilul
« Răspunde #124 : 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. 
Memorat
Pagini: 1 ... 3 4 [5] 6 7 ... 9   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines