Cod sursa(job #496844)

Utilizator ionicaion ionica Data 30 octombrie 2010 22:24:01
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include<fstream.h>
int fr[10],x[1000],a[504],b[504],c[1011];


int mai_mic_egal(int a[],int b[])
{
	if(a[0]<b[0])return 1;
	if(a[0]>b[0])return 0;
	int i;
	for(i=a[0];i>=1;i--)
		{if(a[i]<b[i])return 1;
	     if(a[i]>b[i])return 0;
		}
	return 1;
}
	

void prod()
{
	int i,j,r,k;
	k=a[0]+b[0]-1;
	for(i=1;i<=a[0];i++)
		for(j=1;j<=b[0];j++)
			c[i+j-1]+=a[i]*b[j];
	
	r=0;
	for(i=1;i<=k;i++)
	{   c[i]=c[i]+r;
		r=c[i]/10;
		c[i]=c[i]%10;
	}
	if(r>0){k++;c[k]=r;}
	c[0]=k;
}


void invers(int a[])
{int u,v,aux;
u=1;v=a[0];
while(u<v)
{
	aux=a[u];
	a[u]=a[v];
	a[v]=aux;
	u++;v--;
}
}
//int mai_mic_egal(int[],int []);
int main()
{

	ifstream f("prod.in");
	
	ofstream g("prod.out");
	int i,n,j;
	for(i=1;i<=9;i++)f>>fr[i];
	n=0;
	for(i=9;i>=1;i--)
		for(j=1;j<=fr[i];j++)
			x[++n]=i;
	
	a[0]=0;b[0]=0;
	
	for(i=1;i<=n;i++)
		if(mai_mic_egal(a,b))
		{a[0]++;a[a[0]]=x[i];}
		else{b[0]++;b[b[0]]=x[i];}
	
		invers(a);
		invers(b);
 prod();
	for(i=c[0];i>=1;i--)g<<c[i];
	g<<'\n';
	
}