Cod sursa(job #1146616)

Utilizator chiriacandrei25Chiriac Andrei chiriacandrei25 Data 19 martie 2014 10:01:38
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.96 kb
#include <cstdio>
#define MOD 10000

using namespace std;

int dp[2][45005],Vmax;

inline int Modul(int x)
{
    if(x<0)
        return -x;
    return x;
}

int main()
{
    int L,C,X,i,j,l,c,l1,l2;
    freopen ("diamant.in","r",stdin);
    freopen ("diamant.out","w",stdout);
    scanf("%d%d%d", &L,&C,&X);
    Vmax=C*L*(L+1)*(C+1)/4;
    X=Modul(X);
    if(X>Vmax)
        printf("0\n");
    else
    {
        dp[1][0]=dp[1][1]=1;
        for(i=2;i<=L*C;++i)
            for(j=0;j<=Vmax;++j)
            {
                l1=(i&1); l2=((i-1)&1);
                dp[l1][j]=dp[l2][j];
                l=i/C+1;
                if(i%C==0)
                    --l;
                c=i%C;
                if(!c)
                    c=C;
                dp[l1][j]=(dp[l1][j]+dp[l2][Modul(j-l*c)])%MOD;
                dp[l1][j]=(dp[l1][j]+dp[l2][j+l*c])%MOD;
            }
        printf("%d\n", dp[((L*C)&1)][X]);
    }
    return 0;
}