Cod sursa(job #3344876)

Utilizator rrfeierFeier Raul rrfeier Data 6 martie 2026 11:57:39
Problema Numerele lui Stirling Scor 90
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.01 kb
#include <bits/stdc++.h>

using namespace std;
const int MOD = 98999;

long long stirling_1(int N, int K) {
  vector<vector<long long>> dp(N + 1, vector<long long>(N + 1, 0));
  dp[0][0] = 1;

  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= i; j++) {
      dp[i][j] = (dp[i - 1][j - 1] - (i - 1) * dp[i - 1][j] % MOD) % MOD;
    }
  }

  return dp[N][K];
}

long long stirling_2(int N, int K) {
  vector<vector<long long>> dp(N + 1, vector<long long>(N + 1, 0));
  dp[0][0] = 1;

  for (int i = 1; i <= N; i++) {
    for (int j = 1; j <= i; j++) {
      dp[i][j] = (dp[i - 1][j - 1] + j * dp[i - 1][j] % MOD) % MOD;
    }
  }

  return dp[N][K];
}

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

  ifstream cin{"stirling.in"};
  ofstream cout{"stirling.out"};

  int tc;
  cin >> tc;

  while (tc--) {
    int c, a, b;
    cin >> c >> a >> b;

    assert(a >= b);

    if (c == 1) {
      cout << stirling_1(a, b) << '\n';
    } else
      cout << stirling_2(a, b) << '\n';
  }

  return 0;
}