Cod sursa(job #922897)

Utilizator DEYDEY2Tudorica Andrei DEYDEY2 Data 22 martie 2013 18:18:06
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.77 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");
int X,M,N,s[2][90000],t[401],i,j;
int main()
{
    f>>N>>M>>X;
    if((X<-N*M*(M+1)*(N+1)/4)||(X>N*M*(M+1)*(N+1)/4)){g<<0<<"\n";return 0;}
    for(i=1;i<=M*N;++i) t[i]=t[i-1]+2*((i-1)/M +1)*((i-1)%M+1);
    X=X+N*M*(M+1)*(N+1)/4;
    s[0][0]=s[0][1]=s[0][2]=1;
    for(int i=2;i<=N*M;++i)
    {
        for(j=0;j<=min(t[i],X);++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))  s[1][j]=(s[1][j]+s[0][j-2*((i-1)/M +1)*((i-1)%M+1)])%10000;
        }
        for(j=0;j<=min(t[i],X);++j) s[0][j]=s[1][j];
    }
    g<<s[0][X];
    return 0;
}