Cod sursa(job #696106)

Utilizator Magnuscont cu nume gresit sau fals Magnus Data 28 februarie 2012 16:48:22
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>

const int N_MAX=20;
const int M_MAX=N_MAX*N_MAX*(N_MAX+1)*(N_MAX+1)/4;

int a[M_MAX*2+1],b[M_MAX*2+1];

#define a (a+M_MAX)
#define b (b+M_MAX)

int main()
{
    int n,m,x;

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

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

    if (x>M_MAX||x<-M_MAX)
    {
        printf("0\n");
        return 0;
    }

    a[0]=1;
    for (int i=1;i<=n;++i)
        for (int j=1;j<=m;++j)
        {
            for (int k=-M_MAX;k<=M_MAX;++k)
                b[k]=a[k];

            for (int k=-M_MAX;k<=M_MAX;++k)
            {
                if (k-i*j>=-M_MAX)
                    a[k]+=b[k-i*j];
                if (k+i*j<=M_MAX)
                    a[k]+=b[k+i*j];
                a[k]%=10000;
            }
        }

    printf("%d\n",a[x]);

    return 0;
}