Pagini recente » Cod sursa (job #1034193) | Cod sursa (job #257544) | Cod sursa (job #163414) | Cod sursa (job #2206720) | Cod sursa (job #174597)
Cod sursa(job #174597)
#include<fstream>
#include<math.h>
#include <stdio.h>
using namespace std;
long long a,b,c,k,d[50000]={0},m,p[50000]={0},l=0,j=0;double x1,x2;
struct { long long p1,q1,p2,q2;}v[1000]={0},aux;
long long i;
long long delta;
double jj=0;
void quickSort(long long numbers[], long long array_size);
void q_sort(long long numbers[], long long left, long long right);
int main()
{
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
f>>a>>b>>c>>k;
delta=b*b-4*a*c;
if (delta<0) g<<"-1";
else
{
jj=sqrt(delta);
if(delta==jj*jj)
{
x1=(-b-sqrt(delta))/(2*a);
x2=(-b+sqrt(delta))/(2*a);
if (a<0) a = -a;
for(i=1;i<=sqrt(a);i++)
if(a%i==0)
{
d[l++]=i;
d[l++]=-i;
d[l++]=a/i;
d[l++]=-a/i;
}
q_sort(d,0,l-1);
m=0;
for(i=0;i<l;i++)
if(d[i]!=d[i+1])
p[m++]=d[i];
j=0;
for(i=0;i<m;i++)
{
v[j].p1=p[i];
v[j].q1=-x1*p[i];
v[j].p2=a/p[i];
v[j].q2=-x2*(a/p[i]);
if(v[j].p1!=0&&v[j].q1!=0&&v[j].p2!=0&&v[j].q2!=0)
if(v[j].q1*v[j].q2==c&&(v[j].p1*v[j].p2)==a)
j++;
v[j].p1=p[i];
v[j].q1=-x2*p[i];
v[j].p2=a/p[i];
v[j].q2=-x1*(a/p[i]);
if(v[j].p1!=0&&v[j].q1!=0&&v[j].p2!=0&&v[j].q2!=0)
if((v[j].q1*v[j].q2==c)&&(v[j].p1*v[j].p2)==a)
j++;
}
for(i=0;i<j-1;i++)
if(v[i].p1==v[i+1].p1)
if(v[i].q1>v[i+1].q1)
{
aux=v[i];
v[i]=v[i+1];
v[i+1]=aux;
}
j--;
k--;
if(k<=j)
{
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].p2<<"x";
if(v[k].q2>0) g<<"+"<<v[k].q2<<")";
else g<<v[k].q2<<")";
}
else g<<"-1";
}
else
g<<"-1";
}
return 0;
}
void q_sort(long long numbers[], long long left, long long right)
{
long long pivot, l_hold, r_hold;
l_hold = left;
r_hold = right;
pivot = numbers[left];
while (left < right)
{
while ((numbers[right] >= pivot) && (left < right))
right--;
if (left != right)
{
numbers[left] = numbers[right];
left++;
}
while ((numbers[left] <= pivot) && (left < right))
left++;
if (left != right)
{
numbers[right] = numbers[left];
right--;
}
}
numbers[left] = pivot;
pivot = left;
left = l_hold;
right = r_hold;
if (left < pivot)
q_sort(numbers, left, pivot-1);
if (right > pivot)
q_sort(numbers, pivot+1, right);
}