Pagini recente » Cod sursa (job #2707356) | Cod sursa (job #2788180) | Cod sursa (job #3000991) | Cod sursa (job #2373656) | Cod sursa (job #251855)
Cod sursa(job #251855)
#include <algorithm>
#include <stdio.h>
#include <vector>
#define MAX 90000
#define restRez 10000
#define pb push_back
using namespace std;
int n, m, nr, sum, sumPart;
vector <int> vctNr;
int vctPos[MAX], vctPosV[MAX];
#define vctPos (vctPos + 45000)
#define vctPosV (vctPosV + 45000)
char vctVal[MAX], vctValV[MAX];
#define vctVal (vctVal + 45000)
#define vctValV (vctValV + 45000)
int main()
{
freopen("diamant.in", "r", stdin);
freopen("diamant.out", "w", stdout);
scanf("%d %d %d", &n, &m, &sum);
for (int i = 1; i <= n; i++)
for (int j = 1; j <= m; j++)
{
vctNr.pb(i * j);
sumPart += i * j;
}
vctPos[0] = vctPosV[0] = vctVal[0] = vctValV[0] = 1;
for (int i = 0; i < vctNr.size(); i++)
{
for (int j = -sumPart; j <= sumPart; j++)
if (vctValV[j])
{
vctPos[j + vctNr[i]] = (vctPos[j + vctNr[i]] + vctPosV[j]) % restRez;
vctVal[j + vctNr[i]] = 1;
vctPos[j - vctNr[i]] = (vctPos[j - vctNr[i]] + vctPosV[j]) % restRez;
vctVal[j - vctNr[i]] = 1;
}
for (int j = -sumPart; j <= sumPart; j++)
{
vctValV[j] = vctVal[j];
vctPosV[j] = vctPos[j];
}
}
if (sum > 44100 || sum < -44100)
printf("%d\n", 0);
else printf("%d\n", vctPos[sum]);
fclose(stdin);
fclose(stdout);
return 0;
}