Cod sursa(job #2099183)

Utilizator Claudiu_SimaClaudiu Sima Claudiu_Sima Data 4 ianuarie 2018 08:18:13
Problema Ecuatie Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.97 kb
#include<fstream>
#include<algorithm>
#include<math.h>
#include<iostream>
using namespace std;
ifstream f("ecuatie.in");
ofstream g("ecuatie.out");
int a,b,c,k,n,m,v1[10009],v2[10009],z;
void posibilitati_a(){
    int nr=a,rad;
    if(nr<0)nr=-nr;
    rad=(int)sqrt((double)nr);
    if(rad*rad==nr){
        v1[++m]=rad;rad--;
    }
    for(int i=1;i<=rad;i++)
        if(nr%i==0){
            v1[++m]=i;
            v1[++m]=nr/i;
        }
    for(int i=1;i<=m;i++)
        v1[i+m]=-v1[i];
    m*=2;
    sort(v1+1,v1+1+m);
}
void posibilitati_c(){
    int nr=c,rad;
    if(nr<0)nr=-nr;
    rad=(int)sqrt((double)nr);
    if(rad*rad==nr){
        v2[++n]=rad;rad--;
    }
    for(int i=1;i<=rad;i++)
        if(nr%i==0){
            v2[++n]=i;
            v2[++n]=nr/i;
        }
    for(int i=1;i<=n;i++)
        v2[i+n]=-v2[i];
    n*=2;
    sort(v2+1,v2+1+n);
}
int main(){
    f>>a>>b>>c>>k;
    posibilitati_a();
    posibilitati_c();
    cout<<m<<n;
    if(m*n<k){
        g<<-1;
        return 0;
    }
    for(int i=1;i<=m;i++){
        int p=int(a/v1[i]);
        for(int j=1;j<=n;j++){
            int q=int(c/v2[j]);
            if(v1[i]*q+v2[j]*p==b)
                z++;
            if(z==k){
                g<<"(";
                if(v1[i]==1)
                    g<<"x";
                else if(v1[i]==-1)
                    g<<"-x";
                else
                    g<<v1[i]<<"x";
                if(v2[j]<0)
                    g<<v2[j]<<")";
                else
                    g<<"+"<<v2[j]<<")";
                if(p==-1)
                    g<<"(-x";
                else if(p==1)
                    g<<"(x";
                else
                    g<<"("<<p<<"x";
                if(q<0)
                    g<<q<<")\n";
                else
                    g<<"+"<<q<<")\n";
                return 0;
            }
        }
    }
    cout<<"f";
    if(k!=z)
        g<<-1;
    return 0;
}