Cod sursa(job #498806)
#include<fstream.h>
ifstream fin("prod.in");
ofstream fout("prod.out");
int i,j,k,a[1000],b[1000],c[1000],u,v,aux,fr[10],n,x[1000],t;
int compara(int a[], int b[])
{
if(a[0]<b[0])
return 1;
if(a[0]>b[0])
return 0;
for(i=1;i<=a[0];i++)
{
if(a[i]>b[i])
return 0;
if(a[i]<b[i])
return 1;
}
return 1;
}
int invers(int a[])
{
int u,v,aux;
i=1;
v=a[0];
while(u<v)
{
aux=a[u];
a[u]=a[v];
a[v]=aux;
u++;
v--;
}
}
void prod(int a[], int b[], int c[])
{
for(i=1;i<=a[0];i++)
for(j=1;j<=b[0];j++)
c[i+j-1]=a[i]*b[j]+c[i+j-1];
t=0;
k=a[0]+b[0]+1;
for(i=1;i<=k;i++)
{
c[i]=c[i]+t;
t=c[i]/10;
c[i]=c[i]%10;
}
while(t)
{
k++;
c[k]=t%10;
t/=10;
}
c[0]=k;
}
int main()
{
for(i=1;i<10;i++)
fin>>fr[i];
n=0;
for(i=9;i>0;i--)
for(j=1;j<=fr[i];j++)
x[n++]=i;
b[0]=0;
a[0]=0;
for(i=0;i<n;i++)
if(compara(a,b)==1)
{
a[0]++;
a[a[0]]=x[i];
}
else
{
b[0]++;
b[b[0]]=x[i];
}
invers(a);invers(b);
prod(a,b,c);
for(i=c[i];i>0;i--)
fout<<c[i];
fout<<'\n';
}