Cod sursa(job #3003109)

Utilizator cezarinfoTulceanu Cezar cezarinfo Data 15 martie 2023 14:43:18
Problema Diamant Scor 60
Compilator cpp-64 Status done
Runda Arhiva de probleme Marime 0.96 kb
#include<cstdio>
using namespace std;
FILE*in=fopen("diamant.in","r");
FILE*out=fopen("diamant.out","w");
const int MOD=10000,NMAX=22,CMAX=88210;
int n,m,i,j,x;
int mat[NMAX][NMAX][2*CMAX];
bool bo[NMAX][NMAX][2*CMAX];
int fun(int a, int b, int c)
{
    int am=a;
    int bm=b;
    if(bo[a][b][c+CMAX]==1)
    {
        return mat[a][b][c+CMAX];
    }
    int c1,c2,c3;
    c1=c-a*b;
    c2=c;
    c3=c+a*b;
    if(b==1)
    {
        if(a==1)
        {
            if(c==-1||c==0||c==1)
            {
                return 1;
            }
            else
            {
                return 0;
            }
        }
        else
        {
            b=m;
            a--;
        }
    }
    else
    {
        b--;
    }
    int g=(fun(a,b,c1)+fun(a,b,c2)+fun(a,b,c3))%MOD;
    bo[am][bm][c+CMAX]=1;
    mat[am][bm][c+CMAX]=g;
    return g;
}
int main()
{
    fscanf(in,"%d%d%d",&n,&m,&x);
    fprintf(out,"%d",fun(n,m,x));
}