Cod sursa(job #35209)

Utilizator raula_sanChis Raoul raula_san Data 21 martie 2007 21:50:20
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
#include <cstring>

#define dim 65536

int N, M, K;
int A[2][dim<<1];

long X, S;

void mod( int &x )
{
	 x -= x >= 10000 ? 10000 : 0;
}

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

	scanf("%d %d %ld", &N, &M, &X);

	int i, j;
	long k;

	for(i=1; i<=N; ++i)
			 for(j=1; j<=M; ++j)
					  S += i * j;

    if( X > S )
    {
        printf("0");
        return 0;
    }

	A[0][dim] = 1;

	for(i=1; i<=N; ++i)
			 for(j=1; j<=M; ++j)
			 {
					  ++ K;
					  for(k=S; k>=-S; --k)
					  {
						A[K&1][k+dim] = A[(K-1)&1][k+dim] + A[(K-1)&1][k-i*j+dim] + A[(K-1)&1][k+i*j+dim];
						mod(A[K&1][k+dim]);
					  }
					  memset(A[(K-1)&1], 0, sizeof(A[(K-1)&1]));
			 }

	printf("%d", A[(N*M)&1][X+dim]);

	fclose(stdin);
    fclose(stdout);

	return 0;
}