Cod sursa(job #2011522)

Utilizator robx12lnLinca Robert robx12ln Data 16 august 2017 15:43:34
Problema Patrate2 Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.42 kb
#include<cstdio>
#define MOD 10000
using namespace std;
FILE * fin = fopen( "patrate2.in", "r" );
FILE * fout = fopen( "patrate2.out", "w" );
int a[10005], b[10005], c[10005], t, n;
int main(){
    fscanf( fin, "%d", &n );
    a[0] = a[1] = 1;
    for( int i = 2; i <= n; i++ ){
        t = 0;
        for( int j = 1; j <= a[0]; j++ ){
            a[j] = a[j] * i + t;
            t = a[j] / MOD;
            a[j] %= MOD;
        }
        while( t != 0 ){
            a[ ++a[0] ] = t % MOD;
            t /= MOD;
        }
    }
    b[0] = b[1] = 1;
    for( int i = 1; i <= n * n; i++ ){
        t = 0;
        for( int j = 1; j <= b[0]; j++ ){
            b[j] = b[j] * 2 + t;
            t = b[j] / MOD;
            b[j] %= MOD;
        }
        while( t != 0 ){
            b[ ++b[0] ] = t % MOD;
            t /= MOD;
        }
    }
    t = 0;
    c[0] = a[0] + b[0] - 1;
    for( int i = 1; i <= a[0]; i++ ){
        for( int j = 1; j <= b[0]; j++ ){
            c[i + j - 1] = a[i] * b[j];
        }
    }
    for( int i = 1; i <= c[0]; i++ ){
        c[i] += t;
        t = c[i] / MOD;
        c[i] %= MOD;
    }
    while( t != 0 ){
        c[ ++c[0] ] = t % MOD;
        t /= MOD;
    }
    for( int i = c[0]; i >= 1; i-- ){
        if( i == c[0] ){
            fprintf( fout, "%d", c[i] );
        }else{
            fprintf( fout, "%04d", c[i] );
        }
    }
    return 0;
}