Cod sursa(job #780846)

Utilizator visanrVisan Radu visanr Data 22 august 2012 11:36:48
Problema Patrate2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <cstdlib>
#include <cmath>
using namespace std;


#define base 100000

int A[10000], B[10000], C[10000], N;

void Inm(int *A, int val)
{
     int i, T = 0;
     for(i = 1; i <= A[0]; i++)
     {
           A[i] = A[i] * val + T;
           T = A[i] / base;
           A[i] %= base;
     }
     while(T) A[++A[0]] = T % base, T /= base;
}

void InmHuge()
{
     int i, j, T = 0;
     C[0] = A[0] + B[0] - 1;
     for(i = 1; i <= A[0] + B[0]; i++) C[i] = 0;
     for(i = 1; i <= A[0]; i++)
           for(j = 1; j <= B[0]; j++)
                 C[i + j - 1] += A[i] * B[j];
     for(i = 1; i <= C[0]; i++)
     {
           T = (C[i] += T) / base;
           C[i] %= base;
     }
     if(T) C[++C[0]] = T;
}

int main()
{
    freopen("patrate2.in", "r", stdin);
    freopen("patrate2.out", "w", stdout);
    int i;
    scanf("%i", &N);
    A[0] = A[1] = 1;
    B[0] = B[1] = 1;
    for(i = 2; i <= N; i++) Inm(A, i);
    for(i = 1; i <= N * N; i++) Inm(B, 2);
    InmHuge();
    printf("%d", C[C[0]]);
    for(i = C[0] - 1; i; i--) printf("%05d", C[i]);
    return 0;
}