Cod sursa(job #45427)

Utilizator devilkindSavin Tiberiu devilkind Data 1 aprilie 2007 15:07:00
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.87 kb
#include <stdio.h>
#include <string.h>
#define XMAX 50000

FILE *f = fopen("diamant.in","rt"), *g = fopen("diamant.out","wt");

long int oldp[XMAX],oldn[XMAX],noup[XMAX],noun[XMAX];
long int i,j,k,n,m,x,max;


long int old(long int x)
{
if (x<0) return oldn[-x];
return oldp[x];
}

#define ls -45000
#define ld 45000

int main()
{
fscanf(f,"%ld %ld %ld",&n,&m,&x);
k=0;
oldp[0]=1;
if ((x>XMAX)||(-x>XMAX)) {fprintf(g,"0\n");return 0;}
for (i=1;i<=n;i++)
    for (j=1;j<=m;j++)
        {
        for (k=ls;k<=ld;k++)
		 if (k>=0) {noup[k]=old(k-i*j)+old(k)+old(k+i*j);noup[k]%=10000;}
		   else {noun[-k]=old(k-i*j)+old(k)+old(k+i*j);noun[-k]%=10000;}
        memcpy(oldp,noup,sizeof(oldp));
        memcpy(oldn,noun,sizeof(oldp));
        }
if (x<0) fprintf(g,"%ld\n",noun[-x]);
    else fprintf(g,"%ld\n",noup[x]);
fclose(f);
fclose(g);
return 0;
}