Cod sursa(job #112046)

Utilizator taloibogdanTaloi Bogdan Cristian taloibogdan Data 2 decembrie 2007 21:04:52
Problema Ecuatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.62 kb
#include<stdio.h>
#include<math.h>
long A,B,C,la,lc,c,a,i,j,l=0,k,da1[1000],da2[1000],da12,dc1[1000],dc2[1000],dc12,num;
long int labs(long int x);
int cauta(long l)
{long i;
for(i=1;i<l;++i)if((da1[i]==da1[l])&&(da2[i]==da2[l])&&(dc1[i]==dc1[l])&&(dc2[i]==dc2[l])) return 1;
return 0;
}
int main()
{freopen("ecuatie.in","r",stdin);
 freopen("ecuatie.out","w",stdout);
 scanf("%ld %ld %ld %ld",&A,&B,&C,&k);
 a=sqrt(labs(A));
 if(A>0)
 for(i=1;i<=a;++i)
       {
	if (A%i==0)
	  {
	   da1[++l]=-(A/i);
	   da2[l]=-i;
	   if (cauta(l)) --l;
	   da1[++l]=A/i;
	   da2[l]=i;
	   if (cauta(l)) --l;
	   if (A/i!=i)
	   {
	   da1[++l]=-i;
	   da2[l]=-(A/i);
	   if (cauta(l)) --l;
	   da1[++l]=i;
	   da2[l]=A/i;
	   if (cauta(l)) --l;
	   }
	  }
       }
	else
 for(i=1;i<=a;++i)
	if (A%i==0)
	  {
	   da1[++l]=A/i;
	   da2[l]=i;
	   if (cauta(l)) --l;
	   da1[++l]=labs(A/i);
	   da2[l]=-i;
	   if (cauta(l)) --l;
	   if (labs(A/i)!=i)
	   {
	   da1[++l]=-i;
	   da2[l]=labs(A/i);
	   if (cauta(l)) --l;
	   da1[++l]=i;
	   da2[l]=A/i;
	   if (cauta(l)) --l;
	   }
	  }
 la=l;
 for(i=1;i<=l-1;i++)
    for(j=i+1;j<=l;j++) if(da1[i]>da1[j]) {da12=da1[i];da1[i]=da1[j];da1[j]=da12;da12=da2[i];da2[i]=da2[j];da2[j]=da12;}
 l=0;
 c=sqrt(labs(C));
 if(C>0)
 for(i=1;i<=c;++i)
       {
	if (C%i==0)
	  {
	   dc1[++l]=-(C/i);
	   dc2[l]=-i;
	   if (cauta(l)) --l;
	   dc1[++l]=C/i;
	   dc2[l]=i;
	   if (cauta(l)) --l;
	   if (C/i!=i)
	   {
	   dc1[++l]=-i;
	   dc2[l]=-(C/i);
	   if (cauta(l)) --l;
	   dc1[++l]=i;
	   dc2[l]=C/i;
	   if (cauta(l)) --l;
	   }
	  }
       }
	else
 for(i=1;i<=c;++i)
	if (C%i==0)
	  {
	   dc1[++l]=C/i;
	   dc2[l]=i;
	   if (cauta(l)) --l;
	   dc1[++l]=labs(C/i);
	   dc2[l]=-i;
	   if (cauta(l)) --l;
	   if (labs(C/i)!=i)
	   {
	   dc1[++l]=-i;
	   dc2[l]=labs(C/i);
	   if (cauta(l)) --l;
	   dc1[++l]=i;
	   dc2[l]=C/i;
	   if (cauta(l)) --l;
	   }
	  }
 lc=l;
 for(i=1;i<=l-1;i++)
    for(j=i+1;j<=l;j++) if(dc1[i]>dc1[j]) {dc12=dc1[i];dc1[i]=dc1[j];dc1[j]=dc12;dc12=dc2[i];dc2[i]=dc2[j];dc2[j]=dc12;}
 num=0;
 for(i=1;i<=la;++i)
    for(j=1;j<=lc;++j)
       if(da1[i]*dc2[j]+da2[i]*dc1[j]==B)
	 {++num;
	  if(num==k)
	   {printf("(");
	    if(da1[i]==-1) printf("-");
		     else if(da1[i]!=1) printf("%ld",da1[i]);
	    printf("x");
	    if(dc2[j]>=0) printf("+");
	    printf("%ld)(",dc2[j]);
	    if(da2[i]==-1) printf("-");
		     else if(da2[i]!=1) printf("%ld",da2[i]);
	    printf("x");
	    if(dc1[j]>=0) printf("+");
	    printf("%ld)",dc1[j]);
	    return 0;
	   }
	 }
 printf("-1");
 fcloseall();
return 0;
}