Cod sursa(job #159386)

Utilizator gabor_oliviu1991gaboru corupt gabor_oliviu1991 Data 14 martie 2008 09:02:48
Problema Ecuatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
#include<fstream.h>
#include<math.h>
#define nmax 1000000
int main()
{  long a,b,c,k,d[nmax]={0},x1,x2,delta;
   struct { long p1,q1,p2,q2;}v[nmax]={0},aux;
   int i,l=0,j;
   ifstream f("ecuatie.in");
   ofstream g("ecuatie.out");
   f>>a>>b>>c>>k;
   delta=pow(b,2)-4*a*c;
   if(sqrt(delta)*sqrt(delta)!=delta)	g<<-1;
   else{
   x1=(-b+sqrt((pow(b,2)-4*a*c)))/(2*a);
   x2=(-b-sqrt(pow(b,2)-4*a*c))/(2*a);
   for(i=-abs(a);i<0;i++)
	if(a%i==0&&i!=0) d[l++]=i;
   for(i=1;i<=a;i++)
	if(a%i==0)	 d[l++]=i;
   if(k>(l*2))  g<<"-1";
   else
	{
   j=0;
   for(i=0;i<l;i++)
	{ v[j].p1=d[i];
	  v[j].q1=-x1*d[i];
	  v[j].p2=a/d[i];
	  v[j].q2=-x2*(a/d[i]);
	  j++;
	  v[j].p1=d[i];
	  v[j].q1=-x2*d[i];
	  v[j].p2=a/d[i];
	  v[j].q2=-x1*(a/d[i]);
	  j++;}

   for(i=0;i<l*2-1;i+=2)
	if(v[i].q1>v[i+1].q1)
	     {aux=v[i];v[i]=v[i+1];v[i+1]=aux;}
   k--;
   if(v[k].p1*v[k].p2==a&&v[k].q1*v[k].q2==c)
  { if(v[k].p1==1)   g<<"(x";
     else
	if(v[k].p1==-1)  g<<"(-x";
	    else       g<<"("<<v[k].p1<<"x";
   if(v[k].q1>0)
	g<<"+"<<v[k].q1<<")";
   else
	g<<v[k].q1<<")";
   if(v[k].p2==1)   g<<"(x";
     else
	if(v[k].p2==-1)  g<<"(-x";
	    else       g<<"("<<v[k-1].p2<<"x";
   if(v[k].q2>0)
	g<<"+"<<v[k].q2<<")";
   else
	g<<v[k].q2<<")";
   } else g<<"-1";
	}
   }
   return 0;
   }