Cod sursa(job #1159263)

Utilizator harababurelPuscas Sergiu harababurel Data 29 martie 2014 14:20:11
Problema Numerele lui Stirling Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 0.79 kb
#include <iostream>
#include <fstream>
#include <cmath>
#define nmax 205
#define mod 98999
using namespace std;

bool computed[3][nmax][nmax];
int t, x, a, b, Stirling[3][nmax][nmax];

int solve(int kind, int n, int m) {
	if(computed[kind][n][m] || m == 0 || n==0) return Stirling[kind][n][m];

	computed[kind][n][m] = true;
	if(kind == 1) Stirling[kind][n][m] = solve(kind, n-1, m-1) - (n-1)*solve(kind, n-1, m);
	if(kind == 2) Stirling[kind][n][m] = solve(kind, n-1, m-1) + m*solve(kind, n-1, m);
	
	Stirling[kind][n][m] %= mod;
	return Stirling[kind][n][m];
}

int main() {
	ifstream f("stirling.in");
	ofstream g("stirling.out");

	Stirling[1][0][0] = Stirling[2][0][0] = 1;
	computed[1][0][0] = computed[2][0][0] = true;

	f>>t;
	while(t--) {
		f>>x>>a>>b;
		g<<solve(x, a, b)<<"\n";
	}
	
	return 0;
}