题目链接
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; }
哔哔赖赖
虽然做出来了,但是做的太慢了啊,大佬都个位数分钟做出来,这个签到题我做了一小时,好丢人!
继续努力啊!
最后的最后,我想问上天一句:我什么时候才能成为大佬啊啊啊!!!