Cod sursa(job #2831660)

Utilizator Alex_tz307Lorintz Alexandru Alex_tz307 Data 11 ianuarie 2022 20:45:44
Problema Diamant Scor 100
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 1.02 kb
#include <bits/stdc++.h>

using namespace std;

ifstream fin("diamant.in");
ofstream fout("diamant.out");

const int mod = 1e4;

void addSelf(int &x, const int &y) {
  x += y;
  if (x >= mod) {
    x -= mod;
  }
}

void testCase() {
  int n, m, x;
  fin >> n >> m >> x;
  int N = n * (n + 1) / 2 * m * (m + 1) / 2;
  if (abs(N) < abs(x)) {
    fout << "0\n";
    return;
  }
  vector<int> dp(1 + 2 * N);
  dp[N] = 1;
  for (int i = 1; i <= n; ++i) {
    for (int j = 1; j <= m; ++j) {
      vector<int> newDp(1 + 2 * N);
      for (int sum = 0; sum <= 2 * N; ++sum) {
        newDp[sum] = dp[sum];
        if (sum - i * j >= 0) {
          addSelf(newDp[sum], dp[sum - i * j]);
        }
        if (sum + i * j <= 2 * N) {
          addSelf(newDp[sum], dp[sum + i * j]);
        }
      }
      swap(dp, newDp);
    }
  }
  fout << dp[x + N] << '\n';
}

int main() {
  int tests = 1;
  for (int tc = 0; tc < tests; ++tc) {
    testCase();
  }
  fin.close();
  fout.close();
  return 0;
}