Cod sursa(job #45424)

Utilizator devilkindSavin Tiberiu devilkind Data 1 aprilie 2007 15:02:18
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.81 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;
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",noun[x]);
    else fprintf(g,"%ld",noup[x]);
fclose(f);
fclose(g);
return 0;
}