Cod sursa(job #1318158)

Utilizator laurageorgescuLaura Georgescu laurageorgescu Data 15 ianuarie 2015 18:05:17
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<cstdio>

using namespace std;

FILE *fin = fopen( "diamant.in", "r" ), *fout = fopen( "diamant.out", "w" );

const int kmax = 44100;
const int mod = 10000;
int d[ 2 ][ 2 * kmax + 1 ];

int main() {
    int n, m, x, ind, s;
    fscanf( fin, "%d%d%d", &n, &m, &x );
    d[ 0 ][ kmax ] = 1;
    ind = 1;
    for( int i = 1; i <= n; ++ i ) {
        for( int j = 1; j <= m; ++ j ) {
            for( int k = 0; k <= 2 * kmax; ++ k ) {
                d[ ind ][ k ] = d[ 1 - ind ][ k ];
                if ( k - i * j >= 0 ) {
                    d[ ind ][ k ] += d[ 1 - ind ][ k - i * j ];
                }
                if ( k + i * j <= 2 * kmax ) {
                    d[ ind ][ k ] += d[ 1 - ind ][ k + i * j ];
                }

                d[ ind ][ k ] %= mod;
            }
            ind = 1 - ind;
        }
    }
    s = (m * (m + 1) / 2) * (n * (n + 1) / 2);
    if ( x < -s || x > s ) {
        fprintf( fout, "0\n" );
    } else {
        fprintf( fout, "%d\n", d[ 1 - ind ][ x + kmax ] );
    }
    fclose( fin );
    fclose( fout );
    return 0;
}