Cod sursa(job #1457727)

Utilizator GeiGeiGeorge Cioroiu GeiGei Data 4 iulie 2015 12:24:28
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include <cstdio>
#include <iostream>
#include <vector>
#include <set>
#include <cmath>
#include <climits>
#include <list>
#include <iomanip>
#include <cstdlib>

using namespace std;

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

    ios_base::sync_with_stdio(false);
    cin.tie(0);

    int n, m, x;
    cin >> n >> m >> x;
    int vm = 0;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            vm += i * j;
        }
    }
    if (x > vm || x < -vm) {
        cout << 0;
        return 0;
    }
    int* v = (int*)malloc((2 * vm + 1) * sizeof(int));
    int* vn = (int*)malloc((2 * vm + 1) * sizeof(int));
    for (int i = 0; i <= 2 * vm; i++) {
        v[i] = 0;
    }
    v[vm] = 1;
    for (int i = 1; i <= n; i++) {
        for (int j = 1; j <= m; j++) {
            for (int k = 0; k <= 2 * vm; k++) {
                vn[k] = v[k];
            }
            for (int k = 0; k <= 2 * vm; k++) {
                if (v[k] != 0) {
                    vn[k - i * j] += v[k];
                    vn[k + i * j] += v[k];
                }
            }
            for (int k = 0; k <= 2 * vm; k++) {
                v[k] = vn[k];
            }
        }
    }
    cout << v[x];

    return 0;
}