標籤:style blog http color io os ar 2014 sp
題目連結
題意:從N個人中選出K個人為一隻隊伍(1 <= K <= N),每個隊伍都要有一個隊長,當隊長不同時,所代表的隊伍也不同,求一共可以選出多少只隊伍。
思路:依題目可得ans = sum(i * C(i, n)),化簡可得ans = n * sum(C(i, n - 1)) = n * 2 ^ (n - 1)。之後用快速冪求解。
代碼:
#include <iostream>#include <cstdio>#include <cstring>#include <cmath>#include <algorithm>typedef long long ll;const int MOD = 1000000007;using namespace std;ll n;/*ll pow_mod(ll k) { if (k == 0) return 1; if (k == 1) return 2; ll a = pow_mod(k / 2); ll ans = a * a % MOD; if (k % 2) ans = ans * 2 % MOD; return ans;}*/ll pow_mod(ll k) { ll ans = 1; ll temp = 2; while (k) { if (k & 1) ans = ans * temp % MOD; k >>= 1; temp = (temp * temp) % MOD; } return ans;}int main() { int cas, t = 1; scanf("%d", &cas); while (cas--) { scanf("%lld", &n); ll ans = pow_mod(n - 1); ans = ans * n % MOD; printf("Case #%d: %lld\n", t++, ans); } return 0;}
UVA11609 - Teams(組合數學+快速冪)