Cod sursa(job #1832733)

Utilizator rocandu16Badulescu Dan Andrei rocandu16 Data 20 decembrie 2016 20:38:01
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.86 kb
#include <cstdio>

FILE*f=fopen("diamant.in","r");
FILE*h=fopen("diamant.out","w");

int n,m,x,v[401],k,sum[250001],sumv[250001];

int main(){
    fscanf(f,"%d%d%d",&n,&m,&x);
    for ( int i=1;i<=n;++i )
        for ( int j=1;j<=m;++j )
            v[++k]=i*j;
    if ( x>n*(n+1)/2*m*(m+1)/2||x<-n*(n+1)/2*m*(m+1)/2 ){
        fprintf(h,"0");
        return 0;
    }
    sum[100000]=1;
    int smax=100000,smin=100000;
    for ( int i=1;i<=k;++i ){
        for ( int j=smax;j>=smin;--j )
            sumv[j]=sum[j];
        for ( int j=smax;j>=smin;--j ){
            if ( sumv[j] ){
                sum[j+v[i]]=(sumv[j]+sum[j+v[i]])%10000;
                sum[j-v[i]]=(sumv[j]+sum[j-v[i]])%10000;
            }
        }
        smax+=v[i];
        smin-=v[i];
    }
    //--sum[100000];
    fprintf(h,"%d\n",sum[x+100000]);
    return 0;
}