Pagini recente » Cod sursa (job #2333774) | Cod sursa (job #3207210) | Cod sursa (job #270694) | Cod sursa (job #629191) | Cod sursa (job #3185172)
#include <fstream>
using namespace std;
ifstream cin ("diamant.in");
ofstream cout ("diamant.out");
int modalitati[2][88201] , _modalitati[2][8401];
const int mod = 10000;
int main ()
{
int linii , coloane , valoare;
cin >> linii >> coloane >> valoare;
if (valoare < -linii * (linii + 1) / 2 * coloane * (coloane + 1) / 2 || linii * (linii + 1) / 2 * coloane * (coloane + 1) / 2 < valoare)
{ cout << '0'; }
else
{
modalitati[0][44100] = 1;
for (int linie = 1 ; linie <= linii ; linie++)
{
_modalitati[0][4200] = 1;
for (int coloana = 1 , termen = linie , limita = linie * coloane * (coloane + 1) / 2 ; coloana <= coloane ; coloana++ , termen += linie)
{
for (int suma = -limita ; suma <= limita ; suma++) {
if (_modalitati[0][suma + 4200]) {
_modalitati[1][suma + 4200] += _modalitati[0][suma + 4200];
if (-limita <= suma - termen) { (_modalitati[1][suma - termen + 4200] += _modalitati[0][suma + 4200]) %= mod; }
if (suma + termen <= limita) { (_modalitati[1][suma + termen + 4200] += _modalitati[0][suma + 4200]) %= mod; }
}
}
swap(_modalitati[0] , _modalitati[1]);
}
for (int termen = -4200 ; termen <= 4200 ; termen++) {
if (_modalitati[0][termen + 4200]) {
for (int suma = -44100 + max(0 , termen) ; suma + max(0 , -termen) <= 44100 ; suma++) {
(modalitati[1][suma + 44100] += modalitati[0][suma + 44100 - termen] * _modalitati[0][termen + 4200]) %= mod;
}
}
}
swap(modalitati[0] , modalitati[1]);
for (int indice = 0 ; indice <= 8400 ; indice++)
{ _modalitati[0][indice] = _modalitati[1][indice] = 0; }
for (int indice = 0 ; indice <= 88200 ; indice++)
{ modalitati[1][indice] = 0; }
}
cout << modalitati[0][valoare + 44100];
}
cout.close(); cin.close();
return 0;
}