Cod sursa(job #533965)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 14 februarie 2011 21:38:23
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.49 kb
#include <stdio.h>

int a[501],b[501],c[250001],v[10],t,i,j,k,s;

int main()
{
    freopen("prod.in","r",stdin);
    freopen("prod.out","w",stdout);
    for (i=1;i<=9;++i)
    {
        scanf("%d",&v[i]);
        s+=v[i];
    }
    if (s%2)
    {
        i=s;
        while (i>s/2+1)
        {
            j=9;
            while (!v[j]%2) --j;
            a[i-s/2-1]=j;--v[j];--i;
        }
        a[0]=s/2;
        b[0]=s/2+1;i=s/2+1;
        while (i>0)
        {
            j=9;
            while (!v[j]) --j;
            b[i]=j;--v[j];--i;
        }
    }
    else
    {
        j=9;i=1;a[0]=s/2;b[0]=s/2;
        while (!(v[j]%2))
        {
            k=i;
            for (i=i;i<k+v[j]/2;++i)
            {
                a[s/2-i+1]=j;
                b[s/2-i+1]=j;
            }
            v[j]=0;--j;
        }
        k=i;
        for (i=i;i<k+v[j]/2;++i)
        {
            a[s/2-i+1]=j;
            b[s/2-i+1]=j;
        }
        a[s/2-i+1]=j;v[j]=0;
        --j;k=i+1;
        for (i=k-1;i<=s/2;++i)
        {
            while (!v[j]) --j;
            b[s/2-i+1]=j;--v[j];
        }
        for (i=k;i<=s/2;++i)
        {
            while (!v[j]) --j;
            a[s/2-i+1]=j;--v[j];
        }
    }
    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;
    }
    for (i=c[0];i>0;--i) printf("%d",c[i]);
    return 0;
}