Cod sursa(job #1494980)

Utilizator LucianTLucian Trepteanu LucianT Data 2 octombrie 2015 10:13:27
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.82 kb
#include <cstdio>
#define maxN 100005
#define MOD 10000
#include <cstring>
using namespace std;
int s,d,i,j,k,m,n,a[100000],cal,b[100000],x;
int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);
    scanf("%d %d %d",&n,&m,&x);
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
        cal+=i*j;
    if(x>cal || x<-cal)
    {
        printf("0");
        return 0;
    }
    a[cal]=b[cal]=1;
    s=d=cal;
    for(i=1;i<=n;i++)
        for(j=1;j<=m;j++)
    {
        for(k=d-i*j;k<=s+i*j;k++)
        {
            if(k+i*j <= cal * 2)
                b[k]=(b[k]+a[k+i*j])%MOD;
            if(k-i*j >= 0)
                b[k]=(b[k]+a[k-i*j])%MOD;
        }
        d-=i*j;
        s+=i*j;
        memcpy(a,b,sizeof(b));
    }
    printf("%d ",a[x+cal]);
    return 0;
}