Cod sursa(job #831438)

Utilizator ericptsStavarache Petru Eric ericpts Data 8 decembrie 2012 17:13:45
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include <cstdio>
using namespace std;
const int mod = 10000;
int obt[2][1<<17];
int query(int n,int m,int x)
{
    int i,j,k;
    const int offset = 50000;
    bool c =0;
    int c_off = 0;
    obt[1][offset]=1;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            c_off+=(i*j);
    if(c_off < x)
        return 0;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j,c^=1)
            for(k=-c_off;k<=c_off;++k)
            {
                obt[c][k+offset] = obt[!c][k+i*j + offset] + obt[!c][k + offset] + obt[!c][k-i*j + offset];
                obt[c][k+offset] %= mod;
            }
    return obt[c^1][x+offset];
}

int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    int n,m,x;
    scanf("%d %d %d",&n,&m,&x);
    if(x < 0)
        x=-x;
    printf("%d",query(n,m,x));
    return 0;
}