【题目描述】:
桂林有N个不同的文件,现在他要创建N-1个文件夹(相同)来保存这些文件,每个文件夹内有且只有两个项目,每个项目可以是一个文件或者一个文件夹,问他有多少种不同的存储方式。
【输入描述】:
第一行一个正整数T,表示数据组数。
接下来T行每行一个正整数N。
【输出描述】:
共T行,在模19260817的意义下桂林的存储方式总数。
【样例输入】:
2
3
5
【样例输出】:
3
105
【时间限制、数据范围及描述】:
时间:1s 空间:256M
30%的数据:2≤N≤20;
70%的数据:2≤N≤1000;
100%的数据:T≤100, 2≤N≤10^6
题解:emm用排列组合的一些知识推导一下就出来啦。
类似于卡特兰数。
#include<cstdio> #include<iostream> #include<cmath> #include<cstdlib> #include<cstring> #include<algorithm> typedef long long ll; using namespace std; const int mod=19260817; ll t,n,dp[1000005]; void init(){ dp[1]=0; dp[2]=1; for(int i=1;i<=1000001;i++){ dp[i+2]=dp[i+1]*(i*2+1); dp[i+2]%=mod; } } int main(){ cin>>t; init(); while(t--){ cin>>n; printf("%lld\n",dp[n]); } return 0; }