Cod sursa(job #535228)

Utilizator balakraz94abcd efgh balakraz94 Data 16 februarie 2011 21:30:28
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<cstdio>
#include<algorithm>
#define L 1002
using namespace std;

void citeste();
void rezolva();
void afiseaza();
int comp(int[], int[]);
void prod(int[], int[], int[]);

int f[10];
int a[L], b[L], p[L*2];

void citeste()
{
	freopen("prod.in","r",stdin);
     
	for(int i=1;i<=9;i++) scanf("%d",&f[i]);
	
	fclose(stdout);
}


void rezolva()
{
	for(int i=9;i>=1;i--)
	{
		while(f[i])
		{
		
		if(comp(a,b)>=0) b[0]++, b[b[0]]=i;
		else a[0]++, a[a[0]]=i;
		
        f[i]--;
		}
	}

    reverse(a+1,a+a[0]+1);
    reverse(b+1,b+b[0]+1);
	
	prod(a,b,p);

}



int comp(int x[], int y[])
{
	if(x[0]>y[0]) return 1;
	else if(y[0]>x[0]) return -1;
	
	for(int i=1;i<=x[0];i++) 
	{
		if(x[i]>y[i]) return 1;
		else if(y[i]>x[i]) return -1;
	}
	
	return 0;
}



void prod(int A[], int B[], int C[])
{
	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;
	}

}
	
	





void afiseaza()
{
	freopen("prod.out","w",stdout);
	
	for(int i=p[0]; i>=1;i--) printf("%d",p[i]);
	
	fclose(stdout);
}




int main()
{
	citeste();
	rezolva();
	afiseaza();
    
	return 0;
}