Cod sursa(job #466960)

Utilizator FlorianFlorian Marcu Florian Data 28 iunie 2010 08:50:49
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
using namespace std;
#include<fstream>
const int MAX_N = 2077;
int f[15];
int D[MAX_N], E[MAX_N], A[MAX_N], B[MAX_N], C[MAX_N];
inline bool comp(int c)
{
	int i;
	for(i = 1; i <= A[0]; ++i)
		if( A[i] * c < B[i] * c ) return true;
		else if( A[i] * c > B[i] * c) return false;
	return true;
}
void inmultire(int A[], int B[])
{
    int i, j, t;
    for (i = 1; i <= A[0]; ++i)
    {
        for (t = 0, j = 1; j <= B[0] || t; ++j, t /= 10)
            C[ i + j - 1] = ( t += C[i + j - 1] + A[i] * B[j] ) % 10;
		if (i + j - 2 > C[0]) C[0] = i + j - 2;
	}
}
int main()
{
	ifstream in("prod.in"); ofstream out("prod.out");
	int i, c;
	for(i = 1; i <= 9; ++i) in>>f[i];
	for(c = 9 ; c; --c)
		for(;f[c];--f[c])
		{
			if( A[0] == B[0] - 1 ) A[++A[0]] = c;
			else if( B[0] == A[0] - 1) B[++B[0]] = c;
			else
			{
				if( comp( c ) ) A[++A[0]] = c;
				else B[++B[0]] = c;
			}
		}
	D[0] = A[0];
	for(i = 1; i <= A[0]; ++i)
		D[i] = A[ A[0] - i + 1 ];
	E[0] = B[0];
	for(i = 1; i <= B[0]; ++i)
		E[i] = B[ B[0] - i + 1 ];
	inmultire(D, E);
	for(i = C[0]; i; --i) out<<C[i];
	out<<"\n";
	return 0;
}