Cod sursa(job #923803)

Utilizator roxannemafteiuMafteiu-Scai Roxana roxannemafteiu Data 23 martie 2013 20:57:11
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include<stdio.h>
#include<algorithm>
FILE *in,*out;
using namespace std;
int X,M,N,rasp[2][90000],v[401],i,j;
int main()
{
    in=fopen("diamant.in","rt");
    out=fopen("diamant.out","wt");
    fscanf(in,"%d%d%d",&N,&M,&X);
    if((X<-N*M*(M+1)*(N+1)/4)||(X>N*M*(M+1)*(N+1)/4))
    {
        fprintf(out,"0");
        fclose(in);
        fclose(out);
        return 0;
    }
    for(i=1;i<=M*N;++i)
    {
        v[i]=v[i-1]+2*((i-1)/M +1)*((i-1)%M+1);
    }
    X=X+N*M*(M+1)*(N+1)/4;
    rasp[0][0]=1;
    rasp[0][1]=1;
    rasp[0][2]=1;
    for( i=2;i<=N*M;++i)
    {
        for( j=0;j<=min(v[i],X);++j)
        {
            rasp[1][j]=rasp[0][j];
            if(j>=((i-1)/M +1)*((i-1)%M+1))
                rasp[1][j]=(rasp[1][j]+rasp[0][j-((i-1)/M +1)*((i-1)%M+1)])%10000;
            if(j>=2*((i-1)/M +1)*((i-1)%M+1))
                rasp[1][j]=(rasp[1][j]+rasp[0][j-2*((i-1)/M +1)*((i-1)%M+1)])%10000;
        }
        for(j=0;j<=min(v[i],X);++j)
        {
            rasp[0][j]=rasp[1][j];
        }
    }
    fprintf(out,"%d",rasp[0][X]);
    fclose(in);
    fclose(out);
    return 0;
}