Cod sursa(job #121437)

Utilizator cezar305Mr. Noname cezar305 Data 8 ianuarie 2008 19:00:50
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.78 kb
#include <stdio.h>

int v[100000],t[100000],x[1000],n,m,c,s;

int main()
{
	freopen("diamant.in","r",stdin);
	freopen("diamant.out","w",stdout);
	scanf("%d %d %d",&n,&m,&c);
	int i,j;
	for (i=1; i<=n; ++i) 
	{
		for (j=1; j<=m; ++j)
		{
			s+=i*j;
			x[0]++;
			x[x[0]]=i*j;
		}
	}
	if (c>s || c<-s)
	{
		printf("0");
		return 0;
	}
	v[s]=1;
	t[s]=1;
	for (i=1; i<=x[0]; ++i)
	{
		for (j=0; j<=2*s+1; ++j)
		{
			if (t[j]>0)
			{
				if (x[i]+j-s<=s && x[i]+j-s>=-s) 
				{
					v[x[i]+j-s]+=t[j-s];
					v[x[i]+j-s]=v[x[i]+j-s]%10000;
				}
				if (-x[i]+j-s<=s && -x[i]+j-s>=-s) 
				{
					v[-x[i]+j-s]+=t[j-s];
					v[-x[i]+j-s]=v[-x[i]+j-s]%10000;
				}
			}
		}
		for (j=0; j<=100000; ++j) t[j]=v[j];
	}
	printf("%d",v[c]%10000);
	return 0;
}