Cod sursa(job #1828975)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 14 decembrie 2016 10:01:12
Problema Sarpe Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.3 kb
#include <cstdio>

#define MAXN 1009

int a[MAXN], b[MAXN], c[MAXN*MAXN];

/*

#define MAXN 6

int n, ans, v[2*MAXN];
bool viz[2*MAXN];

inline bool ok(int a, int b){
    return (a==b-1);
}

void bkt(int p){
    if(p==2*n){
        int i=0;
        while((i<2*n)&&((v[i]==2*n-1)||((i!=0)&&(i!=n)&&(ok(v[i], v[i-1])))||((i!=n-1)&&(i!=2*n-1)&&(ok(v[i], v[i+1])))||((i<n)&&(ok(v[i], v[i+n])))||((i>=n)&&(ok(v[i], v[i-n]))))) i++;
        ans+=(i==2*n);
    }else{
        for(int i=0; i<2*n; i++){
            if(!viz[i]){
                viz[i]=1;
                v[p]=i;
                bkt(p+1);
                viz[i]=0;
            }
        }
    }
}
*/

int main(){
    FILE *fin, *fout;
    fin=fopen("sarpe.in", "r");
    fout=fopen("sarpe.out", "w");

    /*for(n=1; n<=MAXN; n++){
        ans=0;
        bkt(0);
        fprintf(fout, "%d\n", ans);
    }*/

    char ch=fgetc(fin);
    while(ch!='\n'){
        a[++a[0]]=ch-'0';
        ch=fgetc(fin);
    }

    for(int i=1, j=a[0]; i<j; i++, j--){
        int aux=a[i];
        a[i]=a[j];
        a[j]=aux;
    }

    if((a[0]==1)&&(a[1]==1)) fprintf(fout, "2\n");
    else if((a[0]==1)&&(a[1]==2)) fprintf(fout, "8\n");
    else{
        for(int i=0; i<=a[0]; i++)
            b[i]=a[i];
        b[1]--;
        int i=1;
        while(b[i]<0){
            b[i]+=10;
            i++;
            b[i]--;
        }
        while(b[b[0]]==0) b[0]--;

        for(i=1; i<=a[0]; i++)
            for(int j=1; j<=b[0]; j++)
                c[i+j-1]+=a[i]*b[j];

        c[0]=a[0]+b[0]-1;
        i=1;
        int tr=0;
        while((i<=c[0])||(tr)){
            tr+=c[i];
            c[i]=tr%10;
            tr/=10;
            i++;
        }
        i--;
        if(i>c[0])
            c[0]=i;

        i=1;
        tr=0;
        while((i<=c[0])||(tr)){
            tr+=2*c[i];
            c[i]=tr%10;
            tr/=10;
            i++;
        }
        i--;
        if(i>c[0])
            c[0]=i;

        c[1]+=4;
        i=1;
        while(c[i]>10){
            c[i]-=10;
            i++;
            c[i]++;
        }

        for(int i=c[0]; i>0; i--)
            fputc(c[i]+'0', fout);
        fputc('\n', fout);
    }

    fclose(fin);
    fclose(fout);
    return 0;
}