Cod sursa(job #3297470)

Utilizator Arhiva_Educationala_2Arhiva Educationala doi Arhiva_Educationala_2 Data 22 mai 2025 17:40:01
Problema Numerele lui Stirling Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1 kb
#include <stdio.h>
#include <vector>

using ll = long long;
constexpr int MOD = 98999;

const int MAXN = 300;
int first[MAXN + 1][MAXN + 1];
int second[MAXN + 1][MAXN + 1];
void init() {
  {// first
    first[0][0] = 1;
    for( int n = 1; n <= MAXN; n++ )
      for( int m = 0; m <= MAXN; m++ ){
        first[n][m] = ((m > 0 ? first[n - 1][m - 1] : 0) - (n - 1) * (ll)first[n - 1][m]) % MOD;
      }
  }

  {// second
    second[0][0] = 1;
    for( int n = 1; n <= MAXN; n++ )
      for( int m = 0; m <= MAXN; m++ ){
        second[n][m] = ((m > 0 ? second[n - 1][m - 1] : 0) + m * (ll)second[n - 1][m]) % MOD;
      }
  }
}

int main() {
  FILE *fin = fopen( "stirling.in", "r" );
  FILE *fout = fopen( "stirling.out", "w" );

  init();
  int t;
  for( fscanf( fin, "%d", &t ); t--; ){
    int type, n, m;
    fscanf( fin, "%d %d%d", &type, &n, &m );

    if( type == 1 )
      fprintf( fout, "%d\n", first[n][m] );
    else
      fprintf( fout, "%d\n", second[n][m] );
  }

  fclose( fin );
  fclose( fout );
  return 0;
}