Cod sursa(job #829390)

Utilizator misinozzz zzz misino Data 5 decembrie 2012 11:54:42
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.08 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("prod.in");
ofstream g("prod.out");
int i,n,k,m,nr,a[20],x[4][1101],y[1101],z[1101];
void inmultire2(int a[],int b[],int c[])
{int i,t=0,j,n=a[0]-1+b[0];
for(i=1;i<=a[0];++i)
	for(j=1;j<=b[0];++j)
		c[i+j-1]+=a[i]*b[j];
for(i=1;i<=n||t;++i)
{c[i]+=t;
t=c[i]/10;
c[i]%=10;
}
c[0]=i-1;
}
void afiseaza(int x[])
{int i=x[0];
for(;i;--i)
	g<<x[i];
}
int cmp()
{
    if(x[1][0]<x[2][0])
    return 1;
    if(x[2][0]<x[1][0])
    return 2;
    for(int i=1; i<=x[1][0];++i)
    {
        if(x[1][i]<x[2][i])
        return 1;
        if(x[2][i]<x[1][i])
        return 2;
    }
    return 1;
}
int main()
{
    for(i=1;i<=9;++i)
    f>>a[i],nr+=a[i];
    x[1][0]=0;
    x[2][0]=0;
    i=9;
    while(nr)
    {
        --nr;
        while(a[i]==0&&i)
        --i;
        --a[i];
        k=cmp();
        x[k][0]++;
        x[k][x[k][0]]=i;
    }
    reverse(x[1]+1,x[1]+x[1][0]+1);
    reverse(x[2]+1,x[2]+x[2][0]+1);
    inmultire2(x[1],x[2],y);
    afiseaza(y);
    return 0;
}