Cod sursa(job #466618)

Utilizator tranbachhaiTran Bach Hai tranbachhai Data 27 iunie 2010 12:10:23
Problema Prod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.32 kb
#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 x,x1,x2,aux=-1,max=-1,i,j,k;
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
	
for (i=1;i<=9;++i)
	scanf("%d",&frec[i]);
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;
	}
}
x=(1<<ram[0])-1;
for (i=0;i<x;++i)
	{
		x1=0;x2=0;
		for (j=0;j<ram[0];++j)
			if ((1<<j)&i)
				x1=x1*10+ram[j+1];
			else
				x2=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 ((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]);

return 0;
}