Pagini: 1 [2]   În jos
  Imprimă  
Ajutor Subiect: 187 Ecuatii  (Citit de 12991 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #25 : Martie 06, 2013, 17:24:48 »

Cod:
int search(int X){
    int key = abs(X%NMAX);
    for(vector < int >::iterator it = Hash[key].begin();it!=Hash[key].end();++it)
        if(*it == X)
            return 1;
return 0;
}
Pot exista mai multe combinatii diferite care sa dea suma X.   Ok
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #26 : Martie 06, 2013, 20:39:59 »

Ok, am modificat in sensul ca de fiecare cand gasesc un rezultat al sume i^3 + j^3 + K^3 scot din hash valoarea respectiva si tot nu imi da bine. De ex pe codul meu imi da 109 de 654. Sorry dar tot nu reusesc sa imi dau seama ce nu e bine  Brick wall.
Iata ce am modificat fata de data trecuta: Am facut o functie remove

void remove(int X){

    int key = abs(X%NMAX);
     for(vector < int >::iterator it = Hash[key].begin();it!=Hash[key].end();++it)
        if(*it == X){
            Hash[key].erase(it);
            return ;
        }
}

si cand numar solutiile fac asta :

 for(int k=-50;k<=50;++k)
        for(int i=-50;i<=50;++i)
            for(int j=-50;j<=50;++j)
                    if(search(V[3]*k*k*k + V[4]*i*i*i + V[5]*j*j*j)){
                            Nmax++;
                        remove(V[3]*k*k*k + V[4]*i*i*i + V[5]*j*j*j);
                    }
Memorat
SebiSebi
Nu mai tace
*****

Karma: 76
Deconectat Deconectat

Mesaje: 306



Vezi Profilul
« Răspunde #27 : Martie 06, 2013, 21:00:40 »

Nu trebuie sa le scoti din hash. Faci asa:
Cod:
int search(int X){
    int key = abs(X%NMAX);
    int s=0;
    for(vector < int >::iterator it = Hash[key].begin();it!=Hash[key].end();++it)
        if(*it == X)
            s++;
    return s;
}
Functia returneaza in cate moduri ai obtinut X. Succes!
Memorat
Fayed
Client obisnuit
**

Karma: -24
Deconectat Deconectat

Mesaje: 62



Vezi Profilul
« Răspunde #28 : Martie 07, 2013, 22:31:43 »

Da .. mi-am dat seama ce nu facusem bine. Acum am luat 100. Mersi mult  Very Happy  peacefingers
Memorat
RG1999
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 6



Vezi Profilul
« Răspunde #29 : Iulie 15, 2016, 23:21:34 »

ce e gresit?
#include <cstdio>
#include <algorithm>
using namespace std;
int v[1000005],v2[1000005],n,m,i,a,b,c,d,e,k1,k2,k3,st,dr,pos,mij;
long long sol;
int main()
{
    freopen("eqs.in","r",stdin);
    freopen("eqs.out","w",stdout);
    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    for(k1=-50;k1<=50;k1++)
        for(k2=-50;k2<=50;k2++)
        for(k3=-50;k3<=50;k3++)
        v[++m]=a*k1*k1*k1+b*k2*k2*k2+c*k3*k3*k3;
    for(k1=-50;k1<=50;k1++)
            for(k2=-50;k2<=50;k2++)
            v2[++n]=d*k1*k1*k1+e*k2*k2*k2;
    sort(v2+1,v2+n+1);
    for(i=1;i<=m;i++)
    {
        st=1;
        dr=n;
        pos=0;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v2[mij]<=-v)
            {
                pos=mij;
                st=mij+1;
            }
            else
                dr=mij-1;
        }
        while(v2[pos]==-v&&pos>0)
        {
            sol++;
            pos--;
        }
    }
    printf("%lld",sol);
    return 0;
}
Memorat
Bodo171
Client obisnuit
**

Karma: 11
Deconectat Deconectat

Mesaje: 52



Vezi Profilul
« Răspunde #30 : Iulie 16, 2016, 13:50:35 »

ce e gresit?
#include <cstdio>
#include <algorithm>
using namespace std;
int v[1000005],v2[1000005],n,m,i,a,b,c,d,e,k1,k2,k3,st,dr,pos,mij;
long long sol;
int main()
{
    freopen("eqs.in","r",stdin);
    freopen("eqs.out","w",stdout);
    scanf("%d%d%d%d%d",&a,&b,&c,&d,&e);
    for(k1=-50;k1<=50;k1++)
        for(k2=-50;k2<=50;k2++)
        for(k3=-50;k3<=50;k3++)
        v[++m]=a*k1*k1*k1+b*k2*k2*k2+c*k3*k3*k3;
    for(k1=-50;k1<=50;k1++)
            for(k2=-50;k2<=50;k2++)
            v2[++n]=d*k1*k1*k1+e*k2*k2*k2;
    sort(v2+1,v2+n+1);
    for(i=1;i<=m;i++)
    {
        st=1;
        dr=n;
        pos=0;
        while(st<=dr)
        {
            mij=(st+dr)/2;
            if(v2[mij]<=-v)
            {
                pos=mij;
                st=mij+1;
            }
            else
                dr=mij-1;
        }
        while(v2[pos]==-v&&pos>0)
        {
            sol++;
            pos--;
        }
    }
    printf("%lld",sol);
    return 0;
}

Vezi ca solutiile trebuie sa fie nenule.Solutia te merge(cel putin pe exemplu,pe care am verificat-o) daca pui conditia k1!=0&&k2!=0&&k3!=0 peste tot unde apar variabilele.
Memorat
andrei_diaconu11
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 1



Vezi Profilul
« Răspunde #31 : Septembrie 23, 2016, 18:55:27 »

Salut! Nu ar fi mai bine sa precizati ca solutiile trebuie sa fie nenule? Am stat cam o ora sa ma prind ca asta era gresit.... Angry . Daca cineva care citeste acest mesaj are privilegiul de a modifica textul il rog sa-l corecteze!
Memorat
Pagini: 1 [2]   În sus
  Imprimă  
 
Schimbă forumul:  

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