Cod sursa(job #2632302)

Utilizator Senth30Denis-Florin Cringanu Senth30 Data 2 iulie 2020 18:39:39
Problema Numerele lui Stirling Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.4 kb
#include <bits/stdc++.h>
#define MAX 131072
#define MOD 98999
#define INF 2100000000

using namespace std;
const int NMAX = 205;

FILE *IN, *OUT;

int T;
int ans[2][NMAX][NMAX];

int poz, sign;
char f[MAX];

inline void Read(int &nr){
    sign = 0;
    nr = 0;
    while(f[poz] < '0' || f[poz] > '9'){
        if(f[poz] == '-') sign = 1;
        ++poz;
        if(poz == MAX)
            fread(f, MAX, 1, IN), poz = 0;
    }
    while(f[poz] >= '0' && f[poz] <= '9'){
        nr = 10 * nr + f[poz++] - '0';
        if(poz == MAX)
            fread(f, MAX, 1, IN), poz = 0;
    }
    if(sign) nr =- nr;
}

void intro(){
    Read(T);
    ans[0][0][0] = ans[0][1][1] = 1;
    ans[1][0][0] = 1;
    for(int i = 1; i < NMAX; i++)
        ans[1][i][1] = 1;
}

void precalc(){
    for(int i = 2; i <= 200; i++)
        for(int j = 1; j <= i; j++)
            ans[0][i][j] = (ans[0][i - 1][j - 1] - 1LL * ans[0][i - 1][j] * (i - 1)) % MOD;
    for(int i = 2; i <= 200; i++)
        for(int j = 2; j <= i; j++)
            ans[1][i][j] = (ans[1][i - 1][j - 1] + 1LL * ans[1][i - 1][j] * j) % MOD;
}

int main(){


    IN = fopen("stirling.in", "r");
    OUT = fopen("stirling.out", "w");

    intro();
    precalc();

    int tip, a, b;
    for(; T; --T){
        Read(tip); Read(a); Read(b);
        tip--;
        fprintf(OUT, "%d\n", ans[tip][a][b]);
    }

    return 0;
}