Cod sursa(job #466673)

Utilizator eudanipEugenie Daniel Posdarascu eudanip Data 27 iunie 2010 13:02:15
Problema Prod Scor 0
Compilator cpp Status done
Runda Stelele Informaticii 2010, clasele X-XII, Ziua 1 Marime 1.57 kb
#include<stdio.h>
#include<algorithm>
using namespace std;

int b[10007],a[10007],aux[30007],sol[10007];
int f[45];

void inmul(int val)
{
    int t=0,i;
    for(i=1;i<=b[0] || t;i++)
    {
        aux[i]=b[i]*val+t;
        t=aux[i]/10;
        aux[i]%=10;
    }
    aux[0]=i-1;
}

void add()
{
    int i,t=0;
    for(i=1;i<=aux[0] || t;i++)
    {
        if(i>aux[0])
            aux[i]=0;
        sol[i]+=aux[i]+t;
        if(sol[i]>9)
        {
            sol[i]-=10;
            t=1;
        }
        else
            t=0;
    }
    if(i-1>sol[0])
        sol[0]=i-1;
}

int main ()
{
    int i,j;
    freopen("prod.in","r",stdin);
    freopen("prod.out","w",stdout);
    for(i=1;i<=9;i++)
        scanf("%d",&f[i]);
    int poz=1;
    for(i=9;i>=1;i--)
        while(f[i])
        {
            if(a[0]>b[0])
                b[++b[0]]=i;
            else
                if(a[0]<b[0])
                    a[++a[0]]=i;
                else
                {
                    if(a[poz]<=b[poz])
                        a[++a[0]]=i;
                    else
                        b[++b[0]]=i;
                }
            f[i]--;
            while(poz<a[0] && poz<b[0] && a[poz]==b[poz])
                poz--;
        }
    sort(a+1,a+a[0]+1);
    sort(b+1,b+b[0]+1);
    for(i=1;i<=a[0];i++)
    {
        inmul(a[i]);
        // mut cu a[0]-i
        for(j=aux[0];j>=1;j--)
            aux[j+i-1]=aux[j];
        for(j=i-1;j>=1;j--)
            aux[j]=0;
        aux[0]+=i-1;
        add();
    }
    for(i=sol[0];i>=1;i--)
        printf("%d",sol[i]);
    printf("\n");
    return 0;
}