Pagini recente » Cod sursa (job #2691431) | Cod sursa (job #372830) | Cod sursa (job #3291053) | Cod sursa (job #2012886) | Cod sursa (job #466632)
Cod sursa(job #466632)
#include<stdio.h>
#include<algorithm>
#define p 10
#define NMAX 1111
using namespace std;
int v[3][NMAX],prod[NMAX],frec[10],ram[10];
void inm()
{
int i,j,t=0,aux=0;
for (i=1;i<=v[2][0];++i)
for (j=1;j<=v[1][0];++j)
prod[i+j-1]+=v[2][i]*v[1][j];
prod[0]=v[1][0]+v[2][0]-1;
for (i=1;i<=prod[0];++i)
{
aux=t;
t=(prod[i]+aux)/p;
prod[i]=(prod[i]+aux)%p;
}
while(t)
{
prod[++prod[0]]=t%p;
t=t/p;
}
}
int main()
{
int cont=0,x,j,k;
long long max=-1,x1,x2,i,aux=-1;
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
for (i=1;i<=9;++i)
{
scanf("%d",&frec[i]);
cont+=frec[i];
}
if (cont>20)
{
k=9;
while(k)
{
while(k && !frec[k])
--k;
if (k)
{
for (i=1;i<=frec[k]/2;++i)
v[1][++v[1][0]]=k;
for (i=1;i<=frec[k]/2;++i)
v[2][++v[2][0]]=k;
if (frec[k]%2==1)
ram[++ram[0]]=k;
frec[k]=0;
}
}
}
else
for (i=9;i>=1;--i)
for (j=1;j<=frec[i];++j)
ram[++ram[0]]=i;
x=(1<<ram[0])-1;
for (i=0;i<x;++i)
{
x1=0;x2=0;
for (j=0;j<ram[0];++j)
if ((long long)(1<<j)&i)
x1=(long long)x1*10+ram[j+1];
else
x2=(long long)x2*10+ram[j+1];
if (x1*x2>max)
{
max=x1*x2;
aux=i;
}
}
if (aux>-1)
{
for (j=0;j<ram[0];++j)
if ((long long)(1<<j)&aux)
v[1][++v[1][0]]=ram[j+1];
else
v[2][++v[2][0]]=ram[j+1];
}
sort(v[1]+1,v[1]+v[1][0]+1);
sort(v[2]+1,v[2]+v[2][0]+1);
inm();
for (i=prod[0];i>=1;--i)
printf("%d",prod[i]);
printf("\n");
return 0;
}