Cod sursa(job #1551173)

Utilizator TimitocArdelean Andrei Timotei Timitoc Data 15 decembrie 2015 11:33:24
Problema Diamant Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.79 kb
#include <iostream>
#include <cstdio>
#include <cstring>
#define MAXN 45000

using namespace std;

int n, m, x, a[MAXN], b[MAXN];
inline int abs(int x) { return x < 0 ? -x : x; }
void solve()
{
    int k = 0;
    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] += a[lower];
        }
        b[0] += a[val];
        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);
    solve();
    printf("%d", a[x]);

    return 0;
}