Cod sursa(job #128740)

Utilizator cos_min_max_ionCosmin Ion cos_min_max_ion Data 27 ianuarie 2008 19:23:33
Problema Ecuatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.91 kb
#include<iostream.h>
#include<stdio.h>
#include<math.h>
int main()
{ double de, x, x1, x2, r;
  long a, b, c, d,n, nr, i, k, aux, sch, l, v[500001];
    freopen("ecuatie.in", "rt", stdin);
  freopen("ecuatie.out", "wt", stdout);
  cin>>a>>b>>c>>k;
  de=b*b-4*a*c;
  if(de<0) cout<<-1;
  else if((long)sqrt(de)!=sqrt(de)) cout<<-1;
  else { r=sqrt(abs(a));
	 for(i=0, d=1;d<r;d++)
	 if(a%d==0) { v[i++]=-d;
		      v[i++]=d;
		      v[i++]=-a/d;
		      v[i++]=a/d;
		    }
	 if(d==r) {v[i++]=d;
		   v[i++]=-d;
		  }
	 l=i-1;n=i;
  do{sch=0;
     for(i=0;i<l;i++)
       if(v[i]>v[i+1]) {aux=v[i];
			v[i]=v[i+1];
			v[i+1]=aux;
			sch=1;
		       }
     l--;
    }while(sch);
    if(de==0) { x=-b/(2.*a);
    for(i=0, nr=0;i<n;i++)
    if((long)(v[i]*x)==v[i]*x && (long)(a/v[i]*x)==a/v[i]*x)
	 {nr++; if(nr==k) break;}
    if(i<n) cout<<'('<<v[i]<<'x'<<((-1*v[i]*x>0)?'+':'-')<<abs(v[i]*x)<<")("<<a/v[i]<<'x'<<((-1*a/v[i]*x>0)?'+':'-')<<abs(a/v[i]*x)<<")";
    else cout<<-1;
		}
     else { x1=(-b+sqrt(de))/(2*a);
	    x2=(-b-sqrt(de))/(2*a);
	    for(i=0, nr=0;i<n;i++)
	      if(-1*v[i]*x1<-1*v[i]*x2)

	     {if((long)(v[i]*x1)==v[i]*x1 && (long)(a/v[i]*x2)==a/v[i]*x2)

		{nr++; if(nr==k) break;aux=1;}
	      if((long)(v[i]*x2)==v[i]*x2 && (long)(a/v[i]*x1)==a/v[i]*x1)
		{nr++; if(nr==k) break;aux=2;}
	      } else{ if((long)(v[i]*x2)==v[i]*x2 && (long)(a/v[i]*x1)==a/v[i]*x1)

		{nr++; if(nr==k) break;aux=2;}
	      if((long)(v[i]*x1)==v[i]*x1 && (long)(a/v[i]*x2)==a/v[i]*x2)
		{nr++; if(nr==k) break;aux=1;}
		}
	      if(i<n) {if(aux==1)

		       cout<<'('<<v[i]<<'x'<<((-1*v[i]*x1>0)?'+':'-')<<abs(v[i]*x1)<<")("<<a/v[i]<<'x'<<((-1*a/v[i]*x2>0)?'+':'-')<<abs(a/v[i]*x2)<<")";
		       else cout<<'('<<v[i]<<'x'<<((-1*v[i]*x2>0)?'+':'-')<<abs(v[i]*x2)<<")("<<a/v[i]<<'x'<<((-1*a/v[i]*x1>0)?'+':'-')<<abs(a/v[i]*x1)<<")";
		   }
		   else cout<<-1;
	     }
	     }
  return 0;
}