Cod sursa(job #923395)

Utilizator crazzytudTudor Popa crazzytud Data 23 martie 2013 14:12:13
Problema Diamant Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include<fstream>
using namespace std;

ifstream in("diamant.in");
ofstream out("diamant.out");

const int MOD =  10000;
int d[44101],*nr;
int v[401];
int ad[44101],*adaugat;
int sc[44101],*scazut;
int main()
{
    int n,m,x,u=0,i,j;
    in >> n >> m >> x;
    nr = d + 22050;
    adaugat = ad + 22050;
    scazut = sc + 22050;
    if(x>44101 || x<-44101)
    {
        out<<"0\n";
        return 0;
    }


    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        {
            v[++u]=i*j;
            //suma+=v[u];
        }
    int dr=0,st=0;
    nr[0]=1;
    for(i=1;i<=n*m;i++)
    {
        for(j=dr;j>=st;--j)
            adaugat[j+v[i]] = nr[j];
        for(j=st;j<=dr;++j)
            scazut[j-v[i]] = nr[j];
        st-=v[i];
        dr+=v[i];

        for(j=st;j<=dr;j++)
        {
            nr[j] += (adaugat[j] + scazut[j])%MOD;
            nr[j] %= MOD;
            adaugat[j] = scazut[j] = 0;
        }
    }


    out<<nr[x]<<"\n";
    return 0;

}