Pagini recente » Rating Chereches Sergiu Alexandru (Anesthesic) | Cod sursa (job #1258970) | Istoria paginii utilizator/nnelutu | Cod sursa (job #2103607) | Cod sursa (job #466929)
Cod sursa(job #466929)
#include <cstdio>
#include <cstring>
#define N 2010
int c[10];
int x[N],y[N],r[N];
int sum;
inline void citire()
{
for(int i=1; i<10; ++i)
{
scanf("%d",&c[i]);
sum+=c[i];
}
if(sum&1)
{
for(int i=1; i<10; ++i)
{
if(c[i])
{
++c[i];
break;
}
}
}
}
inline void mul(int a[N],int b[N],int c[N])
{
memset(c,0,N*sizeof(int));
int i,j,t;
for(i=1; i<=a[0]; ++i)
{
t=0;
for(j=1; j<=b[0] || t; ++j,t/=10)
{
t+=c[i+j-1]+a[i]*b[j];
c[i+j-1]=t%10;
}
if(i+j-2>c[0])
c[0]=i+j-2;
}
}
inline void rezolva()
{
int i1;
if(sum&1)
i1=((sum+1)>>1)+1;
else
i1=(sum>>1)+1;
int i2=i1;
int sum1=0;
int aux;
int cn=0;
for(int i=9; i>0; --i)
{
if(c[i]==0)
continue;
if(sum1&1)
{
if(c[i]&1)
{
aux=c[i]>>1;
++aux;
if(i1<i2)
{
for(int j=0; j<aux; ++j)
y[--i2]=i;
for(int j=1; j<aux; ++j)
x[--i1]=i;
}
else
{
for(int j=1; j<aux; ++j)
y[--i2]=i;
for(int j=0; j<aux; ++j)
x[--i1]=i;
}
}
else
{
aux=c[i]>>1;
if(i1<i2)
{
for(int j=0; j<=aux; ++j)
y[--i2]=i;
for(int j=1; j<aux; ++j)
x[--i1]=i;
}
else
{
for(int j=1; j<aux; ++j)
y[--i2]=i;
for(int j=0; j<=aux; ++j)
x[--i1]=i;
}
}
}
else
{
if(c[i]&1)
{
aux=c[i]>>1;
if(cn==0)
{
for(int j=0; j<=aux; ++j)
x[--i1]=i;
for(int j=0; j<aux; ++j)
y[--i2]=i;
}
else
{
for(int j=0; j<aux; ++j)
x[--i1]=i;
for(int j=0; j<=aux; ++j)
y[--i2]=i;
}
cn^=1;
}
else
{
aux=c[i]>>1;
for(int j=0; j<aux; ++j)
x[--i1]=y[--i2]=i;
}
}
sum1+=c[i];
}
if(sum&1)
x[1]=0;
if(sum&1)
x[0]=y[0]=((sum+1)>>1);
else
x[0]=y[0]=(sum>>1);
mul(x,y,r);
if(sum&1)
{
for(int i=r[0]; i>1; --i)
printf("%d",r[i]);
}
else
{
for(int i=r[0]; i>0; --i)
printf("%d",r[i]);
}
printf("\n");
}
int main()
{
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
citire();
rezolva();
return 0;
}