UVA 11609 (组合数学)
2016-06-07 22:52
302 查看
题意:求sigma(i*C(n, i)).
因为i*C(n, i) = i*n*(n-1)*...*(n-i+1)/i! = n*(n-1)*...*(n-2+1)/(i-1)! = (n-i+1)*C(n, i-1),
所以(i-1)*C(n,i-1)+i*C(n, i) = n*C(n, i-1),所以这个求和式的没两项都能合并,提出一个
n的公约数后,最后就是n*[C(n,0)+C(n,2)+C(n,4)+...] = n*2^(n-1).奇偶的情况是一样
的都是这个结果.
因为i*C(n, i) = i*n*(n-1)*...*(n-i+1)/i! = n*(n-1)*...*(n-2+1)/(i-1)! = (n-i+1)*C(n, i-1),
所以(i-1)*C(n,i-1)+i*C(n, i) = n*C(n, i-1),所以这个求和式的没两项都能合并,提出一个
n的公约数后,最后就是n*[C(n,0)+C(n,2)+C(n,4)+...] = n*2^(n-1).奇偶的情况是一样
的都是这个结果.
#include <cstdio> #include <cstring> #include <cmath> #include <algorithm> #include <iostream> #include <map> #include <set> #include <vector> #include <queue> using namespace std; const long long mod = 1e9+7; long long n; long long qpow (long long a, long long b) { if (b == 0) return 1; long long ans = qpow (a, b>>1); ans = ans*ans % mod; if (b&1) ans = ans*a%mod; return ans; } int main () { int t, kase = 0; cin >> t; while (t--) { cin >> n; printf ("Case #%d: ", ++kase); cout << (n*qpow (2, n-1))%mod << endl; } return 0; }
相关文章推荐
- 手机开发实战98——MMS介绍5
- HttpClient4.4 登录知乎(详细过程)
- python函数
- 手机开发实战97——MMS介绍4
- 结合Scikit-learn介绍几种常用的特征选择方法
- c++:工资类
- 手机开发实战96——MMS介绍3
- 状态和过度
- Leetcode Isomorphic Strings
- 手机开发实战95——MMS介绍2
- Mybatis实体类和表映射
- python声明源文件编码格式、选择解释器
- apt-get
- [sh]函数+条件表达式
- 手机开发实战94——MMS介绍1
- 实现段前自动缩行的代码
- Apache Flink fault tolerance源码剖析(五)
- 自己写bootloader之问题:链接时出现undefined reference to '__umodsi3'
- JDBC 模糊查询 传参
- 手机开发实战93——PUSH介绍3