Cod sursa(job #1551178)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 15 decembrie 2015 11:39:45
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 45050
#define MOD 10000

using namespace std;

int n, m, x, a[MAXN], b[MAXN];
int k = 0;
inline int abs(int x) { return x < 0 ? -x : x; }
void solve()
{
    a[0] = 1;
    b[0] = 1;
    for (int i = 1; i <= n; i++)
        for (int j = 1; j <= m; j++)
    {
        int val = i*j;
        for (int ind = k; ind >= -k; ind--)
        {
            int upper = abs(ind+val);
            int lower = abs(ind);
            b[upper] = (b[upper] + a[lower])%MOD;
        }
        b[0] = (b[0] + a[val])%MOD;
        k += val;
        memcpy(a, b, sizeof(a));
    }
}

int main()
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);

    scanf("%d %d %d", &n, &m, &x);
    x = abs(x);
    solve();
    if (x <= k)
        printf("%d", a[x]);
    else
        printf("0");
    return 0;
}