Cod sursa(job #1503773)

Utilizator StarGold2Emanuel Nrx StarGold2 Data 16 octombrie 2015 22:17:12
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>

#define DIM 100000
using namespace std;

int N, M, K, value;
int D[DIM], A[DIM];
#define D (D + 50000)
#define A (A + 50000)

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

    scanf ("%d %d %d", &N, &M, &K);
    value = N * (N + 1) * M * (M + 1) / 4;

    if (K > value || K < -value)
    {
        printf ("0\n");
        return 0;
    }

    D[0] = 1;

    for (int i = 1; i <= N; i ++)
        for (int j = 1; j <= M; j ++)
        {
            for (int k = -value; k <= value; k ++)
                if (D[k])
                {
                    A[k] += D[k];
                    A[k + i*j] += D[k];
                    A[k - i*j] += D[k];
                }

            for (int k = -value; k <= value; k ++)
            {
                D[k] = A[k];
                A[k] = 0;
            }
        }

    printf ("%d\n", D[K]);

    fclose (stdin );
    fclose (stdout);

    return 0;
}