Cod sursa(job #1461522)

Utilizator BLz0rDospra Cristian BLz0r Data 15 iulie 2015 22:07:05
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
using namespace std;

#define Nmax 22
#define Smax 88202
#define Mod 10000

FILE *f = fopen ( "diamant.in", "r" );
FILE *g = fopen ( "diamant.out", "w" );

int D[2][Smax];
const int offset = 44100;

int main(){

    int X, N, M;

    fscanf ( f, "%d%d%d", &N, &M, &X );

    if ( X > offset || X < -offset ){
        fprintf ( g, "0" );
        return 0;
    }

    D[0][offset] = 1;

    int ind = 0;

    for ( int i = 1; i <= N; ++i ){
        for ( int j = 1; j <= M; ++j ){
            ind ^= 1;

            for ( int k = -offset; k <= offset; ++k ){
                int A = 0, B = 0, C = 0;

                if ( k-(i*j) >= -offset )
                    A = D[ind^1][offset+k-(i*j)];
                if ( k+(i*j) <= offset)
                    B = D[ind^1][offset+k+(i*j)];
                C = D[ind^1][offset+k];

                D[ind][offset+k] = A+B+C;
                D[ind][offset+k] %= Mod;
            }
        }
    }

    fprintf ( g, "%d", D[ind][offset+X] );

    return 0;
}