Cod sursa(job #486541)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 21 septembrie 2010 22:02:48
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include<fstream.h>
#define NMAX 1002

int fr[10], a[NMAX], b[NMAX], c[NMAX], i, nc, j, na, nb, T;

void invers1()
{
	int p=1, u=na,aux;
	while (p<u)
	{
		aux=a[p];
		a[p]=a[u];
		a[u]=aux;
		++p;--u;
	}
}

void invers2()
{
	int p=1, u=nb, aux;
	while (p<u)
	{
		aux=b[p];
		b[p]=b[u];
		b[u]=aux;
		++p;--u;
	}
}

int main()
{
	ifstream f("prod.in");
	ofstream g("prod.out");
	
	for(i=1; i<10; ++i) f>>fr[i];
	
	for(i=9; i>0; --i)
		for(j=1; j<=fr[i]; ++j) c[++nc]=i;
	
	a[1]=c[1];na=1;
	b[1]=c[2];b[2]=c[3];nb=2;
	
	c[1]=0;c[2]=0;c[3]=0;
	for(i=4; i<=nc; ++i)
	{
		if (i%2==0) a[++na]=c[i];
			else b[++nb]=c[i];
		c[i]=0;
	}
	invers1();
	invers2();
	a[0]=na;b[0]=nb;
	c[0]=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];
	for (i=1;i<=c[0];i++)
    { 
		T=(c[i]+=T)/10;
		c[i]%=10;
    }
	if (T) c[++c[0]]=T;
	
	for(i=c[0]; i>0; --i) g<<c[i];
	g<<"\n";
	f.close();
	g.close();
	return 0;
}