Cod sursa(job #1488597)

Utilizator bciobanuBogdan Ciobanu bciobanu Data 19 septembrie 2015 12:00:32
Problema Prod Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <bits/stdc++.h>

using namespace std;

const int NUM_DIGS = 10;
const int MAX_DIGS = 10005;

int frecv[NUM_DIGS];
int h[2][MAX_DIGS + 1];
int prod[3 * MAX_DIGS];

int main()
{
    ifstream in("prod.in");
    ofstream out("prod.out");
    bool line;
    int t, q;

    for (int i = 1; i < 10; i++)
        in >> frecv[i];
    line = 0;
    for (int i = 9; i >= 1; i--)
    {
        while (frecv[i]--)
        {
            h[line][++h[line][0]] = i;
            line ^= (h[line][0] > h[line ^ 1][0] || (i > h[line ^ 1][h[line ^ 1][0]]));
        }
    }

    reverse(h[0] + 1, h[0] + h[0][0] + 1);
    reverse(h[1] + 1, h[1] + h[1][0] + 1);

    prod[0] = h[1][0] + h[0][0] - 1;
    for (int i = 1; i <= h[0][0]; i++)
    {

        for (int j = 1; j <= h[1][0]; j++)
            prod[i + j - 1] += h[0][i] * h[1][j];
        t = 0;
        for (int j = 1; j <= prod[0]; j++)
        {
            t += prod[j];
            q = t / 10;
            prod[j] = t - (q << 1) - (q << 3);
            t = q;
        }
        if (t)
            prod[++prod[0]] = t;
    }

    for (int i = prod[0]; i > 0; i--)
        out << prod[i];
    out << '\n';
    out.close();
    return 0;
}