Cod sursa(job #998256)

Utilizator geniucosOncescu Costin geniucos Data 16 septembrie 2013 17:12:32
Problema Ecuatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.79 kb
#include<cmath>
#include<cstdio>
#include<vector>
#include<algorithm>
using namespace std;
int Nr,nr,i,j,A,B,C,auxC,Poz,sol[10];
vector < int > v;
vector < int >::iterator it;
void solveeq2(long long A,long long B,long long C)
{
    long long dint,X1,X2;
    double x1,x2,delta=(double)1LL*B*B-1LL*4*A*C;
    nr=0;
    if(delta<0) return ;
    delta=pow(delta,0.5);
    x1=(double)((double)-B-delta)/(2*A);X1=(long long)x1;
    x2=(double)((double)-B+delta)/(2*A);X2=(long long)x2;
    if(1LL*X1*X1*A+X1*B+C==0&&auxC%X1==0){nr++;sol[nr]=X1;}
    if(1LL*X2*X2*A+X2*B+C==0&&auxC%X2==0){nr++;sol[nr]=X2;}
}
void afispar(int P1,int Q1)
{
    printf("(");
    if(P1==-1) printf("-x");
    else
    if(P1==1) printf("x");
    else printf("%dx",P1);
    if(Q1<0) printf("%d",Q1);
    else printf("+%d",Q1);
    printf(")");
}
void afis(int P1,int Q1)
{
    int P2=A/P1,Q2=C/Q1;
    afispar(P1,Q1);
    afispar(P2,Q2);
    printf("\n");
}
int main()
{
freopen("ecuatie.in","r",stdin);
freopen("ecuatie.out","w",stdout);
scanf("%d",&A);
scanf("%d",&B);
scanf("%d",&C);
printf("-1\n");
return 0;
auxC=C;
scanf("%d",&Poz);
if(A>0)
{for(i=1;i*i<A;i++)if(A%i==0){v.push_back(i);v.push_back(A/i);v.push_back(-i);v.push_back(-A/i);}if(i*i==A){v.push_back(i);v.push_back(-i);}}
else{for(i=-1;i*i<-A;i--)if(A%i==0){v.push_back(i);v.push_back(A/i);v.push_back(-i);v.push_back(-A/i);}if(i*i==-A){v.push_back(i);v.push_back(-i);}}
sort(v.begin(),v.end());
Nr=0;
for(it=v.begin();it!=v.end();it++)
{
    solveeq2(A/ *it,-B,(long long)*it*C);
    Nr+=nr;
    sort(sol+1,sol+nr+1);
    //for(j=1;j<=nr;j++)
      //  afis(*it,sol[j]);
    if(Nr>=Poz)
    {
        if(Nr==Poz) afis(*it,sol[nr]);
        else afis(*it,sol[1]);
        return 0;
    }
}
printf("-1\n");
return 0;
}