Pagini recente » Cod sursa (job #1649841) | Cod sursa (job #2395151) | Cod sursa (job #1103579) | Cod sursa (job #2927869) | Cod sursa (job #2973288)
#include <fstream>
using namespace std;
using ll = long long;
ifstream cin("stirling.in");
ofstream cout("stirling.out");
const int MOD = 98999, NMAX = 205;
ll s1[NMAX][NMAX], s2[NMAX][NMAX], is_computed1[NMAX][NMAX], is_computed2[NMAX][NMAX];
ll stirling1(int n, int k)
{
if(n < 1 || k < 1)
return 0;
if(n < k)
return 0;
if(n == k)
return 1;
if(is_computed1[n][k])
return s1[n][k];
s1[n][k] = (stirling1(n - 1, k - 1) - (n - 1) * stirling1(n - 1, k) % MOD) % MOD;
is_computed1[n][k] = 1;
return s1[n][k];
}
ll stirling2(int n, int k)
{
if(n < 1 || k < 1)
return 0;
if(n < k)
return 0;
if(k == 1)
return 1;
if(n == k)
return 1;
if(is_computed2[n][k])
return s2[n][k];
s2[n][k] = (stirling2(n - 1, k - 1) + k * stirling2(n - 1, k) % MOD) % MOD;
is_computed2[n][k] = 1;
return s2[n][k];
}
void solve()
{
int op, n, k;
cin >> op >> n >> k;
if(op == 1)
cout << stirling1(n, k) << '\n';
else
cout << stirling2(n, k) << '\n';
}
int main()
{
int T;
cin >> T;
while(T--)
solve();
return 0;
}