Cod sursa(job #1039777)

Utilizator sziliMandici Szilard szili Data 23 noiembrie 2013 16:19:32
Problema Numerele lui Stirling Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.18 kb
#include <iostream>
#include <stdio.h>
#include <stdlib.h>

#define MAX_N 201
#define MOD 98999

//Stirling of the first kind
int s[MAX_N][MAX_N];

//Stirling of the second kind
int S[MAX_N][MAX_N];

void generateStirling1(){

    s[1][1] = 1;

    for (int n=1; n<MAX_N; n++){
        for (int m=1; m<MAX_N; m++){
            if ( !(n==1 && m==1)){
                s[n][m] = (s[n-1][m-1] - (n-1)*s[n-1][m]) % MOD;
            }
        }
    }

}


void generateStirling2(){

    S[1][1] = 1;

    for (int i=1; i<MAX_N; i++){
        S[i][1] = 1;
    }

    for (int n=1; n<MAX_N; n++){
        for (int m=2; m<MAX_N; m++){
            S[n][m] = (S[n-1][m-1] + m*S[n-1][m]) % MOD;
        }
    }

}

using namespace std;

int main()
{
    generateStirling1();
    generateStirling2();

    freopen("stirling.in", "r", stdin);
    freopen("stirling.out", "w", stdout);

    int t,n,m, option;
    scanf("%d", &t);

    for (int i=0; i<t; i++){
        scanf("%d %d %d", &option, &n, &m);

        if (option == 1){
            printf("%d\n", s[n][m]);
        } else {
            printf("%d\n", S[n][m]);
        }
    }


    return 0;
}