Cod sursa(job #51857)

Utilizator MARCELMIHALCEA MARICEL MARCEL Data 16 aprilie 2007 22:50:12
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.74 kb

#include<stdio.h>
#include<string.h>

#define modul( x ) ( x < 0 ? -x : x )


#define mod 10000
#define Nmax 88201

int a[Nmax],b[Nmax],*c1,*c2;

int main()
{

int n,m,i,j,l,k;
long S;

freopen("diamant.in","r",stdin);
freopen("diamant.out","w",stdout);

scanf("%d%d%ld",&n,&m,&S);

if( modul(S) > (Nmax>>1) ) { printf("0\n"); return 0; }


c1=a+(Nmax>>1);
c2=b+(Nmax>>1);


c1[0]=1;

for(i=1;i<=n;i++)
 for(j=1;j<=m;j++)
  {
  l=m*(m+1)*(i-1)*i/4+i*(j-1)*j/2;
  for( k=-l;k<=l;k++)
   if( c1[k] )
	{
	c2[k+i*j]+=c1[k];
	c2[k-i*j]+=c1[k];
	c2[k]+=c1[k];
	c2[k+i*j]%=mod;
	c2[k-i*j]%=mod;
	c2[k]%=mod;
	}

  memcpy(a,b,sizeof(b));
  memset(b,0,sizeof(b));

  }


  printf("%d\n",c1[S]);

return 0;
}