Cod sursa(job #496596)

Utilizator nusmaibunkeleviprofesor cicalescu nusmaibunkelevi Data 29 octombrie 2010 21:53:24
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.88 kb
#include<stdio.h>

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(){
freopen("prod.in","r",stdin);
freopen("prod.out","w",stdout);
int i,j,k;
for(i=1;i<10;++i) scanf("%d",&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) printf("%d",c[i]);
return 0;
}