Cod sursa(job #2014266)

Utilizator SCatalinStanciu Catalin SCatalin Data 23 august 2017 12:49:25
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.89 kb
#include <cstdio>
#include <cstring>
#include <ctime>

using namespace std;

int An[1<<16];
int Ap[1<<16];

int Bn[1<<16];
int Bp[1<<16];


#define A(i) (((i)<0)?(An[-(i)]):(Ap[(i)]))
#define B(i) (((i)<0)?(Bn[-(i)]):(Bp[(i)]))
#define abs(x) ((x)<0 ? -(x) : (x))
#define li -50000
#define ls 50000

int main()
{
    int i,j,n,m,k;
    freopen ("diamant.in","r",stdin);
    freopen ("diamant.out","w",stdout);

    scanf ("%d%d%d",&n,&m,&k);
    if (abs(k)>ls)
    {
        printf ("0\n");
        return 0;
    }
    A(0)=1;
    for (i=1; i<=n; i++)
        for (j=1; j<=m; j++)
        {
            memcpy(Bn,An,sizeof(An));
            memcpy(Bp,Ap,sizeof(Bp));
            for (int t=ls; t>=li; t--)
            {
                A(t)=B(t-i*j)+B(t)+B(t+i*j);
                A(t)%=10000;
            }
        }
    printf ("%d\n",A(k));
    return 0;

}