Cod sursa(job #2021725)

Utilizator Mircea_DonciuDonciu Mircea Mircea_Donciu Data 14 septembrie 2017 15:52:34
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.98 kb
#include <cstdio>

using namespace std;

const int MX=44100;
const int MOD=10000;

int n,m,i,j,k,x,crt,crt2;
int D[2][2*MX+5];

int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);

    scanf("%d%d%d",&n,&m,&x);

    if(x<-MX || x>MX)
    {
        printf("0\n");
        return 0;
    }

    D[0][MX]=1;
    for(i=1; i<=n; ++i)
        for(j=1; j<=m; ++j)
        {
            crt=(m*(i-1)+j)&1;
            crt2=crt^1;

            for(k=0; k<=2*MX; ++k)
            {
                D[crt][k]=D[crt2][k];
                if(k>=i*j)
                {
                    D[crt][k]+=D[crt2][k-i*j];
                    D[crt][k]-=MOD*(D[crt][k]>=MOD);
                }
                if(k+i*j<=2*MX)
                {
                    D[crt][k]+=D[crt2][k+i*j];
                    D[crt][k]-=MOD*(D[crt][k]>=MOD);
                }
            }
        }

    printf("%d\n",D[crt][x+MX]);
    return 0;
}