Cod sursa(job #1184932)

Utilizator andrettiAndretti Naiden andretti Data 14 mai 2014 17:41:50
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include<stdio.h>
#define maxn 25
#define maxs 100005
#define MOD 10000
using namespace std;

int n,m,S,lim;
int s[maxs],aux[maxs],a[maxn][maxn];
int X;

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

    scanf("%d%d%d",&n,&m,&X);

    int i,j,k;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
      a[i][j]=i*j,S+=a[i][j];

    if(X>S || X<-S) {printf("0"); return 0;}

    s[S+1]=1; lim=2*S+1;
    for(i=1;i<=n;i++)
     for(j=1;j<=m;j++)
     {
         for(k=1;k<=lim;k++)
         {
             aux[k]=s[k];
             if(k-a[i][j]>0 && s[k-a[i][j]])
             {
                 aux[k]+=s[k-a[i][j]];
                 if(aux[k]>=MOD) aux[k]-=MOD;
             }

             if(k+a[i][j]<=2*S+1 && s[k+a[i][j]])
             {
                 aux[k]+=s[k+a[i][j]];
                 if(aux[k]>=MOD) aux[k]-=MOD;
             }
         }
         for(k=1;k<=lim;k++) s[k]=aux[k];
     }

     printf("%d",s[X+S+1]);

    fclose(stdin);
    fclose(stdout);
    return 0;
}