Pagini recente » Cod sursa (job #2194453) | Cod sursa (job #988420) | Cod sursa (job #1013221) | Cod sursa (job #704128) | Cod sursa (job #251822)
Cod sursa(job #251822)
#include <algorithm>
#include <stdio.h>
#include <vector>
#define MAX (1 << 16)
#define restRez 10000
#define pb push_back
using namespace std;
int n, m, nr, sum, nrSums;
vector <int> vctNr, vctSums;
int vctPos[MAX * 2];
#define vctPos (vctPos + MAX)
char vctVal[MAX * 2];
#define vctVal (vctVal + MAX)
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);
vctPos[0] = vctVal[0] = 1;
vctSums.pb(0);
for (int i = 0; i < vctNr.size(); i++)
{
vector <int> vctDePus;
vector <pair <int, int> > vctDeModif;
for (int j = 0; j < vctSums.size(); j++)
{
if (!vctVal[vctNr[i] + vctSums[j]])
vctDePus.pb(vctNr[i] + vctSums[j]);
if (!vctVal[-vctNr[i] + vctSums[j]])
vctDePus.pb(-vctNr[i] + vctSums[j]);
vctDeModif.pb(make_pair(vctNr[i] + vctSums[j], vctPos[vctSums[j]]));
vctDeModif.pb(make_pair(-vctNr[i] + vctSums[j], vctPos[vctSums[j]]));
}
for (int j = 0; j < vctDePus.size(); j++)
vctSums.pb(vctDePus[j]);
for (int j = 0; j < vctDeModif.size(); j++)
{
vctPos[vctDeModif[j].first] = (vctPos[vctDeModif[j].first] + vctDeModif[j].second) % restRez;
vctVal[vctDeModif[j].first] = 1;
}
}
if (sum > 44100 || sum < -44100)
printf("%d\n", 0);
else printf("%d\n", vctPos[sum]);
fclose(stdin);
fclose(stdout);
return 0;
}