Cod sursa(job #2677717)

Utilizator nicolaefilatNicolae Filat nicolaefilat Data 27 noiembrie 2020 11:19:30
Problema Numerele lui Stirling Scor 20
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <iostream>
#include <fstream>

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

using namespace std;

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

int dp_coef[MAXN][MAXN],dp_submultimi[MAXN][MAXN];

void precalculeaza_coeficienti(){
    /// x * (x - 1) * ... * (x - n + 1)
    /// n = 0 => x * (x + 1) ?
    /// nu o sa am termeni pt x^0 dp[i][0] =
    dp_coef[1][1] = 1;
    //dp[0][2] = 1;
    for(int i = 2; i <= MAXN - 1; i++){
        for(int j = 1; j <= MAXN - 1; j++){
            dp_coef[i][j] = -dp_coef[i - 1][j] * (i - 1) + dp_coef[i - 1][j - 1];
            dp_coef[i][j] %= MOD;
        }
    }
}
void precalculeaza_submultimi(){
    /// { ... } n elemente => o impart in { ... } in m submultimi nevide
    /// m = 0 => 0 daca n = 0 => 0
    dp_submultimi[1][1] = 1;
    for(int i = 2; i <= MAXN - 1; i++){
        for(int j = 1; j <= MAXN - 1; j++){
            dp_submultimi[i][j] = dp_submultimi[i - 1][j] + dp_submultimi[i - 1][j - 1];
        }
    }
}

int main()
{
    precalculeaza_submultimi();
    precalculeaza_coeficienti();
//    cout<<dp_coef[1][1]<<" "<<dp_coef[3][2];
//    cout<<dp_submultimi[10][3];
    int intrebari;
    in>>intrebari;
    for(int i = 1; i <= intrebari; i++){
        int tip,n,m;
        in>>tip>>n>>m;
        if(tip == 1)
            out<<dp_coef[n][m]<<"\n";
        else
            out<<dp_submultimi[n][m]<<"\n";
    }
    return 0;
}