Cod sursa(job #3309183)

Utilizator prodsevenStefan Albu prodseven Data 2 septembrie 2025 11:17:07
Problema Numerele lui Stirling Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.17 kb
#include <fstream>
#include <vector>

using namespace std;

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

const int N_MAX = 200, K_MAX = 200, MOD = 98999;

vector<vector<int>> S(N_MAX + 2, vector<int>(K_MAX + 2)); // speta 2
vector<vector<int>> s(N_MAX + 2, vector<int>(K_MAX + 2)); // speta 1

void precalculate_2() {
    S[0][0] = 1;
    for (int n = 1 ; n <= N_MAX ; ++n) {
        for (int k = 1 ; k <= n ; ++k) {
            long long current = S[n - 1][k - 1];
            current = (current + (1LL * S[n - 1][k] * k) % MOD) % MOD;
            S[n][k] = (int)current;
        }
    }
}

void precalculate_1() {
    s[0][0] = 1;
    for (int n = 1 ; n <= N_MAX ; ++n) {
        for (int k = 1 ; k <= n ; ++k) {
            long long current = s[n - 1][k - 1];
            current = (current - (1LL * (n - 1) * s[n - 1][k]) % MOD) % MOD;
            s[n][k] = (int)current;
        }
    }
}

int main() {
    precalculate_1();
    precalculate_2();
    int t;
    cin >> t;
    while (t--) {
        int x, n, k;
        cin >> x >> n >> k;
        if (x == 1) cout << ((k > n) ? 0 : s[n][k]) << "\n";
        else cout << ((k > n) ? 0 : S[n][k]) << "\n";
    }
    return 0;
}