Cod sursa(job #498786)

Utilizator alexrusuRusu Alexandru alexrusu Data 6 noiembrie 2010 09:09:44
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include<fstream.h>

ifstream fin("prod.in");
ofstream fout("prod.out");

int n,m,ct[10],v[1001],a[501],b[501],c[1001];

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

int main()
{
	int i,j,k;
	for(i=1;i<10;++i)  
		fin>>ct[i]; 
	for(i=9;i>=0;--i) 
		for(j=1;j<=ct[i];++j) 
			v[++n]=i;
	
	m=n/2;
	for(i=1;i<=2*m&&a[i/2]==b[i/2];i+=2) 
	{ 
		a[0]++,a[a[0]]=v[i]; 
		b[0]++,b[b[0]]=v[i+1]; 
	} 
	for(;i<=2*m;i+=2) 
	{ 
		a[0]++,a[a[0]]=v[i+1]; 
		b[0]++,b[b[0]]=v[i]; 
	}
	
	if(n>2*m)
		b[0]++,b[b[0]]=v[i];
	if(a[0]<b[0])
	{
		for(i=b[0];i>1;--i)
		a[i]=a[i-1];
		a[1]=0;
		a[0]=b[0];
	} 
	prod(); 
	for(i=c[0];i;--i) fout<<c[i];
		
	fin.close();
	fout.close();
	return 0;
}