4706: B君的多边形
Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 159 Solved: 92
[ Submit][ Status][ Discuss]
Description
有一个正n多边形,我们要连接一些对角线,把这个多边形分成若干个区域。要求连接的对角线不能相交,每个点可以连出也可以不连出对角线。(即最终不要求所有区域均为三角形)问总方案数mod (10^9+7)的结果。
Input
一行一个整数n,n≤10^6
Output
一行一个整数表示答案。
Sample Input
5
Sample Output
11
超级卡特兰数(又称大施罗德数):
公式:
前几项: 1, 1, 3, 11, 45, 197, 903, 4279, 20793, 103049, 518859, 2646723, 13648869, 71039373, 372693519, 1968801519, 10463578353, 55909013009, 300159426963, 1618362158587, 8759309660445, 47574827600981, 259215937709463……
功能:应该和卡特兰数一样有很多的应用比如这题,但是很少见到有这个说法,也不清楚其他的例子,比较神秘的序列,就先记下递推公式和前几项吧
附:快速求逆元的方法:
令inv[i]表示i对p的逆元(p为奇质数),那么有
#include<stdio.h>
#define LL long long
#define mod 1000000007
LL inv[1000005] = {1,1}, f[1000005] = {1,1};
int main(void)
{
int n, i;
scanf("%d", &n);
for(i=2;i<=n;i++)
inv[i] = (mod-mod/i)*inv[mod%i]%mod;
for(i=2;i<=n;i++)
f[i] = ((6*i-3)*f[i-1]%mod-(i-2)*f[i-2]%mod+mod)%mod*inv[i+1]%mod;
printf("%lld\n", f[n-2]);
}