Pagini recente » Cod sursa (job #2175991) | Cod sursa (job #403809) | Cod sursa (job #1550819) | Cod sursa (job #3160139) | Cod sursa (job #466736)
Cod sursa(job #466736)
#include <cstdio>
#define infile "prod.in"
#define outfile "prod.out"
#define MaxN 1024
int cif[10];
int N,a[MaxN],b[MaxN],v[MaxN],rez[MaxN*2];
int sol[MaxN*2];
int A,B,V,S,R;
void read()
{
int i,j;
for(i=1;i<=9;i++)
{
scanf("%d",&cif[i]);
for(j=1;j<=cif[i];j++)
v[++N]=i;
}
}
void inmultire(int poz)
{
A=B=0;
int i,j,T=0;
for(i=1;i<=poz;i++)
a[++A]=v[i];
for(i=N;i>poz;i--)
b[++B]=v[i];
R=A+B-1;
for(i=1;i<=A+B;i++)
rez[i]=0;
for(i=1;i<=A;i++)
for(j=1;j<=B;j++)
rez[i+j-1]+=a[i]*b[j];
for(i=1;i<=R;i++)
{
T=(rez[i]+=T)/10;
rez[i]%=10;
}
if(T)
rez[++R]=T;
}
int verif()
{
if(R>S)
return 1;
if(R<S)
return 0;
int i=R;
while(i>0 && sol[i]==rez[i])
i--;
if(i==0)
return 0;
if(sol[i]<rez[i])
return 1;
return 0;
}
void compara()
{
if(verif())
{
int i;
for(i=1;i<=R;i++)
sol[i]=rez[i];
S=R;
}
}
void solve()
{
int i;
for(i=1;i<N;i++)
{
inmultire(i);
compara();
}
}
void write()
{
int i;
for(i=S;i>=1;i--)
printf("%d",sol[i]);
}
int main()
{
freopen(infile,"r",stdin);
freopen(outfile,"w",stdout);
read();
solve();
write();
fclose(stdin);
fclose(stdout);
return 0;
}