Cod sursa(job #487632)

Utilizator marta_diannaFII Filimon Marta Diana marta_dianna Data 25 septembrie 2010 21:05:21
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include<fstream>
#include<algorithm>
#define NMAX 1002

using namespace std;

int aux[NMAX], fr[10], a[NMAX], b[NMAX], c[NMAX+NMAX], n;

ifstream f("prod.in");
ofstream g("prod.out");	

int comp()
{
	int j=1;
	if (a[0]<b[0]) return 1;
	if (b[0]<a[0]) return 2;
	while (a[j]==b[j] && j<a[0]) ++j;
	if (a[j]<b[j]) return 1;
	else return 2;
}
	
void construieste()
{
	int i, j;
	for (i=1; i<10; ++i) f>>fr[i];
	for (i=9; i>0; --i)
		for (j=0; j<fr[i]; ++j) aux[++n]=i;
	for (i=1; i<=n; ++i)
		if (comp()==1) a[++a[0]]=aux[i];
			else b[++b[0]]=aux[i];
}

void inverseaza()
{
	int p=1, u=a[0], aux;
	while (p<u)
	{
		swap(a[p],a[u]);
		++p;--u;
	}
	p=1;u=b[0];
	while (p<u)
	{
		swap(b[p],b[u]);
		++p;--u;
	}
}

void inmulteste()
{
	int i, j, r=0;
	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)
	{
		c[i]+=r;
		r=c[i]/10;
		c[i]%=10;
	}
	if (r>0) c[++c[0]]=r;
}

void scrie()
{
	int i;
	for(i=c[0]; i>0; --i) g<<c[i];
	g<<"\n";
}

int main()
{
	construieste();
	inverseaza();
	inmulteste();
	scrie();
	f.close();
	g.close();
	return 0;
}