20200620日常总结——一道 UVA 数论好题

UVA11609 \color{green}{\texttt{UVA11609}} UVA11609

[Problem] \color{blue}{\texttt{[Problem]}} [Problem]

  • n n n 个人,选一个或多个参赛,其中一名是队长,求方案数。
  • 参赛者不同或参赛者相同队长不同算不同方案。
  • 但选参赛者的顺序不同记为相同,即 1 , 2 , 3 1,2,3 1,2,3 2 , 3 , 1 2,3,1 2,3,1 记为相同。
  • 答案对 1 × 1 0 9 + 7 1\times 10^9+7 1×109+7 取模, 1 ≤ n ≤ 1 × 1 0 9 1 \leq n \leq 1\times 10^9 1n1×109

[Soluntion] \color{blue}{\texttt{[Soluntion]}} [Soluntion]

我们知道,从 n n n 个人选 i i i 个人的方案数为 ( n i ) \binom {n}{i} (in) C n i C_{n}^{i} Cni 种,算上队长,一共是 C n i × i C_{n}^{i} \times i Cni×i 种方案。

所以枚举 i i i 可以得到总方案数为:

ans = ∑ i = 0 n ( n i ) × i = ∑ i = 0 n 2 [ i + ( n − i ) ] × C n i = ∑ i = 0 n 2 n × C n i = n × 2 n − 1 \begin{aligned} \texttt{ans}&=\sum\limits_{i=0}^{n} \binom {n}{i}\times i\\ &=\sum\limits_{i=0}^{\dfrac{n}{2}} [i+(n-i)] \times C^{i}_{n}\\ &=\sum\limits_{i=0}^{\dfrac{n}{2}} n\times C^{i}_{n}\\ &=n \times 2^{n-1} \end{aligned} ans=i=0n(in)×i=i=02n[i+(ni)]×Cni=i=02nn×Cni=n×2n1

其中,第二步是利用了 C n i = C n n − i C^{i}_{n}=C^{n-i}_{n} Cni=Cnni 这一条性质,而最后一步则是利用了:

∑ i = 1 n ( n i ) = 2 n \sum\limits_{i=1}^{n} \binom{n}{i}=2^n i=1n(in)=2n

[code] \color{blue}{\texttt{[code]}} [code]

const int mod=1e9+7;
inline int ksm(int a,int b){
	register int res=1;
	while (b){
		if (b&1) res=1ll*res*a%mod;
		a=1ll*a*a%mod;b>>=1;
	}
	return res;
}
inline int f(int n){
	return 1ll*n*ksm(2,n-1)%mod;
}
int test_number,n,g;
int main(){
	scanf("%d",&test_number);
	while (test_number--){
		scanf("%d",&n);//输入参赛人数 
		printf("Case #%d: %d\n",++g,f(n));
	}
}

你可能感兴趣的:(数论;数学,快速幂,组合数学)