http://acm.xidian.edu.cn/problem.php?id=1158

解题关键:此题注意将$\sum\limits_{i = 0}^x {C_x^iC_y^{i + k}}$转化为$C_{x + y}^{x + k}$

利用二项式定理,

一方面,

${(1 + a)^y}{(1 + \frac{1}{a})^x}$的${a^k}$项的系数,第一个二项式的${a^j}$的系数$C_y^j$,第二个二项式的${a^{ - i}}$系数为$C_x^i$,令$j - i = k$,$j = i + k$,即$\sum\limits_{i = 0}^x {C_x^iC_y^{i + k}}$

另一方面,

${(1 + a)^y}{(1 + \frac{1}{a})^x} = {(1 + a)^{x + y}}{a^{ - x}}$,此时${a^k}$项的系数为$C_{x + y}^{x + k}$,得证。

1、打表

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+;
ll x,y,k;
ll fac[],inv[]; ll mod_pow(ll x,ll n,ll mod){
ll res=;
while(n){
if(n&) res=res*x%mod;
n>>=;
x=x*x%mod;
}
return res;
} ll Inv(ll x){
return mod_pow(x,mod-,mod);
} int main(){
fac[]=;
for(int i=;i<=;i++) fac[i]=fac[i-]*i%mod;//预处理一下,阶乘
inv[]=mod_pow(fac[],mod-,mod);//Fac[N]^{MOD-2}
for(int i=-;i>=;i--) inv[i]=inv[i+]*(i+)%mod; while(~scanf("%lld%lld%lld",&x,&y,&k)){
if(y==k) printf("1\n");
else if(y<k) printf("0\n");
// else printf("%lld\n",fac[x+y]*inv(fac[x+k])%mod*inv(fac[y-k])%mod);
else printf("%lld\n",(fac[x+y]%mod*inv[x+k]%mod*inv[y-k]%mod+mod)%mod);
}
return ;
}

2、打表+逆元实现

为什么是$n{!^{\bmod  - 2}}$

$n{!^{p - 2}}*n! = n{!^{p - 1}} = 1\bmod {\rm{ p;}}$(费马小定理)p为质数,此题中即为mod

 #include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll mod=1e9+;
ll x,y,k;
ll fac[],inv[]; ll mod_pow(ll x,ll n,ll mod){
ll res=;
while(n){
if(n&) res=res*x%mod;
n>>=;
x=x*x%mod;
}
return res;
} ll Inv(ll x){
return mod_pow(x,mod-,mod);
} int main(){
fac[]=;
for(int i=;i<=;i++) fac[i]=fac[i-]*i%mod;//预处理一下,阶乘
//inv[2000000]=mod_pow(fac[2000000],mod-2,mod);//Fac[N]^{MOD-2}
//for(int i=2000000-1;i>=0;i--) inv[i]=inv[i+1]*(i+1)%mod; while(~scanf("%lld%lld%lld",&x,&y,&k)){
if(y==k) printf("1\n");
else if(y<k) printf("0\n");
else printf("%lld\n",fac[x+y]*Inv(fac[x+k])%mod*Inv(fac[y-k])%mod);
//else printf("%lld\n",(fac[x+y]%mod*inv[x+k]%mod*inv[y-k]%mod+mod)%mod);
}
return ;
}

最新文章

  1. iOS上线...踩坑
  2. MYSQL EXPLAIN 很慢的原因
  3. MySQL 外键异常分析
  4. Windows Registry
  5. dubbo源码之三-模块依赖
  6. sql里将重复行数据合并为一行,数据用逗号分隔
  7. Android 第三方应用接入微信平台(2)
  8. Android学习----Activity
  9. JavaScript ,Python,java,C#,Go系列算法之【插入排序篇】
  10. VB6之阴影图层
  11. 架构师之路-&gt;架构师思维的培养
  12. Linux安装Sqlite
  13. Springboot中关于跨域问题的一种解决方法
  14. chrome 无头浏览器的使用
  15. WebAPI参数传值string转bool,int转bool相关问题
  16. Codeforces 1039D You Are Given a Tree [根号分治,整体二分,贪心]
  17. 『TensorFlow』SSD源码学习_其四:数据介绍及TFR文件生成
  18. 码代码的小女孩(来自noip贴吧)
  19. noip第17课作业
  20. Codeforces 405E Graph Cutting

热门文章

  1. Python基础(1)_python介绍、简单运算符
  2. IOS int NSInteger NSNumber区分
  3. dev系列之gridview
  4. Kuhn-Munkres算法 (剪辑)(备用)
  5. 剑指offer之 二维数组的查找
  6. 处理json的工具类({本类为处理json的工具类})
  7. 原生js图片懒加载特效
  8. node nvm
  9. 省选/NOI刷题Day1
  10. HihoCoder1339 Dice Possibility(概率DP+母函数)