Cod sursa(job #534016)

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

using namespace std;

int a[501],b[501],c[250001],ok,i,j,n,m,v[1001],x,t;

int main()
{
    freopen("prod.in","r",stdin);
    freopen("prod.out","w",stdout);
    for (i=1;i<10;++i)
    {
        scanf("%d",&x);
        for (j=1;j<=x;++j)
        {
            ++n;
            v[n]=i;
        }
    }
    reverse(v+1,v+n+1);
    ok=0;m=0;
    for (i=1;i<n;i+=2)
    {
        if (ok)
        {
            ++m;
            a[m]=v[i];
            b[m]=v[i+1];
            if ((!ok)&&(a[m]!=b[m])) ok=1-ok;
        }
        else
        {
            ++m;
            b[m]=v[i];
            a[m]=v[i+1];
            if ((!ok)&&(a[m]!=b[m])) ok=1-ok;
        }
    }
    a[0]=m;b[0]=m;
    if(n%2)
    {
        for(i=1;a[i]==b[i];++i);
        if(a[i]<b[i])
        {
            ++a[0];
            a[a[0]]=v[n];
        }
        else b[b[0]]=v[n];
    }
    reverse(a+1,a+a[0]+1);
    reverse(b+1,b+b[0]+1);
    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;
}