Cod sursa(job #1528882)

Utilizator akaprosAna Kapros akapros Data 20 noiembrie 2015 10:40:03
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.51 kb
#include <bits/stdc++.h>
#define maxN 1002
#define maxD 11
using namespace std;
int n, s, v[maxN], w[maxN], a[maxD];
void mul(int A[], int B[])
{
    int i, j, t, C[maxN];
    memset(C, 0, sizeof(C));
    for (i = 1; i <= A[0]; i++)
    {
        for (t=0, j=1; j <= B[0] || t; j++, t/=10)
            C[i+j-1]=(t+=C[i+j-1]+A[i]*B[j])%10;
        if (i + j - 2 > C[0]) C[0] = i + j - 2;
    }
    memcpy(A, C, sizeof(C));
}
void rot(int a[])
{
    int i;
    for (i = 1; i <= a[0] / 2; ++ i)
        swap(a[i], a[a[0] - i + 1]);
}
void read()
{
    int i;
    freopen("prod.in", "r", stdin);
    for (i = 1; i <= 9; ++ i)
    {
        scanf("%d", &a[i]);
        s += a[i];
    }
}
void solve()
{
    int i, p = maxD - 1, r;
    while (a[p] % 2 == 0)
    {
        -- p;
        for (i = 1; i <= a[p] / 2; ++ i)
        {
            v[++ v[0]] = p;
            w[++ w[0]] = p;
            s -= 2;
        }
        if (a[p] % 2)
        {
            v[++ v[0]] = p;
            -- s;
        }
    }-- p;
    r = 1;
    while (p)
    {
        for (i = 1; i <= a[p]; ++ i)
        {
            if (v[0] >= w[0])
                w[++ w[0]] = p;
            else
                v[++ v[0]] = p;
        }
        -- p;
    }
}
void write()
{

    int i;
    freopen("prod.out", "w", stdout);
    rot(v);
    rot(w);
    mul(v, w);
    for (i = v[0]; i >= 1; -- i)
        printf("%d", v[i]);
}
int main()
{
    read();
    solve();
    write();
    return 0;
}