Cod sursa(job #2191781)

Utilizator AndreiCroitoruAndrei Croitoru AndreiCroitoru Data 3 aprilie 2018 18:14:36
Problema Numerele lui Stirling Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.36 kb
#include <fstream>
#define mod 98999
using namespace std;
ifstream in("stirling.in");
ofstream out("stirling.out");
int st1[201][201];
int st2[201][201];
struct ura
{
    int c,n,k;
};
ura v[1001];
void s1(int n,int k)
{
    int i,j;
    st1[1][1]=1;
    st1[1][2]=0;
    st1[2][1]=-1;
    st1[2][2]=1;
    for(i=2;i<=n;i++)
    {
        for(j=2;j<=k;j++)
        {
            if((i-j)%2==0)
            st1[i][j]=(st1[i-1][j-1]+st1[i-1][j]*n)%mod;
            else
            st1[i][j]=0-(st1[i-1][j-1]+st1[i-1][j]*n)%mod;

        }
    }
}
void s2(int n,int k)
{
    int i,j;
    st2[0][0]=1;
    st2[1][0]=0;
    st2[0][1]=1;
    for(i=1;i<=n;i++)
    {
        for(j=1;j<=k;j++)
        {
            st2[i][j]=(st2[i-1][j-1]+st1[i-1][j]*k)%mod;
        }
    }
}
int main()
{
    int n1,k1,c,t,i,maxn=0,maxk=0;
    in>>t;
    for(i=1;i<=t;i++)
    {
        in>>v[i].c>>v[i].n>>v[i].k;
        if(maxn<v[i].n)
        {
            maxn=v[i].n;
        }
        if(maxk<v[i].k)
        maxk=v[i].n;
    }
    s1(maxn,maxk);
    s2(maxn,maxk);
    for(i=1;i<=t;i++)
    {
        n1=v[i].n;
        k1=v[i].k;
        if(v[i].c==1)
        {
            out<<st1[v[i].n][v[i].k]<<'\n';
        }
        if(v[i].c==2)
        {
            out<<st2[v[i].n][v[i].k]<<'\n';
        }
    }
    return 0;
}