Cod sursa(job #66449)

Utilizator sealTudose Vlad seal Data 18 iunie 2007 17:34:24
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.92 kb
#include<stdio.h>
#define Xm 88201
#define Mod 10000
int Nr[2][Xm],n,m,x;

void read()
{
    freopen("diamant.in","r",stdin);
    scanf("%d%d%d",&n,&m,&x);
}

int solve()
{
    int i,j,k,c,p,cm=0;

    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            cm+=i*j;
            
    if(x>cm || x<-cm)
        return 0;

    Nr[0][cm]=1; c=1; p=0;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
        {
            for(k=0;k<=cm<<1;++k)
            {
                Nr[c][k]=Nr[p][k];
                if(k-i*j>=0)
                    Nr[c][k]+=Nr[p][k-i*j];
                if(k+i*j<=cm<<1)
                    Nr[c][k]+=Nr[p][k+i*j];
                Nr[c][k]%=Mod;
            }
            c^=1; p^=1;
        }
    return Nr[p][x+cm];
}

void write(int s)
{
    freopen("diamant.out","w",stdout);
    printf("%d\n",s);
}

int main()
{
    read();
    write(solve());
    return 0;
}