Cod sursa(job #1764703)

Utilizator Burbon13Burbon13 Burbon13 Data 25 septembrie 2016 20:18:28
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <cstdio>
#include <bitset>
#include <vector>

using namespace std;

const int nmx = 45000;
const int mod = 10000;
int mij = nmx + 500;

int n,m,x;
int dp1[90069],dp2[90069];

void citire()
{
    scanf("%d %d %d", &n, &m, &x);
}

void dinamica()
{
    dp1[nmx] = 1;

    int st = nmx, dr = nmx;

    for(int i = 1; i <= n; ++i)
        for(int j = 1; j <= m; ++j)
        {
            st -= i * j;
            dr += i * j;

            for(int p = st; p <= dr; ++p)
                if(dp1[p])
                {
                    dp2[p-i*j] = (dp2[p-i*j] +dp1[p]) % mod;
                    dp2[p+i*j] = (dp2[p+i*j] +dp1[p]) % mod;
                }

            for(int t = 1; t <= 90000; ++t)
                dp1[t] = dp2[t];
        }
}

int main()
{
    freopen("diamant.in", "r", stdin);
    freopen("diamant.out", "w", stdout);
    citire();
    if(x > nmx || x < - nmx)
    {
        printf("0\n");
        return 0;
    }
    dinamica();
    printf("%d\n", dp1[x+nmx]);
    return 0;
}