Pagini recente » Cod sursa (job #1642622) | Cod sursa (job #877777) | Cod sursa (job #563420) | Cod sursa (job #3180310) | Cod sursa (job #34453)
Cod sursa(job #34453)
#include <stdio.h>
#include <string.h>
#define infile "diamant.in"
#define outfile "diamant.out"
#define MOD 10000
#define LMAX 44105
FILE *fin,*fout;
int m,n,X;
int A[2][2*LMAX];
void update(int *A, int *B, int val)
{
memcpy(A,B,(2*LMAX-2)*sizeof(int));
for(int i=-LMAX;i<=LMAX;i++)
if(B[i+LMAX])
{
A[i+LMAX+val]+=B[i+LMAX];
if(A[i+LMAX+val]>=MOD)
A[i+LMAX+val]-=MOD;
A[i+LMAX-val]+=B[i+LMAX];
if(A[i+LMAX-val]>=MOD)
A[i+LMAX-val]-=MOD;
}
}
int solve()
{
int i,j,cur=0,prec=1;
for(i=0;i<=2*LMAX-2;i++)
A[0][i]=0;
A[0][LMAX]=1;
for(i=1;i<=m;i++)
for(j=1;j<=n;j++)
{
cur=!cur;
prec=!prec;
update(A[cur],A[prec],i*j);
}
return A[cur][LMAX+X];
}
int main()
{
int extrem;
fin=fopen(infile,"r");
fscanf(fin,"%d %d %d",&m,&n,&X);
fclose(fin);
fout=fopen(outfile,"w");
extrem=m*(m+1)/2 * n*(n+1)/2;
if(X>extrem || X<-extrem)
fprintf(fout,"0\n");
else
fprintf(fout,"%d\n",solve());
fclose(fout);
return 0;
}