Cod sursa(job #2203748)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 13 mai 2018 01:10:07
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#include <algorithm>

const int MAX_X = 44100;
const int MOD = 10000;
int dp[2][MAX_X + 1000];

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);
  if (X >= MAX_X)
    printf("0\n");
  else {
    dp[0][0] = 1;
    int k = n * m;
    for (int i = 1; i <= k; i++) {
      int val;
      if (i % n == 0)
        val = (i / n) * n;
      else
        val = (i / n + 1) * (i % n);
      for (int j = 0; j + val <= MAX_X; j++) {
        int y = std::abs(j - val);
        if (j + val >= MAX_X || y >= MAX_X)
          break;
        dp[i % 2][j] = (dp[(i - 1) % 2][j] + dp[(i - 1) % 2][j + val] + dp[(i - 1) % 2][y]) % MOD;
      }
    }
    printf("%d\n", dp[(n * m) % 2][X]);
  }

  fclose(stdin);
  fclose(stdout);

  return 0;
}