Cod sursa(job #46932)

Utilizator razvi9Jurca Razvan razvi9 Data 3 aprilie 2007 11:09:07
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.75 kb
#include<stdio.h>
#include<string.h>
#define max(a,b) a<b?b:a
#define mod 10000
int n,m,a[50000],b[50000],i,j,c,k,y,x,xmax;
int main()
{freopen("diamant.in","r",stdin);
 freopen("diamant.out","w",stdout);
 scanf("%d %d %d",&n,&m,&c);
 c=c>0?c:-c;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
   k=k+i*j;
 if(k<c) {printf("0");fclose(stdout);return 0;}
 if(k==c){printf("1");fclose(stdout);return 0;}
 a[0]=1;
 for(i=1;i<=n;i++)
  for(j=1;j<=m;j++)
  {y=i*j;x=xmax;
   memcpy(b,a,sizeof(a));
   for(k=xmax;k>=0;k--)
    if(b[k]){ a[k+y]=(a[k+y]+b[k])%mod;x=max(x,k+y);}
   for(k=1;k<=y;k++) if(b[k]) a[y-k]=(a[y-k]+b[k])%mod;
   for(k=y;k<=xmax;k++) if(b[k]) a[k-y]=(a[k-y]+b[k])%mod;
   xmax=x;}
 printf("%d",a[c]);
 fclose(stdout);
 return 0;}