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