以三个人组队为例,3组合是:C(3,0)=1,3,3,1。还有队长的选择。有
1*0,3*1,3*2,1*3种。
组合数: 1 3 3 1
队长的选择: 0 1 2 3
原本选择数是1*0+3*1+3*2+1*3=12种。现在用另一种方法计算,观察到左右是对称的,因此1的数量,3的数量都是3个,就等于(2^3)*4/2=12种。
#include <iostream> #include <cstdio> #include <cmath> #include <algorithm> #include <vector> #include <iomanip> #include <cstring> #include <map> #include <queue> #include <set> #include <cassert> #include <stack> #include <bitset> #define mkp make_pair using namespace std; const double EPS=1e-8; typedef long long lon; typedef unsigned long long ull; const lon SZ=5007,INF=0x7FFFFFFF,mod=1000000007; void init() { } void work() { } lon pow(lon x,lon n) { lon res=1,ele=x; for(;n;) { if(n&1) { res=res*ele%mod; } ele=ele*ele%mod; n/=2; } return res; } int main() { std::ios::sync_with_stdio(0); //freopen("d:\\1.txt","r",stdin); ull casenum; cin>>casenum; //cout<<casenum<<endl; for(ull time=1;time<=casenum;++time) //for(ull time=1;cin>>n,n;++time) { init(); work(); lon n; cin>>n; lon res=pow(2LL,n-1); res=res%mod*(n)%mod; res%=mod; res+=mod; res%=mod; cout<<"Case #"<<time<<": "<<res<<endl; } return 0; }