Cod sursa(job #2415483)

Utilizator DanutAldeaDanut Aldea DanutAldea Data 26 aprilie 2019 03:13:18
Problema Ecuatie Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <fstream>
#include <cmath>
#include <algorithm>
using namespace std;

ifstream fin("ecuatie.in");
ofstream fout("ecuatie.out");

int A,B,C,a,b,c,k,d,p1,p2,q1,q2,u1,u2,i,j,cnt;
int v[10010],w[10010];

void af(int a, int b, int c, int d){
    fout<<"(";
    if(a<0)
        fout<<"-";
    if(abs(a)!=1)
        fout<<abs(a);
    fout<<"x";

    if(b<0)
        fout<<b;
    else
        fout<<"+"<<b;

    fout<<")(";

    if(c<0)
        fout<<"-";
    if(abs(c)!=1)
        fout<<abs(c);
    fout<<"x";

    if(d<0)
        fout<<d;
    else
        fout<<"+"<<d;

    fout<<")";
}

int main(){
    fin>>A>>B>>C>>k;
    a=max(A,-A);
    c=max(C,-C);

    for(d=1;d*d<=a;d++){
        if(a%d==0){
            v[++u1]=-d;
            v[++u1]=d;

            if(d!=a/d){
                v[++u1]=-a/d;
                v[++u1]=a/d;
            }
        }
    }

    for(d=1;d*d<=c;d++){
        if(c%d==0){
            w[++u2]=-d;
            w[++u2]=d;

            if(d!=c/d){
                w[++u2]=-c/d;
                w[++u2]=c/d;
            }
        }
    }
    sort(v+1,v+u1+1);
    sort(w+1,w+u2+1);

    for(i=1;i<=u1;i++){
        for(j=1;j<=u2;j++){
            p1=v[i]; p2=A/v[i];
            q1=w[j]; q2=C/w[j];

            if(p1*q2+p2*q1==B)
                cnt++;

            if(cnt==k){
                af(p1,q1,p2,q2);

                return 0;
            }
        }
    }

    fout<<-1;

    return 0;
}