Pagini recente » Cod sursa (job #942468) | Cod sursa (job #2050367) | Cod sursa (job #2359928) | Cod sursa (job #498330) | Cod sursa (job #2669387)
#define MOD 98999
#define MAX_SZ 200
#include <fstream>
using namespace std;
ifstream fin("stirling.in");
ofstream fout("stirling.out");
// I[i][j] = i paranteze, coeficientul lui x^j
int I[MAX_SZ + 1][MAX_SZ + 1];
// S[i][j] = i elemente, j submultimi nevide care formeaza o partitie
int S[MAX_SZ + 1][MAX_SZ + 1];
int main()
{
I[1][0] = 0;
I[1][1] = 1 % MOD;
for (int i = 2; i < (MAX_SZ + 1); ++i)
{
I[i][0] = 0;
for (int j = 1; j < i; ++j)
{
I[i][j] = (I[i - 1][j - 1] - I[i - 1][j] * (i - 1)) % MOD;
}
I[i][i] = 1 % MOD;
}
S[1][1] = 1 % MOD;
for (int i = 2; i < (MAX_SZ + 1); ++i)
{
S[i][1] = (S[i - 1][1] + 1) % MOD;
for (int j = 2; j < i; ++j)
{
S[i][j] = (S[i - 1][j] + S[i - j + 1][j - 1]) % MOD;
}
S[i][i] = (S[i - 1][i] + 1) % MOD;
}
int T;
fin >> T;
while ((--T) >= 0)
{
int x, n, m;
fin >> x >> n >> m;
if (x == 1)
{
fout << I[n][m] << '\n';
}
if (x == 2)
{
fout << ((MOD + S[n][m] - S[n - 1][m]) % MOD) << '\n';
}
}
fin.close();
fout.close();
return 0;
}