Cod sursa(job #1703132)

Utilizator sucureiSucureiRobert sucurei Data 16 mai 2016 12:38:31
Problema Ecuatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.99 kb
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
int k,n,m,a,nr,b,c,i,j,p,q,v1[10009],v2[10009];
void desca()
{
    int i,nr=a,rad;
    if(nr<0)
    nr=-nr;
    rad=(int)sqrt((double)nr);
    if(rad*rad==nr)
    {
        m=1;
        v1[m]=rad;
        --rad;
    }
    for(i=1;i<=rad;++i)
    if(nr%i==0)
    {
        ++m;
        v1[m]=i;
        ++m;
        v1[m]=nr/i;
    }
    for(i=1;i<=m;++i)
    v1[i+m]=-v1[i];
    m*=2;
    sort(v1+1,v1+m+1);
}
void descc()
{
    int i,nr=c,rad;;
    if(nr<0)
    nr=-nr;
    rad=(int)sqrt((double)nr);
    if(rad*rad==nr)
    {
        n=1;
        v2[n]=rad;
        --rad;
    }
    for(i=1;i<=rad;++i)
    if(nr%i==0)
    {
        ++n;
        v2[n]=i;
        ++n;
        v2[n]=nr/i;
    }
    for(i=1;i<=n;++i)
    v2[i+n]=-v2[i];
    n*=2;
    sort(v2+1,v2+n+1);
}
int main()
{
    f>>a>>b>>c>>k;
    desca();
    descc();
    if(m*n<k)
    {g<<-1<<'\n';return 0;}
    for(i=1;i<=m;++i)
    {
        p=int (a/v1[i]);
        for(j=1;j<=n;++j)
        {
            q=int(c/v2[j]);
            if(p*v2[j]+q*v1[i]==b)
            ++nr;
            if(nr==k)
            {
                g<<'(';
                if(v1[i]==-1)
                g<<"-x";

                else
                if(v1[i]==1)
                g<<"x";
                else
                g<<v1[i]<<'x';
                if(v2[j]<0)
                g<<v2[j]<<')';
                else
                g<<'+'<<v2[j]<<')';
                g<<'(';
                if(p==-1)
                g<<"-x";
                else
                if(p==1)
                g<<"x";
                else
                g<<p<<'x';
                if(q<0)
                g<<q<<')';
                else
                g<<'+'<<q<<')';
                return 0;
            }
        }
    }
    if(nr<k)
    g<<-1<<'\n';
    return 0;
}