Cod sursa(job #1527742)

Utilizator cristina_borzaCristina Borza cristina_borza Data 18 noiembrie 2015 17:57:49
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.6 kb
#include <fstream>

using namespace std;

ifstream f("prod.in");
ofstream g("prod.out");

int poz , sum , c[15] , nr1[1005] , nr2[1005] , sol[1000005];

void prod(int a[] , int b[] , int c[]);
int comp(int a[] , int b[]);
void afis(int a[]);

int main() {
    for(int i = 1 ; i <= 9 ; ++i) {
        f >> c[i];
        sum += c[i];
    }

    int poz = 9;

    for(int i = 1 ; i <= sum ; ++i) {
        while(c[poz] == 0) {
            --poz;
        }

        if(comp(nr1 , nr2)) {
            nr1[++nr1[0]] = poz;
        }

        else {
            nr2[++nr2[0]] = poz;
        }

        --c[poz];
    }

    prod(nr1 , nr2 , sol);
    afis(sol);

    return 0;
}

int comp(int a[] , int b[]) {
    if(a[0] < b[0]) {
        return 1;
    }

    if(b[0] < a[0]) {
        return 0;
    }

    for(int i = 1 ; i <= a[0] ; ++i) {
        if(a[i] < b[i]) {
            return 1;
        }

        if(a[i] > b[i]) {
            return 0;
        }
    }

    return 1;
}


void prod(int a[] , int b[] , int c[]) {
    int i , j , t = 0 , pi , pj;

    for(i = 1 , pi = a[0] ; pi >= 1 ; --pi , ++i) {
        t = 0;
        for(j = 1 , pj = b[0] ; pj >= 1 ; ++j , --pj) {
            c[i + j - 1] = c[i + j - 1] + a[pi] * b[pj] + t;
            t = c[i + j - 1] / 10;
            c[i + j - 1] = c[i + j - 1] % 10;
        }
        if (t)
            c[i + j - 1] = t;
    }
    c[0] = a[0] + b[0] - 1;
    if (c[c[0] + 1])
        c[0]++;
}

void afis(int a[]) {
    for(int i = a[0] ; i >= 1 ; --i) {
        g << a[i];
    }
    g << '\n';
}