Cod sursa(job #1781567)

Utilizator ionanghelinaIonut Anghelina ionanghelina Data 16 octombrie 2016 23:22:34
Problema Patrate2 Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include<bits/stdc++.h>
#define baza 100000
using namespace std;
int n,aux[100015],v[100015],sol[100015];
void conversie(int x,int a[])
{
    int da=0;
    while(x)
    {
        a[++da]=x%baza;
        x/=baza;
    }
    a[0]=da;
}
void inmultire(int a[],int b[])
{
    int c[100005],t=0,i,j;
    memset(c,0,100005);
    for(i=1;i<=a[0];i++)
    {
        for(j=1;j<=b[0] || t;j++)
        {
            t=t+c[i+j-1]+a[i]*b[j];
            c[i+j-1]=t%baza;
            t/=baza;
        }
        if((i+j-2)>c[0]) c[0]=i+j-2;
    }
    memcpy(a,c,100000);
}
void scrie(int x)
{
    if(x<10) printf("0000%d",x);
        else
    if(x<100) printf("000%d",x);
        else
    if(x<1000) printf("00%d",x);
        else
    if(x<10000) printf("0%d",x);
        else
    printf("%d",x);
}
int main()
{
    freopen("patrate2.in","r",stdin);
    freopen("patrate2.out","w",stdout);
    scanf("%d",&n);
    aux[0]=1;
    aux[1]=2;
    sol[0]=1;
    sol[1]=1;
    for(int i=1;i<=(n*n);i++)
    {
        inmultire(sol,aux);
    }
   for(int i=1;i<=n;i++)
   {
       int i1=i;
       memset(v,0,100000);
       conversie(i1,v);
    inmultire(sol,v);
   }
    printf("%d",sol[sol[0]]);
    for(int i=sol[0]-1;i>=1;i--) scrie(sol[i]);
    printf("\n");
    return 0;
}