Cod sursa(job #466622)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 27 iunie 2010 12:13:11
Problema Prod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.15 kb
#include<cstdio>
typedef int Huge[1001];
Huge A,B,C;
int nr,f[11],a[11],b[11];
void prod(Huge Rez,Huge X,Huge Y)
{
    for(int i=1;i<=X[0];i++)
        for(int j=1;j<=Y[0];j++)
            Rez[i+j-1]+=X[i]*Y[j];
    Rez[0]=X[0]+Y[0]-1;
    int poz=0;
    int T=0;
    while(++poz<=Rez[0])
    {
        Rez[poz]+=T;
        T=Rez[poz]/10;
        Rez[poz]%=10;
    }
    while(T)
        Rez[++Rez[0]]=T%10, T/=10;
}
void afis(Huge A)
{
    for(int i=A[0];i>0;i--)
        printf("%d",A[i]);
}
int minim(int x,int y)
{
    return x<y?x:y;
}
void makeimpar()
{
    nr/=2;
    for(int i=9;i>0;i--)
    {
        a[i]=minim(f[i],nr);
        nr-=a[i];
        f[i]-=a[i];
    }
    for(int i=9;i>0;i--)
        b[i]=f[i];
    for(int i=1;i<10;i++)
        for(int j=1;j<=a[i];j++)
            A[++A[0]]=i;
    for(int i=1;i<10;i++)
        for(int j=1;j<=b[i];j++)
            B[++B[0]]=i;
    prod(C,A,B);
    afis(C);
}
int main()
{
    freopen("prod.in","r",stdin);
    freopen("prod.out","w",stdout);
    for(int i=1;i<10;i++)
        scanf("%d",&f[i]), nr+=f[i];
    if(nr%2==1)
        makeimpar();
    return 0;
}