Pagini recente » Cod sursa (job #2359115) | Cod sursa (job #1481107) | Cod sursa (job #152188) | Cod sursa (job #1908042) | Cod sursa (job #801511)
Cod sursa(job #801511)
#include <fstream>
#include <vector>
using namespace std;
ifstream fi ("diamant.in");
ofstream fo ("diamant.out");
const int mod = 10000;
int N, M, K, total;
vector <short int> V1, V2;
void cit ()
{
fi >> N >> M >> K;
}
void back (int x, int y, int s)
{
if (x > M) x = 1, y++;
if (y > N)
{
if (s == K)
{
total++;
if (total == mod)
total = 0;
}
return;
}
back (x + 1, y, s + x * y);
back (x + 1, y, s);
back (x + 1, y, s - x * y);
}
void preg1 (int lg)
{
for (int i = V1.size(); i < lg; i++)
V1.push_back (0);
for (int i = 0; i < V2.size(); i++)
V1[i] = V2[i];
}
void preg2 (int lg)
{
for (int i = 0; i < V2.size(); i++)
V2[i] = 0;
for (int i = V2.size(); i < lg; i++)
V2.push_back (0);
}
void add (int poz)
{
for (int i = 0; i < V1.size(); i++)
{
V2[poz + i] += V1[i];
if (V2[poz + i] >= mod)
V2[poz + i] -= mod;
}
}
void rucsac ()
{
int i, j, x, lg = 1;
V1.push_back (1);
V2.push_back (0);
for (i = 1; i <= N; i++)
{
for (j = 1; j <= M; j++)
{
x = i * j;
preg2 (lg + (x<<1));
add (0);
add (x);
add (x + x);
preg1 (lg + (x<<1));
lg += x<<1;
/*
for (int i = 0; i < V1.size(); i++)
fo << V1[i] << ' ';
fo << '\n';
*/
}
}
if ((V1.size()>>1) + K < V1.size())
fo << V1[(V1.size()>>1) + K] << '\n';
else
fo << '0' << '\n';
}
int main ()
{
cit ();
/*
back (1, 1, 0);
fo << total << '\n';
total = 0;
*/
rucsac ();
return 0;
}