hdu5673 卡特兰数+线性求逆元
2016-05-11 19:43
281 查看
机器人可以向左走或向右走或不动,在原点时只可以向右走,从原点出发N步回到原点公有多少种走法。
走的那几步为 C(n,2*i), 走2*i步的方法等于Catalan(i)。。。入栈对应向右走,出栈对应向左走,不能从右忘左越过原点对应空栈的时候不能出栈。。。
然后就是i从1到n/2 ,对 C(n,2*i) * Catalan(i)求和
首先为什么要用逆元。。 (a/b) %p 不等于(a%p) / (b%p)
当a或b太大的时候,(a/b) %p = a * b^-1 %p
当题太变态要从1~n求逆元,log p 也T的时候。。。反正我之前没听过线性求逆元(当然其实逆元渣渣表示之前也不会
inv[i] = ((p- p/ i )*inv[p % i]) %p
p = k*i +r (r< i, k = p/i, r = p % i)
k*i +r =0 (mod p)
两边同乘 i^(-1) ,r ^(-1)
i^(-1) = -k * r^(-1) = -(p/i) * inv[p mod i] = ((p- p/
i )* inv[p % i]) % p
走的那几步为 C(n,2*i), 走2*i步的方法等于Catalan(i)。。。入栈对应向右走,出栈对应向左走,不能从右忘左越过原点对应空栈的时候不能出栈。。。
然后就是i从1到n/2 ,对 C(n,2*i) * Catalan(i)求和
首先为什么要用逆元。。 (a/b) %p 不等于(a%p) / (b%p)
当a或b太大的时候,(a/b) %p = a * b^-1 %p
当题太变态要从1~n求逆元,log p 也T的时候。。。反正我之前没听过线性求逆元(当然其实逆元渣渣表示之前也不会
inv[i] = ((p- p/ i )*inv[p % i]) %p
p = k*i +r (r< i, k = p/i, r = p % i)
k*i +r =0 (mod p)
两边同乘 i^(-1) ,r ^(-1)
i^(-1) = -k * r^(-1) = -(p/i) * inv[p mod i] = ((p- p/
i )* inv[p % i]) % p
#include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <vector> #include <stack> #include <cmath> #include <queue> #include <set> using namespace std; #define ll long long #define FOR(i,j,k) for(int i =j; i<=k ;i++) #define ll long long const int maxn = 1000010; const ll mod = 1000000007; ll cat[maxn], inv[maxn],c[maxn]; int main() { int T; scanf("%d",&T); inv[1] = 1; FOR(i,2,maxn-5) inv[i] = ((mod-mod / i )* inv[mod % i]) % mod; cat[1] = 1; FOR(i, 2, maxn-5) cat[i] = cat[i-1] * (4*i -2)% mod * inv[i+1]% mod; while(T--) { int n; scanf("%d", &n); c[1] = n; for(int i= 2; i<= n; i++) c[i]= c[i-1] * (n- i +1)% mod *inv[i] % mod; ll ans = 1; FOR( i, 1, n/2) ans = (ans +c[2*i] * cat[i]% mod) % mod; printf("%lld\n",ans); } return 0; }
相关文章推荐
- JDBC系列:(1)通过JDBC连接数据库
- 左旋转字符串
- EntifyFramework6.0延迟加载、动态代理实例
- 畅通工程
- 8大排序算法图文讲解
- sql插入并返回自增主键
- lower power设计中的DVFS设计
- xlistview上拉加载下拉刷新
- Java 7之基础 - 强引用、弱引用、软引用、虚引用(总结的很好)
- QLatin1String类
- 用函数重载输出两数乘积
- jQuery中Ajax的基本使用(1)
- 二叉树迭代遍历
- saltstack之(十)扩展组件salt-ssh
- 第五次c++实验
- Python 编码简单说
- 循环结构-5.11总结
- DateUtil
- ZooKeeper实战(三)-ZooKeeper常用命令
- eclipse开发工具报错gc overhead limit exceeded的解决方案