Cod sursa(job #1342285)

Utilizator iulianrotaruRotaru Gheorghe-Iulian iulianrotaru Data 13 februarie 2015 19:16:22
Problema Ecuatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.18 kb
#include<fstream>
#include<algorithm>
#include<cmath>
using namespace std;
ifstream f("ecuatie.in"); ofstream g("ecuatie.out");
int a,b,c,k,na,nc,nr,av[10000],cv[10000];
void detdiv(int x, int &n, int y[])
{   int s=x;
    if(s<0) s=-s;
    int i,t=(int)sqrt((double)s);
    n=0;
    if(t*t==x) y[++n]=t, t--;
    for(i=1;i<=t;i++)
    if(s%i==0) {n+=2; y[n-1]=i; y[n]=s/i;}
    for(i=1;i<=n;i++) y[n+i]=-y[i];
    n=n+n;
    sort(y+1,y+n+1);
}
int main()
{   f>>a>>b>>c>>k;
    detdiv(a,na,av); detdiv(c,nc,cv);
    for(int i=1;i<=na;i++)
    {   int p=a/av[i];
        for(int j=1; j<=nc; j++)
        {   int q=c/cv[j];
            if(cv[j]*p+av[i]*q==b)
            {   nr++;
                if(nr==k)
                {   g<<"(";
                    if(av[i]==-1) g<<"-"; else {if(av[i]!=1) g<<av[i];};
                    g<<"x";
                    if(cv[j]>=0) g<<"+";
                    g<<cv[j]<<")(";
                    if(p==-1) g<<"-"; else {if(p!=1) g<<p;};
                    g<<"x";
                    if(q>=0) g<<"+";
                    g<<q<<")\n";
                }
            }
        }
    }
    if (nr<k) g<<"-1";
    g.close(); return 0;
}