Cod sursa(job #2203747)

Utilizator Robert_VRVRobert Vadastreanu Robert_VRV Data 13 mai 2018 01:01:02
Problema Diamant Scor 70
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 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++)
      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);
        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;
}