Pagini: 1 ... 6 7 [8] 9   În jos
  Imprimă  
Ajutor Subiect: 002 Jocul Flip  (Citit de 85912 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
daniel_scaparici
Strain


Karma: -2
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #175 : Martie 28, 2011, 16:42:50 »

 Angry Am 3 erori care ma dispera si nu imi dau seama
Memorat
proflaurian
Client obisnuit
**

Karma: 46
Deconectat Deconectat

Mesaje: 58



Vezi Profilul
« Răspunde #176 : 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.
Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #177 : 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.
Memorat
@Lyn
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #178 : 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
Memorat
@Lyn
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #179 : 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
Memorat
lsorin_94
Strain


Karma: -8
Deconectat Deconectat

Mesaje: 23



Vezi Profilul
« Răspunde #180 : 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 )
Memorat
Magnus
Client obisnuit
**

Karma: 0
Deconectat Deconectat

Mesaje: 57



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


Karma: -1
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #182 : Decembrie 10, 2011, 21:18:15 »

  E mai bun .campion asta e prea simplu.  Brick wall Thumb down Fighting
Memorat
tzoky07
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 8



Vezi Profilul
« Răspunde #183 : 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
Memorat
Eby7
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



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

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #185 : Ianuarie 04, 2013, 12:56:22 »

Dupa cum vezi, iti da raspuns gresit. Asta fiindca nu e corect algoritmul. Vezi posturile anterioare.
Memorat
ColinCJ
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



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

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #187 : Ianuarie 20, 2013, 15:37:09 »

Numele fisierului nu e cu F mare.
Memorat
sebinsteanu
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #188 : Iulie 09, 2013, 21:19:46 »

buna sunt mai incepator in informatica si .. Very Happy
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 Wink
Memorat
vendetta
De-al casei
***

Karma: 72
Deconectat Deconectat

Mesaje: 122



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


Karma: 1
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #190 : 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...  Brick wall
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...
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #191 : 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].
Memorat
Mihai96
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #192 : 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".
Memorat
Mihai96
Strain


Karma: 1
Deconectat Deconectat

Mesaje: 3



Vezi Profilul
« Răspunde #193 : Octombrie 22, 2013, 15:03:50 »

Gata  Winner 1st place, am rezolvat, a fost o problema de neatentie din partea mea  Whistle, 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.  Very Happy
Memorat
PlayLikeNeverB4
Nu mai tace
*****

Karma: 212
Deconectat Deconectat

Mesaje: 721



Vezi Profilul
« Răspunde #194 : Octombrie 22, 2013, 18:05:51 »

A fost cam confuz ca ai numit vectorul linie desi era pentru coloane Tongue
Memorat
rzvnden
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #195 : 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?  d'oh!
Memorat
Cristian1997
Strain


Karma: 2
Deconectat Deconectat

Mesaje: 20



Vezi Profilul
« Răspunde #196 : 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?
Memorat
ovidiuz98
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 4



Vezi Profilul
« Răspunde #197 : 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  Brick wall
Ma poate ajuta cineva?
Memorat
breahnadavid
Strain


Karma: -1
Deconectat Deconectat

Mesaje: 15



Vezi Profilul
« Răspunde #198 : 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,, Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Brick wall Fighting Fighting
Memorat
IuliaCristianaM
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 3



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

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