Cod sursa(job #1394244)

Utilizator AlexNiuclaeNiculae Alexandru Vlad AlexNiuclae Data 20 martie 2015 09:55:47
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.95 kb
#include <cstdio>
#include <cstring>

#define PLUS 45000
#define MOD 10000

using namespace std;

int n , m , x , i , j , k , sol , crt , total;

int A[2*PLUS] , aux[2*PLUS];

int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);

    scanf("%d %d %d", &n, &m, &x);

    for (i = 1; i <= n; ++i)
     for (j = 1; j <= m; ++j)
      sol += i * j;

    if (x < (-1) * sol || sol < x)
    {
        printf("0\n");
        return 0;
    }

    A[PLUS] = aux[PLUS] = 1;

    for (i = 1; i <= n; ++i)
     for (j = 1; j <= m; ++j)
     {
         crt = i * j; total += crt;

         for (k = -total + PLUS; k <= total + PLUS; ++k)
         {
             if (k + crt < 2*PLUS) aux[k] += A[k + crt];
             if (k - crt >= 0) aux[k] += A[k - crt];
             aux[k] %= MOD;
         }

         memcpy(A , aux , sizeof(aux));
     }

     printf("%d\n", A[x + PLUS]);


    return 0;
}