Cod sursa(job #425880)

Utilizator ilincaSorescu Ilinca ilinca Data 26 martie 2010 11:06:55
Problema Diamant Scor 100
Compilator cpp Status done
Runda Simulare CNITV 2 Marime 0.97 kb
#include <stdio.h>
#include <string.h>

#define pmax 50050
#define nmax 25
#define r 10000

int n, m, x, S, zero=50000, nr [pmax], sums [2] [2*pmax];


void prod ()
{
	int i, j;
	for (i=1; i <= n; ++i)
		for (j=1; j <= m; ++j)
		{
			nr [++nr [0]]=i*j;
			S+=nr [nr [0]];
		}
}

void sume ()
{
	int Sf=2*zero;
	sums [0] [zero]=sums [1] [zero] = 1;
	int i, j;
	for (i=1; i <= nr [0]; ++i)
	{
		for (j=Sf; j >= 0; --j)
			if (sums [0] [j] != 0)
			{
				sums [1] [j+nr [i]]+=sums [0] [j];
				//fprintf (stderr, "%d ", j+nr [i]);	
				sums [1] [j+nr [i]]%=r;
			}
		for (j=0; j <= Sf; ++j)
			if (sums [0] [j] != 0 && j-nr [i] >= 0)
			{
				sums [1] [j-nr [i]]+=sums [0] [j];
				sums [1] [j-nr [i]]%=r;
			}
		memcpy (sums [0], sums [1], sizeof (sums [0]));
	}

}

int main ()
{
	freopen ("diamant.in", "r", stdin);
	freopen ("diamant.out", "w", stdout);
	scanf ("%d%d%d", &n, &m, &x);
	prod ();
	if (x > S) {printf ("0\n"); return 0;}
	sume ();
	printf ("%d\n", sums [0] [zero+x]);
	return 0;
}