noip2011 计算系数
2015-07-27 20:00
447 查看
地址:http://www.luogu.org/problem/show?pid=1313#
分析:
首先要知道二次项定理(和杨辉三角)
然后要知道组合式的递推方程
递推方程有两个,一个是C(n,m)=C(n,m-1)*[(n-m+1)/m]
另一个是C(n,m)=C(n-1,m-1)+C(n-1,m)
这里显然要用第二个,第一个的话会出现小数,不利于long long 和取模操作
在这里pow()操作写了快速幂
代码:
分析:
首先要知道二次项定理(和杨辉三角)
然后要知道组合式的递推方程
递推方程有两个,一个是C(n,m)=C(n,m-1)*[(n-m+1)/m]
另一个是C(n,m)=C(n-1,m-1)+C(n-1,m)
这里显然要用第二个,第一个的话会出现小数,不利于long long 和取模操作
在这里pow()操作写了快速幂
代码:
#include <cstdio> #include <algorithm> #include <cstring> using namespace std; const int MOD=10007,Tmax=1005; long long int a,b,n,s,t,C[Tmax][Tmax],sum; long long int Tpow(int x,int p) { long long int tmp=x,ans=1; while(p>0) { if(p&1) ans=(ans*tmp)%MOD; tmp=(tmp*tmp)%MOD; p>>=1; } return ans; } void work() { int i,j; for(i=1;i<=n;i++) { C[i][0]=C[i][i]=1; for(j=1;j<=i-1;j++) C[i][j]=(C[i-1][j-1]+C[i-1][j])%MOD; } sum=(C [s]*Tpow(a,s)*Tpow(b,t))%MOD; return; } int main() { scanf("%lld %lld %lld %lld %lld",&a,&b,&n,&s,&t); work(); printf("%lld",sum); return 0; }
相关文章推荐
- uva12563 Jin Ge Jin Qu hao
- poj 2251 Dungeon Master 搜索
- IO_Card 驱动
- HDU 2222 目标串中模式串数量(AC自动机)
- linux学习(八) XShell上传、下载本地文件到linux服务器
- html5压缩图片并上传
- json 解析解乱码
- LeetCode Next Permutation(字典序排列)
- windows平台下mysql安装
- IOS--UI--LessonXib 可视化编程
- 安装Centos7后恢复windows启动项(非UEFI启动)
- 抽象基类(ABC)
- Appium环境配置
- HTML5 自制本地网页视频播放器
- HDU 2487 Ugly Windows
- Web应用程序客户端
- HDU1728 逃离迷宫
- uva725(除法)
- Oracle OCP笔记(27)RMAN备份
- 如何调用另一个python文件中的代码