Cod sursa(job #466941)

Utilizator dushmiMihai-Alexandru Dusmanu dushmi Data 27 iunie 2010 23:05:09
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<cstdio>
typedef int Huge[5001];
Huge C,AP,BP;
int f[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]);
    printf("\n");
}
void rastorn(Huge A)
{
    int st=0;
    int dr=A[0]+1;
    int aux;
    while(++st<=--dr)
    {
        aux=A[st];
        A[st]=A[dr];
        A[dr]=aux;
    }
}
void make()
{
    int m=0;
    for(int i=9;i>0;i--)
    {
        while(AP[0]<BP[0] && f[i])
            AP[++AP[0]]=i, f[i]--;
        while(BP[0]<AP[0] && f[i])
            BP[++BP[0]]=i, f[i]--;
        for(int j=1;j<=f[i]/2;j++)
            AP[++AP[0]]=BP[++BP[0]]=i;
        if(f[i]%2==1)
        {
            if(m=='a')
                BP[++BP[0]]=i;
            else if(m=='b')
                AP[++AP[0]]=i;
            else
                AP[++AP[0]]=i, m='a';
        }
    }
    rastorn(AP);
    rastorn(BP);
    prod(C,AP,BP);
    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]);
    make();
    return 0;
}