Cod sursa(job #1758974)

Utilizator fanache99Constantin-Buliga Stefan fanache99 Data 18 septembrie 2016 11:58:30
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream cin("prod.in");
ofstream cout("prod.out");

const int DIGITS = 10;
const int MAXD = 1000;

int frequency[DIGITS];
int a[1 + MAXD], b[1 + MAXD], c[3 + MAXD * MAXD];

inline bool Compare() {
    if (a[0] != b[0])
        return a[0] < b[0];
    for (int i = 1; i <= a[0]; i++) {
        if (a[i] < b[i])
            return true;
        if (a[i] > b[i])
            return false;
    }
    return false;
}

void Multiply() {
    for (int i = 1; i <= a[0]; i++)
        for (int j = 1; j <= b[0]; j++)
            c[a[0] - i + b[0] - j + 1] += a[i] * b[j];
    c[0] = a[0] + b[0] - 1;
    int add = 0, i = 1;
    while (i <= c[0] || add) {
        add += c[i];
        c[i] = add % 10;
        add /= 10;
        i++;
    }
    i--;
    c[0] = max(c[0], i);
}

int main() {
    for (int i = 1; i <= 9; i++)
        cin >> frequency[i];
    for (int i = 9; i; i--)
        for (int j = 1; j <= frequency[i]; j++)
            if (Compare()) {
                a[0]++;
                a[a[0]] = i;
            }
            else {
                b[0]++;
                b[b[0]] = i;
            }
    Multiply();
    for (int i = c[0]; i; i--)
        cout << c[i];
    return 0;
}