Cod sursa(job #1755212)

Utilizator antanaAntonia Boca antana Data 9 septembrie 2016 16:32:21
Problema Diamant Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.99 kb
#include <cstdio>
#define MOD 10000
#define MAXN 400
#define S 44100

int k, v[MAXN], s[S*2+1], p[S*2+1], m[S*2+1];

#define s (s+S)
#define p (p+S)
#define m (m+S)

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

    int n, mn, i, j, x, maxs, e;

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

    maxs=n*(n+1)*mn*(mn+1)/4;
    for(i=1;i<=n;++i)
        for(j=1;j<=mn;++j)
            v[k++]=i*j;

    s[0]=1;

    if(x < - maxs || x > maxs)
    {
        printf("0");
        return 0;
    }

    for(e=0;e<k;++e)
    {
        for(i=maxs-v[e];i>=-maxs;--i)
            if(s[i])
                p[i+v[e]]=(p[i+v[e]] + s[i])%MOD;

        for(i=-maxs+v[e];i<=maxs;++i)
            if(s[i])
                m[i-v[e]]=(m[i-v[e]] + s[i])%MOD;

        for(i=-maxs;i<=maxs;++i)
        {
            s[i]=(s[i]+p[i]+m[i])%MOD;
            p[i]=0;
            m[i]=0;
        }
    }

    printf("%d", s[x]);

    return 0;
}