Cod sursa(job #1811467)

Utilizator amaliarebAmalia Rebegea amaliareb Data 21 noiembrie 2016 11:41:52
Problema Diamant Scor 30
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.04 kb
#include <iostream>
#include <fstream>
#define Nmax 45000

using namespace std;
ifstream f("diamant.in");
ofstream g("diamant.out");
short int aux[2*Nmax+1], auxp[2*Nmax+1], auxm[2*Nmax+1],i,j,k,p,m,n,x,smax,val;
short int *nr, *nrp, *nrm;

int main()
{
    nr=aux+Nmax;
    nrp=auxp+Nmax;
    nrm=auxm+Nmax;
    f>>n>>m>>x;
    nr[0]=1;
    smax=n*(n+1)/2*m*(m+1)/2;
    for(i=1; i<=n; i++)
        for(j=1; j<=m; j++)
        {
            val=i*j;
            for(k=smax-val; k>=-smax; k--)
            {
                nrp[k+val]+=nr[k];
                if(nrp[k+val]>=10000) nrp[k+val]-=10000;
            }
            for(k=-smax+val; k<=smax; k++)
            {
                nrm[k-val]+=nr[k];
                if(nrm[k-val]>=10000) nrm[k-val]-=10000;
            }
            for(k=-smax; k<=smax; k++)
            {
                nr[k]+=nrm[k]; nr[k]+=nrp[k];
                nrm[k]=0; nrp[k]=0;
                if(nr[k]>=10000) nr[k]-=10000;
            }
        }
    if(x<=smax && x>=-smax) g<<nr[x]<<'\n';
    else g<<0<<'\n';
    return 0;
}