Pagini recente » Cod sursa (job #2836733) | Cod sursa (job #363973) | Cod sursa (job #1853882) | Cod sursa (job #2253864) | Cod sursa (job #120819)
Cod sursa(job #120819)
//
#include <stdio.h>
#include <string.h>
short a[90001], b[90001];
int l, c, z, nl, nc, x, va, vb, ln, lp, n, p;
int main () {
freopen("diamant.in" ,"r",stdin);
freopen("diamant.out","w",stdout);
scanf("%d %d %d", &nl, &nc, &x);
if (x > 44100) // [2]
printf("0");
else {
a[45000] = 1;
ln = 45000; lp = 45000; // limita "negativa" si limita "pozitiva"
for (l = 1; l <= nl; l++) {
for (c = 1; c <= nc; c++) {
memcpy(b, a, sizeof(a));
memset(a, 0, sizeof(a));
for (vb = ln; vb <= lp; vb++) { // [1]
n = vb-l*c; // pentru valorile "negative"
a[n] += b[vb];
if (a[n] >= 10000)
a[n] -= 10000;
a[vb] += b[vb];
if (a[vb] >= 10000)
a[vb] -= 10000;
p = vb+l*c; // pentru valorile "pozitive"
a[p] += b[vb];
if (a[p] >= 10000)
a[p] -= 10000;
}
ln -= l*c; lp += l*c;
}
}
printf("%d", a[x+45000]);
}
return 0;
}
/*
[1] Valorile din b contribuie la aparitia anumitor valori in a.
[2] Valoarea maxima care se poate obtine pentru un diamant este 44100,
daca pe toate patratelele avem +1.
1,1
-1 0 1
1 1 1
1,2
-3 -2 -1 0 1 2 3
0 0 0 0 1 1 1
0 0 1 1 2 1 1
1 1 2 1 2 1 1
2,1
-3 -2 -1 0 1 2 3
1 1 2 1 2 1 1
*/