Cod sursa(job #2300016)

Utilizator danielsociuSociu Daniel danielsociu Data 10 decembrie 2018 19:00:05
Problema Numerele lui Stirling Scor 10
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.7 kb
#include <fstream>
std::ifstream cin("stirling.in");
std::ofstream cout("stirling.out");
#define maxn 202
int s[maxn][maxn],S[maxn][maxn];
int T;
/*
STIRLING NUMBERS
 s(n,m) = s(n-1,m-1) - (n-1)*s(n-1,m) first kind
 S(n,m) = S(n-1,m-1) + m*S(n-1,m) second kind
 */
 void precalcFirst(){
	 s[1][1]=1;
	 for(int i=2;i<maxn-1;i++)
	 	for(int j=1;j<=i;j++)
			s[i][j]=s[i-1][j-1]- (i-1)*s[i-1][j];
 }
 void precalcSecond(){
	 S[1][1]=1;
	 for(int i=2;i<maxn-1;i++)
	 	for(int j=1;j<=i;j++)
			S[i][j]=s[i-1][j-1] + j*s[i-1][j];
 }

int main()
{
	int x,y,speta;
	cin>>T;
	precalcFirst();
	precalcSecond();
	for(;T--;){
		cin>>speta>>x>>y;
		if(speta==1)
			cout<<s[x][y]<<'\n';
		else
			cout<<S[x][y]<<'\n';
	}
	return 0;
}