Cod sursa(job #970758)

Utilizator enedumitruene dumitru enedumitru Data 7 iulie 2013 19:13:22
Problema Ecuatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 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;
}