Pagini recente » Cod sursa (job #1564054) | Cod sursa (job #2330782) | Cod sursa (job #1354794) | Cod sursa (job #2634032) | Cod sursa (job #267351)
Cod sursa(job #267351)
#include<stdio.h>
#include<string.h>
#define Mod 10000
#define Nmax 50003
FILE*f=fopen("diamant.in","r");
FILE*g=fopen("diamant.out","w");
int u[Nmax], viz1[Nmax], viz2[Nmax];
int nr[Nmax],n,m,s;
int a[405];
int k;
void read()
{
fscanf(f,"%d%d%d",&n,&m,&s);
int i,j;
for(i=1;i<=n;++i)
for(j=1;j<=m;++j) a[++k] = i*j;
}
void dinamica()
{
int i,j;
u[0]=1;
nr[0]=1;
for(i=1;i<=k;++i)
{
memset(viz1,0,sizeof(viz1));
memset(viz2,0,sizeof(viz2));
for(j=0;j<=Nmax;++j)
if(u[j]==1)
{
if(a[i] + j < Nmax && !viz1[j])
{
viz1[a[i]+j]=1;
if(u[j+a[i]]) nr[j+a[i]]=(nr[j+a[i]] + nr[j])%Mod;
else nr[j+a[i]]=nr[j];
u[j+a[i]] = 1;
}
if(j-a[i]>=0 && !viz2[j])
{
viz2[j-a[i]] = 1;
if(u[j-a[i]]==1) nr[j-a[i]] = (nr[j-a[i]] + nr[j])%Mod;
else nr[j-a[i]] = nr[j];
u[j-a[i]] = 1;
}
}
}
}
int main()
{
read();
dinamica();
if(s<0) s=-s;
if(s>=Nmax) fprintf(g,"0\n");
else fprintf(g,"%d\n",nr[s]);
return 0;
}