Cod sursa(job #830037)

Utilizator emiemiEmi Necula emiemi Data 6 decembrie 2012 11:34:39
Problema Prod Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.46 kb
#include<fstream>
using namespace std;
ifstream f("prod.in");
ofstream g("prod.out");
int k,nr,i,n,s[1001],v[11],a[505],b[505],c[1020];
void inmultire(int a[],int b[],int c[])
{int i,t=0,j,n=a[0]-1+b[0];
for(i=1;i<=a[0];++i)
for(j=1;j<=b[0];++j)
c[i+j-1]+=a[i]*b[j];
for(i=1;i<=n||t;++i)
{
    c[i]+=t;
    t=c[i]/10;
    c[i]%=10;
}
c[0]=i-1;
}
int main()
{
    n=0;
    for(i=1;i<=9;++i)
    f>>v[i];
    for(i=9;i>=1;++i)
    if(v[i]%2!=0)
    {
        nr=i;
        break;
    }
    for(i=1;i<=9;++i)
    while(v[i]!=0)
    {
        ++n; --v[i];
        s[n]=i;
    }
    k=0; i=n;
    while(s[i]>=nr&&i>0)
    {
        if(k==0)
        {
            ++a[0];
            a[a[0]]=s[i];
            k=1; --i;
        }
        else
        {
            ++b[0]; b[b[0]]=s[i];
            k=0; --i;
        }
    }
    if(i>0)
    {
        k=1; ++b[0]; b[b[0]]=s[i]; --i;
    }
    while(i>0)
    {
        if(k==0)
        {
            ++a[0];
            a[a[0]]=s[i];
            k=1; --i;
        }
        else
        {
            ++b[0]; b[b[0]]=s[i];
            k=0; --i;
        }
    }
    k=a[0]/2;
    for(i=1;i<=k;++i)
    {
        n=a[i];
        a[i]=a[a[0]-i+1];
        a[a[0]-i+1]=n;
    }
    k=b[0]/2;
    for(i=1;i<=k;++i)
    {
        n=b[i];
        b[i]=b[b[0]-i+1];
        b[b[0]-i+1]=n;
    }
    inmultire(a,b,c);
    for(i=c[0];i>=1;--i)
    g<<c[i];
    return 0;
}