Cod sursa(job #2025847)

Utilizator Ruxandra985Nanu Ruxandra Laura Ruxandra985 Data 23 septembrie 2017 12:53:16
Problema Prod Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.57 kb
#include <cstdio>

using namespace std;
int f[10];
int nr1[1001];
int nr2[1001];
int v[2][1001],s;
void mutadr (int v[]){
    int i;
    for (i=v[0]-1;i>0;i--)
        v[i+1]=v[i];
}
void mutast (int v[]){
    int i;
    for (i=2;i<=v[0];i++)
        v[i-1]=v[i];
}
void prod (int k){
    int i,t=0,j;
    v[k][0]=nr1[0]+nr2[0]-1;
    for (i=1;i<=nr1[0]+nr2[0];i++)
        v[k][i]=0;
    for (i=1;i<=nr1[0];i++)
        for (j=1;j<=nr2[0];j++)
            v[k][i+j-1]+=nr1[i]*nr2[j];
    for (i=1;i<=v[k][0];i++){
        v[k][i]+=t;
        t=v[k][i]/10;
        v[k][i]%=10;
    }
    if (t)
        v[k][++v[k][0]]=t;
}
void compar (){
    int st=-1,cf1,cf2,i;
    if (v[0][0]>v[1][0])
        st=0;
    else if (v[0][0]<v[1][0])
        st=1;
    else for (i=v[0][0];i>0;i--){
        if (v[0][i]>v[1][i])
            st=0;
        else if (v[0][i]<v[1][i])
            st=1;
        if (st!=-1)
            break;
    }
    if (st==0){
        if (s>1){
            cf1=nr2[1];
            cf2=nr1[1];
            mutast (nr1);
            mutadr (nr1);
            nr1[1]=cf1;
            mutast (nr2);
            mutadr (nr2);
            nr2[1]=cf2;
        }
        else {
            cf1=nr2[1];
            mutadr (nr1);
            nr1[1]=cf1;
            mutast(nr2);
            nr2[0]--;
            nr1[0]++;
        }
    }
}
int main()
{
    FILE *fin=fopen ("prod.in","r");
    FILE *fout=fopen ("prod.out","w");
    int i,cf1,cf2;
    s=0;
    for (i=1;i<=9;i++){
        fscanf (fin,"%d",&f[i]);
        s+=f[i];
    }
    i=9;
    while (s>=2){
        nr1[0]++;
        nr2[0]++;
        while (f[i]==0)
            i--;
        cf1=i;
        f[i]--;
        while (f[i]==0)
            i--;
        cf2=i;
        f[i]--;
        if (cf1==cf2){
            mutadr (nr1);
            mutadr (nr2);
            nr1[1]=cf1;
            nr2[1]=cf2;
            s-=2;
            continue;
        }
        mutadr (nr1);
        mutadr (nr2);
        nr1[1]=cf1;
        nr2[1]=cf2;
        prod (0);
        nr1[1]=cf2;
        nr2[1]=cf1;
        prod (1);
        compar ();
        s-=2;
    }
    if (s){
        while (f[i]==0)
            i--;
        cf1=i;
        nr1[0]++;
        mutadr(nr1);
        nr1[1]=cf1;
        prod (0);
        mutast(nr1);
        nr1[0]--;
        nr2[0]++;
        mutadr (nr2);
        nr2[1]=cf1;
        prod (1);
        compar ();
    }
    prod (0);
    for (i=v[0][0];i>0;i--)
        fprintf (fout,"%d",v[0][i]);
    return 0;
}