Pagini recente » Cod sursa (job #172695) | Cod sursa (job #2006679) | Diferente pentru implica-te/arhiva-educationala intre reviziile 67 si 66 | Cod sursa (job #830082) | Cod sursa (job #887640)
Cod sursa(job #887640)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
#define MOD 10000
#define AA 500
inline int good(int number) { return number % MOD; }
inline int abs(int number) { return (number < 0 ? -number : number); }
ifstream fin("diamant.in");
ofstream fout("diamant.out");
int N, M, SMAX, X, step(1);
int dp[200000][2];
int main() {
fin >> N >> M >> X;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++)
SMAX = SMAX + i * j;
dp[0 + SMAX + AA][0] = 1;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= M; j++, step++) {
for (int k = -SMAX; k <= SMAX; k++) {
dp[k + SMAX + AA][step & 1] = dp[k + SMAX + AA][!(step & 1)];
dp[k + SMAX + AA][step & 1] += dp[k - i * j + SMAX + AA][!(step & 1)];
dp[k + SMAX + AA][step & 1] += dp[k + i * j + SMAX + AA][!(step & 1)];
dp[k + SMAX + AA][step & 1] = good(dp[k + SMAX + AA][step & 1]);
}
}
fout << (abs(X) <= abs(SMAX) ? dp[X + SMAX + AA][!(step & 1)] : 0) << '\n';
fout.close();
return 0;
}