Cod sursa(job #2203742)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 13 mai 2018 00:53:30
Problema Diamant Scor 50
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.76 kb
#include <stdio.h>
#include <algorithm>

const int MAX_X = 50000;
const int MOD = 10000;
int dp[2][MAX_X];

int main() {
  freopen("diamant.in", "r", stdin);
  freopen("diamant.out", "w", stdout);
  int n, m, X;
  scanf("%d%d%d", &n, &m, &X);
  X = std::abs(X);
  dp[0][0] = 1;
  for (int i = 1; i <= n * m; i++)
    for (int j = 0; j <= MAX_X; j++) {
      int val;
      if (i % n == 0)
        val = (i / n) * n;
      else
        val = (i / n + 1) * (i % n);
      if (j + val >= MAX_X || std::abs(j - val) >= MAX_X)
        break;
      dp[i % 2][j] = (dp[(i - 1) % 2][j] + dp[(i - 1) % 2][j + val] + dp[(i - 1) % 2][std::abs(j - val)]) % MOD;
  }

  printf("%d\n", dp[(n * m) % 2][X]);
  fclose(stdin);
  fclose(stdout);

  return 0;
}