Cod sursa(job #467000)

Utilizator PavelRazvanPavel Razvan PavelRazvan Data 28 iunie 2010 10:45:37
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.67 kb
#include<algorithm>
using namespace std;

int a[15],b[5][1005];
inline bool comp ()
{
    if(b[1][0]>b[2][0])
        return 0;
    else if (b[1][0]<b[2][0])
            return 1;
    for(int i=1;i<=b[1][0];++i)
        if(b[1][i]>b[2][i])
            return 0;
        else if (b[1][i]<b[2][i])
            return 1;
    return 0;
}


void mul(int A[], int B[])
{
      int i, j, t, C[1005];
      memset(C, 0, sizeof(C));
      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;
      }
      memcpy(A, C, sizeof(C));
}

int main ()
{
    freopen("prod.in","r",stdin);
    freopen("prod.out","w",stdout);
    int i,j;
    for(i=1;i<=9;++i)
        scanf("%d",&a[i]);
    for(i=9;i>0;--i)
    {
        if(b[1][0]==0 && a[i]>0)
        {
            b[1][1]=i;
            ++b[1][0];
            --a[i];
        }
        if(b[2][0]==0 && a[i]>0)
        {
            b[2][1]=i;
            ++b[2][0];
            --a[i];break;
        }
    }
    for(i=9;i>0;--i)
        for(j=a[i];j>0;--j)
            if(comp())
                b[1][++b[1][0]]=i;
            else
                b[2][++b[2][0]]=i;


    int aux;
    for(i=1;i<=b[1][0]/2;++i)
    {
        aux=b[1][i];
        b[1][i]=b[1][b[1][0]-i+1];
        b[1][b[1][0]-i+1]=aux;
    }
    for(i=1;i<=b[2][0]/2;++i)
    {
        aux=b[2][i];
        b[2][i]=b[2][b[2][0]-i+1];
        b[2][b[2][0]-i+1]=aux;
    }


    mul(b[1],b[2]);
    for(i=b[1][0];i>0;--i)
        printf("%d",b[1][i]);
    return 0;
}