Cod sursa(job #1193266)

Utilizator bghimisFMI Ghimis Bogdan bghimis Data 31 mai 2014 13:20:32
Problema Diamant Scor 100
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 0.93 kb
#include<stdio.h>
#include<algorithm>
#include<cstring>
#define maxs 100005
#define MOD 10000
using namespace std;

int n,m,S;
int s[maxs],aux[maxs];
long long X;

void read()
{
    scanf("%d%d",&n,&m);
    scanf("%lld",&X);
}

void solve()
{
    int L,R;
    S=n*(n+1)*m*(m+1)/4;
    if(X>S || X<-S) {printf("0"); return;}

    s[S+1]=1; L=R=S+1;
    for(int i=1;i<=n;i++)
     for(int j=1;j<=m;j++)
     {
         L-=i*j; R+=i*j;
         for(int k=L;k<=R;k++)
         {
             aux[k]=s[k];
             if(k-i*j>0) aux[k]=aux[k]+s[k-i*j];
             if(aux[k]>=MOD) aux[k]-=MOD;

             if(k+i*j<=2*S+1) aux[k]=aux[k]+s[k+i*j];
             if(aux[k]>=MOD) aux[k]-=MOD;
         }
         for(int k=L;k<=R;k++) s[k]=aux[k];
     }

     printf("%d",s[X+S+1]);
}

int main()
{
    freopen("diamant.in","r",stdin);
    freopen("diamant.out","w",stdout);

    read();
    solve();

    fclose(stdin);
    fclose(stdout);
    return 0;
}