Cod sursa(job #498806)

Utilizator gabitzuGabriel Olaru gabitzu Data 6 noiembrie 2010 10:07:17
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#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';
}