Cod sursa(job #893203)

Utilizator timicsIoana Tamas timics Data 26 februarie 2013 13:45:18
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.85 kb
#include<stdio.h>
int X,M,N,s[3][100000];
int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    scanf("%d%d%d",&N,&M,&X);
    if((X<-N*M*(M+1)*(N+1)/4)||(X>N*M*(M+1)*(N+1)/4))
    {
        printf("%d",0);
        return 0;
    }
    X=X+N*M*(M+1)*(N+1)/4;
    s[0][0]=1;
    s[0][1]=1;
    s[0][2]=1;
    for(int i=2;i<=N*M;++i)
    {
        for(int j=0;j<=N*M*(M+1)*(N+1)/2;++j)
        {
            s[1][j]=s[0][j];
            if(j>=((i-1)/M +1)*((i-1)%M+1))
                s[1][j]=(s[1][j]+s[0][j-((i-1)/M +1)*((i-1)%M+1)])%10000;
            if(j>=2*((i-1)/M +1)*((i-1)%M+1)>=0)
                s[1][j]=(s[1][j]+s[0][j-2*((i-1)/M +1)*((i-1)%M+1)])%10000;
        }
        for(int j=0;j<=X;++j)
        {
            s[0][j]=s[1][j];
        }
    }
    printf("%d",s[0][X]);
    return 0;
}