Cod sursa(job #1965552)

Utilizator NicolaalexandraNicola Alexandra Mihaela Nicolaalexandra Data 14 aprilie 2017 14:33:49
Problema Ecuatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.07 kb
#include <fstream>
#include <algorithm>
#include <cmath>
using namespace std;
int a,b,c,K,k,k2,d,p1,p2,q1,q2,i,j,v[10001],w[10001];
ifstream fin ("ecuatie.in");
ofstream fout ("ecuatie.out");
int modul (int n){
    if (n < 0)
        return -n;
    return n;
}
int main (){

    fin>>a>>b>>c>>K;
    // punem toti divizorii lui a intr-un vector
    for (d=1;d*d<=modul(a);d++){
        if (modul(a) % d == 0){
            v[++k] = d;
            v[++k] = -d;
            v[++k] = modul (a)/d;
            v[++k] = - (modul (a)/d);
        }
    }
    if (sqrt(a) == (int)sqrt(a))
        k-=2;
    for (d=1;d*d<=modul(c);d++){
        if (modul(c) % d == 0){
            w[++k2] = d;
            w[++k2] = -d;
            w[++k2] = modul (c)/d;
            w[++k2] = - (modul (c)/d);
        }
    }
    if (sqrt(c) == (int)sqrt(c))
        k2-=2;
    sort (v+1,v+k+1);
    sort (w+1,w+k2+1);
    int ap = 0;
    for (i=1;i<=k;i++)
        for (j=1;j<=k2;j++){
            p1 = v[i];
            p2 = w[j];
            q1 = a / p1;
            q2 = c / p2;
            if (p1 * q2 + p2*q1 == b){
                ap++;
                if (ap < K)
                    continue;
                fout<<"(";
                if (p1 == 1)
                    fout<<"x";
                else{
                    if (p1 == -1)
                        fout<<"-x";
                    else
                        fout<<p1<<"x";
                }
                if (p2 >= 0)
                    fout<<"+"<<p2;
                else
                    fout<<p2;
                fout<<")(";
                if (q1 == 1)
                    fout<<"x";
                else{
                    if (q1 == -1)
                        fout<<"-x";
                    else
                        fout<<q1<<"x";
                }
                if (q2 >= 0)
                    fout<<"+"<<q2;
                else
                    fout<<q2;
                fout<<")";
                return 0;
            }
    }
    fout<<-1;


    return 0;
}