Cod sursa(job #1184122)

Utilizator andrettiAndretti Naiden andretti Data 11 mai 2014 14:27:56
Problema Diamant Scor 80
Compilator cpp Status done
Runda Teme Pregatire ACM Unibuc 2013 Semestrul 2 Marime 0.96 kb
#include<fstream>
#include<algorithm>
#include<cstring>
#define maxn 25
#define maxs 100005
#define MOD 10000
using namespace std;

ifstream fin("diamant.in");
ofstream fout("diamant.out");

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

int main()
{

    fin>>n>>m>>X;
    S=n*(n+1)*m*(m+1)/4;
    if(X>S || X<-S) {printf("0"); return 0;}

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

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

     fout<<s[X+S+1];

    fin.close();
    fout.close();
    return 0;
}