Cod sursa(job #2763552)

Utilizator DragosC1Dragos DragosC1 Data 14 iulie 2021 22:02:31
Problema Diamant Scor 90
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <fstream>
#include <unordered_map>
#include <iostream>
#include <algorithm>
using namespace std;

int n, m, x;
short dp[2][88201];
int rez;

void read() {
    ifstream f("diamant.in");
    f >> n >> m >> x;
    f.close();
}

void solve() {
    int i, j, sum = 0, k;

    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++) 
            sum += i * j;
    x = abs(x);
    if (x > sum)
        return;

    dp[1][sum] = 1;
    for (i = 1; i <= n; i++)
        for (j = 1; j <= m; j++) {
            for (k = 0; k <= 2 * sum; k++)
                dp[0][k] = dp[1][k];
            for (k = 0; k <= 2 * sum; k++) {
                if (k >= i * j)
                    dp[1][k] += dp[0][k - i * j];
                if (k <= 2 * sum - i * j)
                    dp[1][k] += dp[0][k + i * j];   
                dp[1][k] %= 10000;
            }
        }

    rez = dp[1][x + sum];
}

void output() {
    ofstream g("diamant.out");
    g << rez;
    g.close();
}

int main() {
    read();
    solve();
    output();
    return 0;
}