Cod sursa(job #2696594)

Utilizator AntoniuFicAntoniu Ficard AntoniuFic Data 16 ianuarie 2021 10:33:29
Problema Numerele lui Stirling Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.82 kb
#include <iostream>
	
#include <fstream>
	
#define MOD 98999
	
using namespace std;
	
 
	
int triunghi1[205][205];
	
int triunghi2[205][205];
	
 
	
 
	
void intitalize(int noTo){
	
    for(int i=0; i<noTo+1; i++){
	
        triunghi1[i][0] = triunghi2[i][0] = 0;
	
        triunghi1[i][i] = triunghi2[i][i] = 1;
	
    }
	
    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 triunghi1[this->n][this->m];
	
        }
	
        int kind2(){
	
            return triunghi2[this->n][this->m];
	
        }
	
};	
 
	
void generare1(int noTo){
	
    for(int i=2; i<noTo; i++){
	
        for(int j=1; j<i; j++)
	
            triunghi1[i][j] = ((triunghi1[i-1][j-1]%MOD) - (((i-1) * triunghi1[i-1][j])%MOD))%MOD;
	
    }
	
    return;
	
}
	
 
	
void generare2(int noTo){
	
    for(int i=2; i<noTo; i++){
	
        for(int j=1; j<i; j++)
	
            triunghi2[i][j] = ((triunghi2[i-1][j-1]%MOD) + (j * triunghi2[i-1][j])%MOD)%MOD;
	
    }
	
    return;
	
}
	
	
 
	
int main() {
	
    ifstream f("stirling.in");
	
    int t;
	
    f>>t;
	
    int maxim=0;
	
    stirling pe[1005];
	
    for(int i=0; i<t; i++){
	
        f>>pe[i].x>>pe[i].n>>pe[i].m;
	
        if(pe[i].n > maxim)
	
            maxim = pe[i].n;
	
    }
	
    intitalize(maxim+1);
	
    generare1(maxim+1);
	
    generare2(maxim+1);
	
    ofstream g("stirling.out");
	
    for(int i=0; i<t; i++){
	
        pe[i].find();
	
        g<<pe[i].rez<<endl;
	
    }
	
    return 0;
	
}