Pagini recente » Cod sursa (job #361827) | Cod sursa (job #2770347) | Cod sursa (job #1886395) | Cod sursa (job #1482342) | Cod sursa (job #36198)
Cod sursa(job #36198)
#include <stdio.h>
#include <string.h>
#define JEG 43000
#define MOD 10000
#define RED(x) x -= (x >= MOD) ? MOD : 0;
int N, M, S;
short ant[JEG << 1];
short cur[JEG << 1];
inline int MIN(int a, int b) { return (a < b) ? a : b; }
inline int MAX(int a, int b) { return (a > b) ? a : b; }
int main()
{
int i, j, sum, q, mins, maxs;
freopen("diamant.in", "r", stdin);
freopen("diamant.out", "w", stdout);
scanf("%d %d %d", &N, &M, &S);
ant[0 + JEG] = 1;
mins = JEG;
maxs = JEG;
for (i = 1; i <= N; i++)
for (j = 1; j <= M; j++) {
sum = i * j;
for (q = MAX(mins - sum, 0); q <= MIN(maxs + sum, JEG << 1); q++) {
if (q - sum >= 0) cur[q] += ant[q - sum], RED(cur[q]);
if (q + sum < (JEG << 1)) cur[q] += ant[q + sum], RED(cur[q]);
cur[q] += ant[q], RED(cur[q]);
if (cur[q]) {
if (q < mins) mins = q;
if (q > maxs) maxs = q;
}
}
memcpy(ant, cur, sizeof(cur));
memset(cur, 0, sizeof(cur));
}
if (-JEG >= S || S >= JEG) printf("0\n");
else printf("%d\n", ant[S + JEG]);
fclose(stdin);
fclose(stdout);
return 0;
}