A:Chat Group
题意:给出一个n, k 计算C(n, k) -> C(n,n) 的和
思路:k只有1e5 反过来想,用总的(2^ n) 减去 C(n, 0) -> C(n, k - 1), 预处理逆元,
1 #include <bits/stdc++.h> 2 3 using namespace std; 4 5 #define ll long long 6 #define N 100010 7 8 const ll MOD = (ll)1e9 + 7; 9 10 int t; 11 ll n, k; 12 ll inv[N]; 13 14 inline void Init() 15 { 16 inv[1] = 1; 17 for (int i = 2; i < N; ++i) inv[i] = inv[MOD % i] * (MOD - MOD / i) % MOD; 18 } 19 20 inline ll qpow(ll x, ll n) 21 { 22 ll base = x; 23 ll ans = 1; 24 while (n) 25 { 26 if (n & 1) ans = (ans * base) % MOD; 27 base = base * base % MOD; 28 n >>= 1; 29 } 30 return ans; 31 } 32 33 int main() 34 { 35 Init(); 36 scanf("%d", &t); 37 for (int kase = 1; kase <= t; ++kase) 38 { 39 scanf("%lld%lld", &n, &k); 40 printf("Case #%d: ", kase); 41 if (k > n) 42 { 43 puts("0"); 44 continue; 45 } 46 ll ans = qpow(2, n); 47 ll tmp = 1; 48 for (int i = 0; i < k; ++i) 49 { 50 ans = (ans - tmp + MOD) % MOD; 51 tmp = tmp * (n - i) % MOD * inv[i + 1] % MOD; 52 } 53 printf("%lld\n", ans); 54 } 55 return 0; 56 }