Cod sursa(job #3147345)

Utilizator mircea_007Mircea Rebengiuc mircea_007 Data 25 august 2023 20:45:58
Problema Numerele lui Stirling Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <stdio.h>

#define magic_sauce inline __attribute__((always_inline))
using ll = long long;

const int MAXN = 200;
const int MOD = 98999;

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

magic_sauce int gets( int n, int m ){
  if( n < 0 || m < 0 )
    return 0;

  return s[n][m];
}

magic_sauce int getS( int n, int m ){
  if( n < 0 || m < 0 )
    return 0;

  return S[n][m];
}

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

  int t, type, n, m;

  s[0][0] = 1;
  for( n = 1 ; n <= MAXN ; n++ )
    s[n][0] = ((ll)-(n - 1)) * s[n - 1][0] % MOD;
  for( m = 1 ; m <= MAXN ; m++ ){
    s[0][m] = 0;
    for( n = 1 ; n <= MAXN ; n++ )
      s[n][m] = (s[n - 1][m - 1] - ((ll)s[n - 1][m]) * (n - 1)) % MOD;
  }

  S[0][0] = 1;
  for( n = 1 ; n <= MAXN ; n++ )
    S[n][0] = 0;
  for( m = 1 ; m <= MAXN ; m++ ){
    S[0][m] = 0;
    for( n = 1 ; n <= MAXN ; n++ )
      S[n][m] = (S[n - 1][m - 1] + ((ll)S[n - 1][m]) * m) % MOD;
  }

  for( fscanf( fin, "%d", &t ) ; t-- ; ){
    fscanf( fin, "%d%d%d", &type, &n, &m );
    if( type == 1 )
      fprintf( fout, "%d\n", s[n][m] );
    else
      fprintf( fout, "%d\n", S[n][m] );
  }
    
  return 0;
}