Blog / 阅读

UVA 11609 - Teams(数论+推理+快速幂)

by admin on 2014-04-13 13:07:04 in ,



题意:n个人,要挑k个人出来组队,并选一个队长,问有多少不同选法
思路::很容易推出答案是C(n, 1) * 1 + C(n, 2) * 2 +...+ C(n,n) * n。即C(n,i) * i (1 <= i <= n) 的和,化简公式为 n * C(n - 1, i) = n * (1 + 1)^n = n * 2^n,然后用快速幂解决。
代码:
[cpp] view plaincopy
#include <stdio.h>  
#include <string.h>  
  
const long long MOD = 1000000007;  
int t;  
long long n;  
  
long long pow_mid(long long n, long long k) {  
    if (k == 0) return 1;  
    if (k <= 1) return n % MOD;  
    long long ans = pow_mid(n * n % MOD, (k>>1)) % MOD;  
    if (k&1) ans = ans * n % MOD;  
    return ans;  
}  
  
int main() {  
    int cas = 0;  
    scanf("%d", &t);  
    while (t--) {  
        scanf("%lld", &n);  
        printf("Case #%d: %lld\n", ++cas, n * pow_mid(2, n - 1) % MOD);  
    }  
    return 0;  
}  



写评论

相关文章

上一篇:c# 中 StatusStrip控件的使用

下一篇:DES加密算法详解- -

评论

写评论

* 必填.

分享

栏目

赞助商


热门文章

Tag 云