Pagini recente » Cod sursa (job #1750044) | Cod sursa (job #860750) | Cod sursa (job #2701292) | Cod sursa (job #2686212) | Cod sursa (job #845587)
Cod sursa(job #845587)
#include <fstream>
#include <iostream>
#include <vector>
#include <algorithm>
#include <iterator>
#include <cstdlib>
#include <cstring>
const static int c_iMaxSum = 48000;
const static int c_iModulo = 10000;
using namespace std;
int diamonds[2][2*c_iMaxSum + 20];
int main()
{
int n, m, X;
vector<int> vPartials;
fstream fin("diamant.in", fstream::in);
fstream fout("diamant.out", fstream::out);
fin >> n >> m >> X;
//cout << n << " " << m << " " << X << endl;
if (X < 0)
{
X = -X;
}
int sum = 0;
for (int i=1; i<=n; ++i)
{
for (int j=1; j<=m; ++j)
{
vPartials.push_back(i*j);
//vPartials.push_back(-i*j);
sum += (i * j);
}
}
if (X > sum)
{
fout << "0\n";
return 0;
}
sort(vPartials.begin(), vPartials.end());
/*ostream_iterator<int> itOut(cout, " ");
copy(vPartials.begin(), vPartials.end(), itOut);
cout << endl;*/
//cout << sum << endl;
//diamonds[0][0] = diamonds[1][0] = 1;
diamonds[0][c_iMaxSum] = diamonds[1][c_iMaxSum] = 1;
int current = 0;
for (vector<int>::const_iterator it = vPartials.begin();
it != vPartials.end();
++it)
{
//cout << *it << endl;
for (int i=-sum; i<=sum; ++i)
{
const int index = c_iMaxSum + i;
diamonds[current][index] = (diamonds[!current][index] + diamonds[!current][index - *it] + diamonds[!current][index + *it]);
diamonds[current][index] %= c_iModulo;
}
//copy(diamonds[current], diamonds[current] + 3*(X + 1), itOut);
//cout << endl;
current = !current;
}
current = !current;
fout << diamonds[current][c_iMaxSum + X] << endl;
fin.close();
fout.close();
return 0;
}