Cod sursa(job #2245364)

Utilizator marinaoprOprea Marina marinaopr Data 25 septembrie 2018 10:07:33
Problema Prod Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.96 kb
#include <stdio.h>

#define NMAX 1005

using namespace std;

FILE *fin=fopen("prod.in","r"); FILE *fout=fopen("prod.out","w");

int Cif[10],Sum,j,i,A[NMAX],B[NMAX],Rez[NMAX*NMAX],Total[NMAX*NMAX],ok;
long long int Prod,T;

void adun()
{
    int Sum,T,i;

    if(Rez[0]<Total[0])
    {
        for(i=Rez[0]; i<=Total[0]; ++i) Rez[i]=0;
        Rez[0]=Total[0];
    }
    else
    {
        for(i=Total[0]; i<=Rez[0]; ++i) Total[0]=0;
        Total[0]=Rez[0];
    }
    T=0;
    for(i=1; i<=Total[0]; ++i)
    {
        Sum=Rez[i]+Total[i]+T;
        Total[i]=Sum%10;
        T=Sum/10;
    }
    while(T>0) {Total[++Total[0]]=T%10; T/=10;}
    for(i=1; i<=Rez[0]; ++i) Rez[i]=0;
}

int main()
{
    for(i=1; i<=9; ++i) {fscanf(fin,"%d",&Cif[i]); Sum+=Cif[i];}
    if(Sum%2==0)
    {
        i=9;
        A[0]=B[0]=Sum/2;
        ok=0;
        for(j=A[0]; j>=1; --j,ok=1-ok)
            if(ok==0)
            {
                while(Cif[i]==0) --i;
                A[j]=i; --Cif[i];
                while(Cif[i]==0) --i;
                B[j]=i; --Cif[i];
            }
            else
            {
                while(Cif[i]==0) --i;
                B[j]=i; --Cif[i];
                while(Cif[i]==0) --i;
                A[j]=i; --Cif[i];
            }
    }
    else
    {
        i=9;
        A[0]=Sum/2+1; B[0]=Sum/2;
        for(j=A[0]; j>=2; --j)
        {
            while(Cif[i]==0) --i;
            B[j-1]=i; --Cif[i];
            while(Cif[i]==0) --i;
            A[j]=i; --Cif[i];
        }
        while(Cif[i]==0) --i;
        A[1]=i;
    }

    for(i=1; i<=B[0]; ++i)
    {
        T=0;
        for(j=1; j<=A[0]; ++j)
        {
            Prod=1LL*A[j]*B[i]+T;
            Rez[i+j-1]=1LL*Prod%10;
            T=Prod/10;
        }
        Rez[0]=i+A[0]-1;
        while(T>0) {Rez[++Rez[0]]=T%10; T/=10;}
        adun();
    }
    for(i=Total[0]; i>=1; --i) fprintf(fout,"%d",Total[i]);

    return 0;
}