Pagini recente » Cod sursa (job #49636) | Cod sursa (job #2490866) | Cod sursa (job #2483951) | Cod sursa (job #1030682) | Cod sursa (job #35220)
Cod sursa(job #35220)
#include <cstdio>
#include <cstring>
#define dim 44101
int N, M;
long X, S;
int Ap[dim], An[dim];
int Bp[dim], Bn[dim];
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;
}
Ap[0] = 1;
int n,m,p;
for(i=1; i<=N; ++i)
for(j=1; j<=M; ++j)
{
memcpy(Bp,Ap,sizeof(Ap));
memcpy(Bn,An,sizeof(An));
for(k=S; k>=-S; --k)
{
n = k<0 ? Bn[-k] : Bp[k];
m = k-i*j<0 ? Bn[-(k-i*j)] : Bp[k-i*j];
p = k+i*j<0 ? An[-(k+i*j)] : Bp[k+i*j];
if( k<0 ) An[-k] = n+m+p, An[-k]%=10000;
else Ap[k] = n+m+p, Ap[k]%=10000;
}
}
if( X<0 )
printf("%d",An[-X]);
else
printf("%d",Ap[X]);
fclose(stdin);
fclose(stdout);
return 0;
}