Cod sursa(job #52417)

Utilizator mariusdrgdragus marius mariusdrg Data 18 aprilie 2007 20:37:53
Problema Diamant Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<stdio.h>

const int mod = 10000;
const int maxn2 = 21;
const int maxn = 44100 * 2;

int aux[maxn + 1];
int s[maxn + 1];
int i;
int j;
int k;
int n;
int m;
int x;


int modul(int x)
{
        if (x < 0) return x * (-1);
        return x;
}

int main()
{
        freopen("diamant.in","r",stdin);
        freopen("diamant.out","w",stdout);
        scanf("%d %d %d",&n,&m,&x);
        if (modul(x) > n * (n + 1) / 2 * m * (m + 1) / 2 )
        {
                printf("0\n");
                return 0;
        }
        int x1 = x;
        x = 1;
        s[44100] = 1;
        for(i = 1;i <= n; ++i)
        {
                for(j = 1;j <= m; ++j)
                {
                        for(k = 44100 - i * (i + 1) / 2 * m * (m + 1) / 2;k <= 44100 + i * (i + 1) / 2 * m * (m + 1) / 2; ++k)
                        {
                                aux[k] = (aux[k] + s[k])%mod;
                                aux[k + i * j] = (aux[k + i * j] + s[k])%mod;
                                if (k > i * j)aux[k - i * j] = (aux[k - i * j] + s[k])%mod;
                        }
                        for(k = 44100 - i * (i + 1) / 2 * m * (m + 1) / 2;k <= 44100 + i * (i + 1) / 2 * m * (m + 1) / 2; ++k)
                        {
                                s[k] = aux[k];
                                aux[k] = 0;
                        }

                }
                
        }
        printf("%d\n",s[44100 + x1]);


        
        return 0;
}