Cod sursa(job #1755186)

Utilizator georgerapeanuRapeanu George georgerapeanu Data 9 septembrie 2016 15:50:59
Problema Numerele lui Stirling Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <cstdio>
#define MOD 98999
using namespace std;
FILE *f=fopen("stirling.in","r");
FILE *g=fopen("stirling.out","w");
long long nr;
long long S[205][205];
long long s[205][205];
long long N,M,T,K;
long long i,j;
long long s1(long long N,long long M)
{
    if(N==0&&M==0)
        return 1;
    if(K>N)
        return 0;
    if(!M)
        return 0;
    if(s[N][M])
        return s[N][M];
    s[N][M]=(s1(N-1,M-1)-s1(N-1,M)*(N-1))%MOD;
    return s[N][M];
}
long long s2(long long N,long long M)
{
    if(N==0&&M==0)
        return 1;
    if(!M)
        return 0;
    if(M>N)
        return 0;
    if(S[N][M])
        return S[N][M];
    S[N][M]=(s2(N-1,M-1)+s2(N-1,M)*M)%MOD;
    return S[N][M];
}
int main()
{
    fscanf(f,"%lld",&T);
    while(T--)
    {
        fscanf(f,"%lld %lld %lld",&K,&N,&M);
        if(K==1)
            fprintf(g,"%lld\n",s1(N,M));
        else
            fprintf(g,"%lld\n",s2(N,M));
    }
    fclose(f);
    fclose(g);
    return 0;
}