Cod sursa(job #1811461)

Utilizator eragon0502Dumitrescu Dragos eragon0502 Data 21 noiembrie 2016 11:37:43
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include <cstdio>

using namespace std;
const int N=45000;
int aux[2*N+1],auxp[2*N+1],auxm[2*N+1];
int *nr,*nrp,*nrm;
int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    int i,j,n,m,s=0,k,rez,x;
    scanf("%d %d %d",&n,&m,&rez);
    /*for(i=1;i<=n;++i)
    {
        for(j=1;j<=m;++j){
            printf("%d ",i*j);
            s+=(i*j);
            }
        printf("\n");
    }
    printf("%d",s);*/
    nr=aux+N;
    nrp=auxp+N;
    nrm=auxm+N;
    s=0;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
            s+=(i*j);
    nr[0]=1;
    for(i=1;i<=n;++i)
        for(j=1;j<=m;++j)
        {
            x=i*j;
            //for(k=-s;k<=s-x;++k)
            for(k=s-x;k>=-s;--k)
                nrp[k+x]+=nr[k];
            //for(k=s;k>=-s+x;--k)
            for(k=-s+x;k<=s;++k)
                nrm[k-x]+=nr[k];
            for(k=-s;k<=s;++k)
                {
                nr[k]+=(nrm[k]+nrp[k]);
                if(nr[k]>10000)
                    nr[k]-=10000;
                nrm[k]=0;
                nrp[k]=0;
                }
        }
   /* y=0;
    for(i=-s+rez;i<=s-rez;++i)
        {
            if(nrp[])
        }*/
    printf("%d",nr[rez]);
    return 0;
}