Cod sursa(job #1964367)

Utilizator RaduXD1Nicolae Radu RaduXD1 Data 13 aprilie 2017 13:13:33
Problema Ecuatie Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<fstream>
#include<math.h>
#include<vector>
#include<algorithm>

using namespace std;
ifstream fin("ecuatie.in");
ofstream fout("ecuatie.out");
int a,b,c,k,m,n,d,x,el,q,p;
int i, aux1;
vector <pair<int, int> > v;

void afis(int p, int q)
{
    if(p==1)
        fout<<"("<<"x";
    else
        if(p==-1)
            fout<<"("<<"-x";
        else
            fout<<"("<<p<<"x";
    if(q<0)
        fout<<"-"<<-q<<")";
    else
        fout<<"+"<<q<<")";
}

int main()
{
    fin>>a>>b>>c>>k;
    d=b*b-4*a*c;
    n=-b-sqrt(d);
    n/=2*a;
    m=-b+sqrt(d);
    m/=2*a;
    n=-n;
    m=-m;
    for(i=1;i*i<=a;i++)
        if(a%i==0)
        {
            v.push_back(make_pair(i, n*i));
            v.push_back(make_pair(-i, -n*i));
            v.push_back(make_pair(i, m*i));
            v.push_back(make_pair(-i, -m*i));
            if(i!=a/i)
            {
                v.push_back(make_pair(a/i, n*a/i));
                v.push_back(make_pair(-a/i, -n*a/i));
                v.push_back(make_pair(a/i, m*a/i));
                v.push_back(make_pair(-a/i, -m*a/i));
            }
        }
    sort(v.begin(), v.end());
    p=v[k-1].first;
    q=v[k-1].second;
    afis(p, q);
    if(q/p==n)
        el=m;
    else
        el=n;
    p=a/p;
    q=el*p;
    afis(p, q);
    fin.close();
    fout.close();
    return 0;
}