题目链接

https://ac.nowcoder.com/acm/problem/20701

题目分析

就是求所有情况数,应该能明白吧。举例吧。可以4个人A、B、C、D,可以选任意1个人去,A去orB去orC去orD去;或者选任意2个人去,A队BorA队CorA队D or B队AorB队C ……;或者任选3个人……;或者任选4个人。

解题思路

比如选i个人去,那么这i个人又要选出一个队长,每个人都可以当队长,因此当选取人数为i时,情况数为iC(n,i) 。
i从1到n累加,sum = 1C(n,1) + 2C(n,2) + 3C(n,3) + …… + (n-1)C(n,(n-1)) + n*C(n,n)。
我们知道C(n,1) + C(n,2) + C(n,3) + …… + C(n,(n-1)) + C(n,n) = 2^n
因为C(n,n)=C(n,1),C(n,n-1)=C(n,2) ……
对称结合一下就有 sum = n/2
(C(n,1) + C(n,2) + C(n,3) + …… + C(n,(n-1)) + C(n,n)) = n/22^n = n2^(n-1) (注意:这里的/不是整除,因此能与后面的2约去一个)

过程实现

就是快速幂,也不想再写了,直接链接神仙讲的,真的棒!
https://blog.csdn.net/qq_19782019/article/details/85621386

AC代码

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
const ll mod=1000000007;
ll ksm(ll x,ll p){
    ll sum=1;
    while(p>0){
        if(p&1LL) sum=x*sum%mod;
        p>>=1;
        x=x*x%mod;
    }
    return sum;
}
int main(){
    int n;
    cin>>n;
    cout<<n*ksm(2,n-1)%mod;
} 

哔哔赖赖

虽然做出来了,但是做的太慢了啊,大佬都个位数分钟做出来,这个签到题我做了一小时,好丢人!
继续努力啊!
最后的最后,我想问上天一句:我什么时候才能成为大佬啊啊啊!!!