提交时间:2023-08-16 12:09:12
运行 ID: 98627
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 1e5 + 5; const int P = 1e9 + 7; int T; int n, m; int s[N]; int l[N]; int L[N]; int ll[N]; inline int C(int n, int m){ if(n < m) return 0; return s[n] * L[m] % P * L[n - m] % P; } signed main(){ ios::sync_with_stdio(false); cin.tie(0); cout.tie(0); s[0] = s[1] = 1; l[1] = 1; for(int i = 2; i <= 1e5; ++ i){ s[i] = (s[i - 1] * i) % P; l[i] = (P - P / i) * l[P % i] % P; } L[0] = 1; for(int i = 1; i <= 1e5; ++ i){ L[i] = L[i - 1] * l[i] % P; } /* ll[0] = 1; for(int i = 1; i <= 1e5; ++ i){ ll[i] = ll[i - 1] * L[i] % P; }*/ cin >> T; while(T --){ cin >> n >> m; int sum = 0; for(int i = m; i >= 0; -- i){ int x = C(n, i); // cout << i << ": " << x << '\n'; sum = (sum + x) % P; } cout << sum << '\n'; } } /* O(tk) 的有了 for(i 0 --> m) L[i] * L[n - i] = L[i] * (l[1] * l[2] * l[3] * ... * l[n - i]) L[0] * (l[1] * ... l[n]) + L[1] * (l[1] * ... l[n - 1]) + L[2] * (l[1] * ... l[n - 2]) . . + L[m] * (l[1] * ... l[n - m]) = (l[0]) * (l[0] * l[1] * ... l[n]) + (l[0] * l[1]) * (l[0] * l[1] * ... l[n - 1]) + (l[0] * l[1] * l[2]) * (l[0] * l[1] * ... l[n - 2]) . . + (l[0] * l[1] * ... l[m]) * (l[0] * l[1] * ... l[n - m]) = (l[0]) ^ 2 * (l[1] * ... l[n]) + (l[0] * l[1]) ^ 2 * (l[2] * ... l[n - 1]) */