Cod sursa(job #464233)

Utilizator andrei.dAndrei Diaconeasa andrei.d Data 19 iunie 2010 14:11:36
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm>
#include <vector>

using namespace std;

#define file_in "diamant.in"
#define file_out "diamant.out"

#define nmax 110100

int a[nmax];
int b[nmax];
int n,m,X;

void citire()
{
    freopen(file_in,"r",stdin);
    freopen(file_out,"w",stdout);

    scanf("%d %d %d", &n, &m, &X);
}

inline int abs(int a ) { return a>=0?a:-a; }

void solve()
{
    int lim,i,j,k;
    lim=n*(n+1)*m*(m+1)/4;
    //printf("%d\n", lim);
    if (X<0)
         X*=-1;
    if (X>lim)
    {
        printf("0\n");
        exit(0);
    }

    a[0]=1;
    for (i=1;i<=n;++i)
         for (j=1;j<=m;++j)
         {
             for (k=lim;k>=0;--k)
                  b[k]=(a[abs(k-i*j)]+a[k]+a[k+i*j])%10000;
             memcpy(a,b,sizeof(a));
         }
     printf("%d", a[X]);

}

int main()
{
    citire();
    solve();

    fclose(stdin);
    fclose(stdout);

    return 0;
}