Cod sursa(job #3194027)

Utilizator BuzdiBuzdugan Rares Andrei Buzdi Data 16 ianuarie 2024 18:20:48
Problema Numerele lui Stirling Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.03 kb
#include <fstream>
#include <vector>
#define ll long long

using namespace std;

ifstream cin("stirling.in");
ofstream cout("stirling.out");

const int NMAX = 200;
const int MOD = 98999;

int S[NMAX + 1][NMAX + 1];
int s[NMAX + 1][NMAX + 1];

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);

    /// S(n, k) = S(n - 1, k - 1) + k * S(n - 1, k)
    S[0][0] = 1;
    for(int i = 1; i <= NMAX; i++)
        for(int j = 1; j <= NMAX; j++)
            S[i][j] = ((ll) S[i - 1][j - 1] + (ll) j * S[i - 1][j]) % MOD;

    /// s(n, k) = s(n - 1, k - 1) - (n - 1) * s(n - 1, k)
    s[0][0] = 1;
    for(int i = 1; i <= NMAX; i++)
        for(int j = 1; j <= NMAX; j++)
            s[i][j] = ((ll) s[i - 1][j - 1] - (ll)(i - 1) * s[i - 1][j] + MOD) % MOD;

    int T;
    cin >> T;
    while(T--)
    {
        int type, n, k;
        cin >> type >> n >> k;
        if(type == 1)
            cout << s[n][k] << '\n';
        else
            cout << S[n][k] << '\n';
    }

    return 0;
}