Cod sursa(job #1445742)

Utilizator akaprosAna Kapros akapros Data 30 mai 2015 22:33:29
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <cstdio>
#include <algorithm>
#include <cstring>
#define Nmax 22
#define Smax 44100
#define mod 10000
using namespace std;
int n, m, x, i, j, k, sum;
int s[Smax * 2 + 5], S[Smax * 2 + 5];
int main()
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);
    scanf("%d %d %d", &n, &m, &x);
    s[Smax] = 1;  x += Smax;
    if (x >  2 * Smax || x < 0)
    {
        printf("0");
        return 0;
    }
    for (i = 1; i <= n ; ++ i)
    for (j = 1; j <= m ; ++ j)
    {
        memcpy(S, s, sizeof(s));

        sum += i * j;
        for (k = sum + Smax - (i * j); k >= 0; -- k)
        if (s[k])
        S[k + (i * j)] = (S[k + (i * j)] + s[k]) % mod;
        for (k = i * j ; k <= sum + Smax; ++ k)
        if (s[k])
        S[k - (i * j)] = (S[k - (i * j)] + s[k]) % mod;
        memcpy(s, S, sizeof(S));
    }
    printf("%d", s[x]);
    return 0;
}