Cod sursa(job #2083811)

Utilizator felixiPuscasu Felix felixi Data 8 decembrie 2017 10:11:45
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("diamant.in");
ofstream out("diamant.out");

const int NMAX = 500;
const int VMAX = 500;
const int ADAG = NMAX * VMAX;
const int MOD  = 10000;

int d[2][2*VMAX*NMAX + 5];
int N, M, v[NMAX+2], ind;
long long X;

int main()
{
    in >> N >> M >> X;
    for( int i = 1;  i <= N;  ++i ) for( int j = 1;  j <= M;  ++j ) {
        v[++ind] = i*j;
    }
    int st = 0, dr = 0;
    d[0][ ADAG + 0 ] = 1;
    int lev = 1;
    for( int i = 1;  i <= ind;  ++i, lev ^= 1 ) {
        memset( d[lev], 0, sizeof(d[lev]) );
        for( int j = st - v[i];  j <= dr + v[i];  ++j ) {
            d[lev][ADAG + j] = d[lev^1][ADAG + j - v[i]] + d[lev^1][ADAG + j + v[i]] + d[lev^1][ADAG + j];
            d[lev][ADAG + j] %= MOD;
        }
        st -= v[i];
        dr += v[i];
    }
    if( X < st || X > dr ) X = 0;
    else X = d[lev^1][ADAG + X];
    out << X << '\n';
    return 0;
}