Cod sursa(job #1128780)

Utilizator michael9ufoStanescu Mihai michael9ufo Data 27 februarie 2014 18:40:25
Problema Numerele lui Stirling Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.99 kb
#include <iostream>
#include <fstream>

using namespace std;

int S1[201][201], S2[201][201];

int stirling1(int n, int m)
{

    if(S1[n][m])
        return S1[n][m];

    if(n == m)
        return 1;

    if(m == 0)
        return 0;

    S1[n][m] = stirling1(n - 1, m - 1) - (n - 1) * stirling1(n - 1, m) % 98999;

    return S1[n][m];

}

int stirling2(int n, int m)
{
    if(S2[n][m])
        return S2[n][m];
    if(n == m)
        return 1;
    if(m == 1)
        return 1;

    S2[n][m] = stirling2(n - 1, m - 1) + m * stirling2(n - 1, m) % 98999;
    return S2[n][m];
}

int main()
{

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

    int T, x, n, m;

    scanf("%d", &T);

    //cout<<T;

    for(int i=1;i<=T;++i)
    {
        scanf("%d %d %d", &x, &n, &m);

        if(x == 1)
            cout<<stirling1(n, m)<<"\n";
        else if(x == 2)
            cout<<stirling2(n, m)<<"\n";
    }
    return 0;
}