Cod sursa(job #1037623)

Utilizator donydony2009FMI - Donisan George donydony2009 Data 20 noiembrie 2013 15:09:29
Problema Prod Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.21 kb
#include<fstream>
#define NR_CIFRE 1501
using namespace std;
int v[10],Result_Prod[2][1500],No1_len=0,No2_len=0,DOIT=0;
void mul(int A[], int B[])
{
      int i, j, t, C[NR_CIFRE];
      memset(C, 0, sizeof(C));
      for (i = No1_len; i >= 1; i--)
      {
              for (t=0, j=No2_len; j >= 1 || t; j--, t/=10)
                      C[i+j]=(t+=C[i+j]+A[i]*B[j])%10;
              if (No1_len -i+ No2_len- j-1 > C[0]) C[0] = i+No2_len - j-1;
      }
      memcpy(A, C, sizeof(C));
}
int MakeNo(int s)
{
	int i,j=9,Alternate=1;
	for(i=1;i<=s;i++)
	{
		while(v[j]==0)
			j--;
		v[j]--;
		if(i==s&&DOIT)
			Alternate=(Alternate==1)?(0):(1);
		if(i==s-1&&!DOIT)
			Alternate=(Alternate==1)?(0):(1);
		if(Alternate)
		{
			No1_len++;
			Result_Prod[0][No1_len]=j;
			Alternate=0;
		}
		else
		{
			No2_len++;
			Result_Prod[1][No2_len]=j;
			Alternate=1;
		}
	}
	mul(Result_Prod[0],Result_Prod[1]);
}
int main(void)
{
	int i,s=0,First=0;
	ifstream f("prod.in");
	ofstream g("prod.out");
	for(i=1;i<=9;i++)
	{
		f>>v[i];
		s+=v[i];
	}
	if(s%2==1)
		DOIT=1;
	MakeNo(s);
	i=0;
	for(i=1;i<=s;i++)
		if(Result_Prod[0][i]!=0||First)
		{
			g<<Result_Prod[0][i];
			First=1;
		}
}