Cod sursa(job #1755215)

Utilizator antanaAntonia Boca antana Data 9 septembrie 2016 16:36:30
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.94 kb
#include <cstdio>
#define MOD 10000
#define MAXN 400
#define S 100000

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;i<=maxs;++i)
            if(s[i])
            {
                p[i+v[e]]=p[i+v[e]] + s[i];
                m[i-v[e]]=m[i-v[e]] + s[i];
            }

        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;
}