Cod sursa(job #2239861)

Utilizator giotoPopescu Ioan gioto Data 11 septembrie 2018 22:37:09
Problema Ecuatie Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.9 kb
#include <bits/stdc++.h>
using namespace std;

int a, b, c, k;
int A[50005], B[50005];
int main()
{
    freopen("ecuatie.in", "r", stdin);
    freopen("ecuatie.out", "w", stdout);

    scanf("%d%d%d%d", &a, &b, &c, &k);

    int NR = 0;
    for(int i = 1; i * i <= abs(a) ; ++i){
        if(a % i == 0){
            A[++NR] = i;
            A[++NR] = -i;
            if(a / i != i){
                A[++NR] = -(a / i);
                A[++NR] = a / i;
            }
        }
    }

    int NR2 = 0;
    for(int i = 1; i * i <= abs(c) ; ++i){
        if(c % i == 0){
            B[++NR2] = i;
            B[++NR2] = -i;
            if(c / i != i){
                B[++NR2] = -(c / i);
                B[++NR2] = c / i;
            }
        }
    }

    sort(A + 1, A + NR + 1);
    sort(B + 1, B + NR2 + 1);

    for(int i = 1; i <= NR ; ++i){
        for(int j = 1; j <= NR2 ; ++j){
            int p1 = A[i], q1 = B[j];
            int p2 = a / p1, q2 = c / B[j];
            if(1LL * p1 * q2 + 1LL * p2 * q1 == b){
                --k;
                if(k == 0) {
                    printf("(");

                    if(abs(p1) != 1) printf("%d", p1);
                    else if(p1 == -1) printf("-");
                    printf("x");
                    if(q1 < 0) printf("-");
                    else printf("+");
                    if(q1 != 0) printf("%d", abs(q1));

                    printf(")");

                    printf("(");

                    if(abs(p2) != 1) printf("%d", p2);
                    else if(p2 == -1) printf("-");
                    printf("x");
                    if(q2 < 0) printf("-");
                    else printf("+");
                    if(q2 != 0) printf("%d", abs(q2));

                    printf(")");

                    return 0;
                }
            }
        }
    }
    printf("-1");

    return 0;
}