hdu5673-Robot
2016-04-28 16:52
246 查看
题目:
http://acm.hdu.edu.cn/showproblem.php?pid=5673
好久没打BC,当时这场过了3题,hack了一个,马马虎虎吧,因为前三个题确实不难。
这个是那场的第四个题,其实难度不大。结果是ΣC(n,2i)*catalan[i],C(n,2i)好理解。
卡特兰数吗。。。。其实也不太负责,因为卡特兰数经常用在括号匹配啊啥的情况。。。参见这个吧。。
http://blog.csdn.net/hongchangfirst/article/details/8766529 http://blog.chinaunix.net/uid-26456800-id-3462158.html
当然,这题数据量比较大,建议用递推公式,涉及到求逆元,费马小定理+快速幂可以。
几个递推:Catalan[i] = ((4*i-2)/(i+1))*Catalan[i-1] , C(n, i) = ((n-i+1)/i)*C(n, i-1)。
至于网上人用的这个线性的。。。。inv[i]=(mod-mod/i)*inv[mod%i]%mod;。。。还没研究明白。。
代码:
View Code
http://acm.hdu.edu.cn/showproblem.php?pid=5673
好久没打BC,当时这场过了3题,hack了一个,马马虎虎吧,因为前三个题确实不难。
这个是那场的第四个题,其实难度不大。结果是ΣC(n,2i)*catalan[i],C(n,2i)好理解。
卡特兰数吗。。。。其实也不太负责,因为卡特兰数经常用在括号匹配啊啥的情况。。。参见这个吧。。
http://blog.csdn.net/hongchangfirst/article/details/8766529 http://blog.chinaunix.net/uid-26456800-id-3462158.html
当然,这题数据量比较大,建议用递推公式,涉及到求逆元,费马小定理+快速幂可以。
几个递推:Catalan[i] = ((4*i-2)/(i+1))*Catalan[i-1] , C(n, i) = ((n-i+1)/i)*C(n, i-1)。
至于网上人用的这个线性的。。。。inv[i]=(mod-mod/i)*inv[mod%i]%mod;。。。还没研究明白。。
代码:
#include <bits/stdc++.h> using namespace std; const int maxn = 1000000 + 100; typedef long long int64; const int64 mod = 1000000000 + 7; int64 inv[maxn]; int64 catalan[maxn], c[maxn]; int64 fpow( int x, int64 p ){ //cout << x << " " << p << endl; int64 ans = 1, sum = x; while(p){ if(p&1) ans = (ans * sum)%mod; sum = (sum * sum)%mod; p >>= 1; } return ans; } void Init(void){ inv[1] = 1; for( int i = 2; i < maxn; ++i ){ //inv[i]=(mod-mod/i)*inv[mod%i]%mod; inv[i] = fpow(i, mod-2); } catalan[0] = catalan[1] = 1; for( int i = 2; i < maxn; ++i ){ int a = 4*i-2, b = i+1; catalan[i] = catalan[i-1]*a%mod*inv[b]%mod; } //cout << catalan[3] << " " << catalan[4] << " " << catalan[5] << endl; } void solve(int n){ int64 ans = 1; c[0] = 1; for( int i = 1; i <= n; ++i ){ c[i] = (n-i+1)*c[i-1]%mod*inv[i]%mod; } for( int i = 1; i*2 <= n; ++i ){ ans = (ans + c[2*i]*catalan[i]%mod)%mod; } printf("%I64d\n", ans); } int main(void){ int T; scanf("%d", &T); Init(); while(T--){ int n; scanf("%d", &n); solve(n); } return 0; }
View Code
相关文章推荐
- 点击返回顶部
- 生产者和消费者模型
- oracle 查看锁表 清除锁表
- jquery中attr和prop的区别
- 二进制
- redis在PHP中的基本使用案例
- 百度地图开发步骤
- iOS之数据的存储(数据持久化)
- App 接口入门 初识
- C++与Lua5.3.2的相互调用
- Uva 11100 The Trip
- 解决screen报错:Directory '/var/run/screen' must have mode 777
- ObjectAnimator animator1 = ObjectAnimator.ofFloat(viewBG, "alpha", 1, 0);一些手机会出现的问题
- 十进制转化为二进制230
- CSS实现垂直居中
- [原创] 如何用Eclispe调试java -jar xxx.jar 方式执行的jar包
- Android--仿一号店货物详情轮播图动画效果
- popupTheme和theme
- network Driver , TDI(Transport Driver Interface) Drivers
- xcode 7.0后,网络加载失败,以及本地服务器资源加载失败解决