Cod sursa(job #110087)
Utilizator | Data | 25 noiembrie 2007 17:11:24 | |
---|---|---|---|
Problema | Ecuatie | Scor | 0 |
Compilator | cpp | Status | done |
Runda | Arhiva de probleme | Marime | 11.49 kb |
#include<stdio.h>
#include<math.h>
long a , b , c , k;
long delta;
long x1 , x2;
long sir[5001] , i;
long mare(long p1 , long q1 , long p2 , long q2)
{
if (p1 < p2)
return 1;
if (p1 == p2 && q1 <= q2)
return 1;
return 2;
}
void afis(long a , long a1 , long b , long b1)
{
printf("(");
if (a == 1)
printf("x");
else
if (a==-1)
printf("-x");
else
printf("%ldx",a);
if (a1 < 0)
printf("+%ld",-a1);
else
printf("-%ld",a1);
printf(")");
printf("(");
if (b==1)
printf("x");
else
if (b==-1)
printf("-x");
else
{
printf("%ldx",b);
}
if (b1 < 0)
{
printf("+%ld",-b1);
}
else
printf("-%ld",b1);
printf(")\n");
}
int main()
{
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%ld%ld%ld%ld",&a,&b,&c,&k);
delta = b*b - 4*a*c;
if (delta < 0)
{
printf("-1\n");
return 0;
}
x1 = (- b - sqrt(delta))/(2*a);
x2 = (- b + sqrt(delta))/(2*a);
// printf("%ld(x-%ld)(x-%ld)",a,x1,x2);
sir[0] = 1;
sir[1] = 1;
long aux = a;
for (i = 2 ; i <= (a+1)/2 ; i++)
{
if (a%i==0)
{
sir[0]++;
sir[sir[0]] = i;
}
}
sir[0]++;
sir[sir[0]] = a;
while(k>0)
{
for (i = sir[0] ; i >= 1 ; i--)
{
if (mare(-sir[i],-sir[i]*x1,-sir[i],-sir[i]*x2)==1)
{
if (-(a/sir[i])*x1 > -(a/sir[i])*x2)
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-(a/sir[i]),-(a/sir[i])*x1,-(sir[i]),-(sir[i])*x2 );
k--;
if (k==0)
{
afis(-(a/sir[i]),-(a/sir[i])*x1,-(sir[i]),-(sir[i])*x2);
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-(a/sir[i]),-(a/sir[i])*x2,-sir[i],-sir[i]*x1 );
k--;
if (k==0)
{
afis(-(a/sir[i]),-(a/sir[i])*x2,-sir[i],-sir[i]*x1);
return 0;
}
}
else
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-(a/sir[i]),-(a/sir[i])*x2,-sir[i],-sir[i]*x1 );
k--;
if (k==0)
{
afis(-(a/sir[i]),-(a/sir[i])*x2,-sir[i],-sir[i]*x1);
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-(a/sir[i]),-(a/sir[i])*x1,-(sir[i]),-(sir[i])*x2 );
k--;
if (k==0)
{
afis(-(a/sir[i]),-(a/sir[i])*x1,-(sir[i]),-(sir[i])*x2);
return 0;
}
}
}
else
{
if (-sir[i]*x1 > -sir[i]*x2)
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-sir[i],-sir[i]*x1,-(a/sir[i]),-(a/sir[i])*x2 );
k--;
if (k==0)
{
afis(-sir[i],-sir[i]*x1,-(a/sir[i]),-(a/sir[i])*x2);
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-sir[i],-sir[i]*x2 ,-a/sir[i],-(a/sir[i])*x1);
k--;
if (k==0)
{
afis(-sir[i],-sir[i]*x2 ,-a/sir[i],-(a/sir[i])*x1);
return 0;
}
}
else
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-sir[i],-sir[i]*x2 ,-a/sir[i],-(a/sir[i])*x1);
k--;
if (k==0)
{
afis(-sir[i],-sir[i]*x2 ,-a/sir[i],-(a/sir[i])*x1);
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,-sir[i],-sir[i]*x1,-(a/sir[i]),-(a/sir[i])*x2 );
k--;
if (k==0)
{
afis(-sir[i],-sir[i]*x1,-(a/sir[i]),-(a/sir[i])*x2 );
return 0;
}
}
}
}
for (i =1 ; i <= sir[0] ; i++)
{
if (mare(sir[i],sir[i]*x1,(a/sir[i]),(a/sir[i])*x2)==1)
{
if (sir[i]*x1 > sir[i]*x2)
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,sir[i],sir[i]*x1,(a/sir[i]),(a/sir[i])*x2 );
k--;
if (k==0)
{
afis(sir[i],sir[i]*x1,(a/sir[i]),(a/sir[i])*x2 );
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
k--;
if (k==0)
{
afis(sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
return 0;
}
}
else
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
k--;
if (k==0)
{
afis(sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,sir[i],sir[i]*x1,(a/sir[i]),(a/sir[i])*x2 );
k--;
if (k==0)
{
afis(sir[i],sir[i]*x1,(a/sir[i]),(a/sir[i])*x2 );
return 0;
}
}
}
else
{
if (sir[i]*x2 > sir[i]*x1)
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
k--;
if (k==0)
{
afis(sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,(sir[i]),(sir[i])*x1,(a/sir[i]),(a/sir[i])*x2 );
k--;
if (k==0)
{
afis((sir[i]),(sir[i])*x1,(a/sir[i]),(a/sir[i])*x2 );
return 0;
}
}
else
{
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,(sir[i]),(sir[i])*x1,(a/sir[i]),(a/sir[i])*x2 );
k--;
if (k==0)
{
afis((sir[i]),(sir[i])*x1,(a/sir[i]),(a/sir[i])*x2 );
return 0;
}
// printf("(%ldx-%ld)(%ldx-%ld)\n" ,sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
k--;
if (k==0)
{
afis(sir[i],sir[i]*x2,(a/sir[i]),(a/sir[i])*x1 );
return 0;
}
}
}
}
printf("-1");
return 0;
}
printf("-1");
return 0;
}