Cod sursa(job #466578)

Utilizator GavrilaVladGavrila Vlad GavrilaVlad Data 27 iunie 2010 11:07:16
Problema Prod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.17 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

#define maxn 2100

long n, sum, poz;
long f[11], a[maxn], b[maxn], c[maxn];

void inm()
{
    for(long i=1; i<=a[0]; i++)
    {
        long t=0;
        long j;
        for(j=1; j<=b[0] || t; j++)
        {
            t=t+c[i+j-1]+a[i]*b[j];
            c[i+j-1]=t%10;
            t/=10;
        }
        c[0]=max(c[0], i+j-2);
    }
}

long getcif()
{
    while(f[poz]==0)
        --poz;
    f[poz]--;
    return poz;
}

int main()
{
    freopen("prod.in", "r", stdin);
    freopen("prod.out", "w", stdout);
    for(long i=1; i<=9; ++i)
    {
        scanf("%d", &f[i]);
        sum+=f[i];
    }
    poz=9;
    if(sum%2==0)
    {
        a[0]=b[0]=sum/2;
        for(long i=sum/2; i; --i)
        {
            a[i]=getcif();
            b[i]=getcif();
        }
    }
    else
    {
        a[0]=sum/2+1;
        b[0]=sum/2;
        b[b[0]]=getcif();
        a[a[0]]=getcif();
        a[a[0]-1]=getcif();
        for(long i=sum/2-1; i; --i)
        {
            b[i]=getcif();
            a[i]=getcif();
        }
    }
    inm();
    for(long i=c[0]; i; --i)
    {
        printf("%d", c[i]);
    }
    printf("\n");
    return 0;
}