首页 > 其他 > 详细

uva 11609 - Teams(组合数学+快速幂)

时间:2014-04-11 18:32:22      阅读:569      评论:0      收藏:0      [点我收藏+]

题目链接:uva 11609 - Teams


题目大意:给出n,表示说有n个人,标好1~n,现在选若干人组成一队,并且选出一个队长,问说可以选多少种队伍,队长,人数,成员不同均算不同的队伍。


解题思路:枚举人数为1、2....n的情况,那么就有1*C(n,1)+2*C(n,2)+3*C(n,3)+4*C(n,4) .....n*C(n,n),然后从中提取出n,每一项前的系数刚好与C约分。n*(C(n-1,0) + C(n-1,1) ....+C(n-1,n-2)+C(n,n)),注:C(n,n) = C(n-1,n-1)

然后后面的即为(1+1)^n的展开项。剩下的就是快速幂,注意要用long long。


#include <stdio.h>
#include <string.h>

typedef long long ll;
const ll MOD = 1000000007;

ll sPow (ll a, ll n) {
	ll x = 1;

	while (n) {
		if (n&1)
			x = (x * a) % MOD;

		n /= 2;
		a = (a * a) % MOD;
	}
	return x;
}

int main () {
	int cas;
	ll n;
	scanf("%d", &cas);
	for (int i = 1; i <= cas; i++) {
		scanf("%lld", &n);
		printf("Case #%d: %lld\n", i, n * sPow(2, n-1) % MOD);
	}
	return 0;
}


uva 11609 - Teams(组合数学+快速幂),布布扣,bubuko.com

uva 11609 - Teams(组合数学+快速幂)

原文:http://blog.csdn.net/keshuai19940722/article/details/23381053

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!