Cod sursa(job #2374913)

Utilizator AntoniuFicAntoniu Ficard AntoniuFic Data 7 martie 2019 21:15:59
Problema Numerele lui Stirling Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.63 kb
#include <iostream>
#include <fstream>
#define MOD 98999
using namespace std;

int triangleKind1[205][205];
int triangleKind2[205][205];


void intitalize(int noTo){
    for(int i=0; i<noTo+1; i++){
        triangleKind1[i][0] = triangleKind2[i][0] = 0;
        triangleKind1[i][i] = triangleKind2[i][i] = 1;
    }
    return;
}

void generateKind1(int noTo){
    for(int i=2; i<noTo; i++){
        for(int j=1; j<i; j++)
            triangleKind1[i][j] = ((triangleKind1[i-1][j-1]%MOD) - (((i-1) * triangleKind1[i-1][j])%MOD))%MOD;
    }
    return;
}

void generateKind2(int noTo){
    for(int i=2; i<noTo; i++){
        for(int j=1; j<i; j++)
            triangleKind2[i][j] = ((triangleKind2[i-1][j-1]%MOD) + (j * triangleKind2[i-1][j])%MOD)%MOD;
    }
    return;
}

class stirling{
    public:
        int n, m, x, rez;
        void find(){
            if(this->x == 1){
                this->rez = this->kind1();
                return;
            }
            this->rez = this->kind2();
            return;
        }
        int kind1(){
            return triangleKind1[this->n][this->m];
        }
        int kind2(){
            return triangleKind2[this->n][this->m];
        }
};

int main() {
    ifstream f("stirling.in");
    int t;
    f>>t;
    int maxim=0;
    stirling pairs[1005];
    for(int i=0; i<t; i++){
        f>>pairs[i].x>>pairs[i].n>>pairs[i].m;
        if(pairs[i].n > maxim)
            maxim = pairs[i].n;
    }
    intitalize(maxim+1);
    generateKind1(maxim+1);
    generateKind2(maxim+1);
    ofstream g("stirling.out");
    for(int i=0; i<t; i++){
        pairs[i].find();
        g<<pairs[i].rez<<endl;
    }
    return 0;
}