Cod sursa(job #282570)

Utilizator marcelcodreaCodrea Marcel marcelcodrea Data 17 martie 2009 22:19:04
Problema Diamant Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.5 kb
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MOD 10000
int n;
int i;
int vs;
int v[100003];
int v2[100003];
int no[100003];
int no2[100003];
int j;
int max;
int pr;
int k;
int mij;
int m;
long long x;

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

        scanf("%d %d %lld",&n, &m, &x);
        mij = 50000;
        for(i = 1; i <= n; i++)
         for(j = 1; j <= m; j++)
             max += i * j;
        if (abs(x) > max)
             {
             printf("0\n");
             return 0;
             }

        no[mij] = 1;
        v[mij] = 1;
        for(i = 1; i <= n; i++)
         for(j = 1; j <= m; j++)
            {
                    int val = i * j;
                    for(k = 100000; k >=0; k--)
                    {
                        if (no[k] != 0)
                        {
                         no2[k] = 1;
                         v2[k] = v[k];
                        }
                        if (no[k])
                         {
                           v2[k + val] = (v[k + val] + v[k]) % MOD;
                           no2[k + val] = 1;
                           v2[k - val] = (v[k - val] + v[k]) % MOD;
                           no2[k - val] = 1;
                         }
                    }
                    for(k = 100000; k >=0; k--,no[k] = no2[k], no2[k] = 0,v[k] = v2[k]);


            }
        printf("%d", v[mij+x]);
        return 0;
}