Pagini recente » Cod sursa (job #384897) | Cod sursa (job #2792203) | Cod sursa (job #1338582) | Cod sursa (job #561778) | Cod sursa (job #1613694)
#include <fstream>
#include <vector>
#define MOD 10000
using namespace std;
ifstream is("diamant.in");
ofstream os("diamant.out");
using VI = vector<int>;
using VVI = vector<VI>;
int n, m, s, lim;
int main()
{
is >> n >> m >> s;
lim = n * ( n + 1 ) * m * ( m + 1 ) / 4;
if ( ( s >= 0 && lim < s ) || ( lim + s < 0 ) )
os << "0";
else
if ( lim == s )
os << "1";
else
{
VVI k(2, VI(2 * lim + 2));
VI a(n * m + 1);
int lc = 1, lp = 0;
s += lim;
k[0][lim] = 1;
for ( int i = 1, cnt = 1; i <= n; ++i )
for ( int j = 1; j <= m; ++j, ++cnt )
a[cnt] = i * j;
n = n * m;
for ( int i = 1; i <= n; ++i, lc = !lc, lp = !lp )
{
k[lc] = k[lp];
for ( int q = 0; q <= 2 * lim; ++q )
{
if ( k[lp][q] )
{
if ( q - a[i] >= 0 )
k[lc][q - a[i]] = ( k[lc][q - a[i]] + k[lp][q] ) % MOD + MOD;
if ( q + a[i] <= 2 * lim )
k[lc][q + a[i]] = ( k[lc][q + a[i]] + k[lp][q] ) % MOD + MOD;
}
}
}
os << k[lp][s] % MOD << "\n";
}
is.close();
os.close();
return 0;
}