Cod sursa(job #2110718)

Utilizator Mihai145Oprea Mihai Adrian Mihai145 Data 21 ianuarie 2018 11:32:48
Problema Ecuatie Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 3.01 kb
#include <bits/stdc++.h>
using namespace std;
ifstream fin("ecuatie.in");
ofstream fout("ecuatie.out");
long long a, b, aa, cc, c, k, nrda, nrdc, diva[30002], divc[30002];
void div_a()
{
    long long i;
    for(i=1; i*i<=aa; i++)
        if(aa%i==0)
        {
            if(i!=aa/i)
            {
                diva[++nrda]=i;
                diva[++nrda]=aa/i;
                //    diva[++nrda]=(-1)*i;
                //    diva[++nrda]=(-1)*aa/i;
            }
            else
            {
                diva[++nrda]=i;
                //    diva[++nrda]=(-1)*i;
            }
        }
}
void div_c()
{
    long long i;
    for(i=1; i*i<=cc; i++)
        if(cc%i==0)
        {
            if(i!=cc/i)
            {
                divc[++nrdc]=i;
                divc[++nrdc]=cc/i;
                //  divc[++nrdc]=(-1)*i;
                //   divc[++nrdc]=(-1)*cc/i;
            }
            else
            {
                divc[++nrdc]=i;
                //   divc[++nrdc]=(-1)*i;
            }
        }
}
void afis_sol(long long p1, long long q1, long long p2, long long q2)
{
    fout<<'(';
    if(p1==-1) fout<<"-x";
    else if(p1!=1) fout<<p1<<"x";
    else fout<<"x";
    if(q1>0) fout<<"+"<<q1<<")(";
    else fout<<q1<<")(";
    if(p2==-1) fout<<"-x";
    else if(p2!=1) fout<<p2<<"x";
    else fout<<"x";
    if(q2>0) fout<<"+"<<q2<<")";
    else fout<<q2<<")";
}
int main()
{
    long long i, j, p1, q1, p2, q2, ct=0;
    fin>>a>>b>>c>>k;
    aa=max(a,a*(-1));
    cc=max(c,c*(-1));
    div_a();
    div_c();
    sort(diva+1,diva+nrda+1);
    sort(divc+1,divc+nrdc+1);
    for(i=1; i<=nrda; i++)
        for(j=1; j<=nrdc; j++)
        {
            ///
            p1=diva[i], q1=divc[j];
            p2=a/p1, q2=c/q1;
            if(p1*q2+p2*q1==b)
            {
                ct++;
                if(ct==k)
                {
                    afis_sol(p1,q1,p2,q2);
                    return 0;
                }
            }
            ///
            p1=(-1)*diva[i], q1=divc[j];
            p2=a/p1, q2=c/q1;
            if(p1*q2+p2*q1==b)
            {
                ct++;
                if(ct==k)
                {
                    afis_sol(p1,q1,p2,q2);
                    return 0;
                }
            }
            ///
            p1=diva[i], q1=(-1)*divc[j];
            p2=a/p1, q2=c/q1;
            if(p1*q2+p2*q1==b)
            {
                ct++;
                if(ct==k)
                {
                    afis_sol(p1,q1,p2,q2);
                    return 0;
                }
            }
            ///
            p1=(-1)*diva[i], q1=(-1)*divc[j];
            p1=diva[i], q1=divc[j];
            p2=a/p1, q2=c/q1;
            if(p1*q2+p2*q1==b)
            {
                ct++;
                if(ct==k)
                {
                    afis_sol(p1,q1,p2,q2);
                    return 0;
                }
            }
        }
    fout<<-1<<'\n';
    return 0;
}