Cod sursa(job #469855)

Utilizator darrenRares Buhai darren Data 9 iulie 2010 12:26:55
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<fstream>
using namespace std;

void inm(int a[], int b[], int c[])
{
	for (int i = 1; i <= a[0]; ++i)
		for (int j = 1; j <= b[0]; ++j)
		{
			c[i + j - 1] += a[i] * b[j];
			c[0] = i + j - 1;
			if (c[i + j - 1] > 9)
			{
				c[i + j] += c[i + j - 1] / 10;
				c[i + j - 1] %= 10;
				c[0] = i + j;
			}
		}
	while (c[c[0]] > 9)
	{
		c[++c[0]] += c[c[0] - 1] / 10;
		c[c[0] - 1] %= 10;
	}
}
bool cmp(int* a, int* b)
{
	if (a[0] != b[0])
		return a[0] > b[0];
	for (int i = 1; i <= a[0]; ++i)
		if (a[i] != b[i])
			return a[i] > b[i];
	return 0;
}

int c[10], r[3][3001];
int main()
{
	ifstream fin("prod.in");
	ofstream fout("prod.out");
	for (int i = 1; i <= 9; ++i)
		fin >> c[i];
	
	int act = 0;
	for (int i = 9; i >= 1; --i)
		while (c[i]--)
		{
			act = cmp(r[0], r[1]);
			r[act][++r[act][0]] = i;
		}
	reverse(r[0] + 1, r[0] + r[0][0] + 1);
	reverse(r[1] + 1, r[1] + r[1][0] + 1);
	inm(r[0], r[1], r[2]);
	
	for (int i = r[2][0]; i >= 1; --i)
		fout << r[2][i];
}