Untitled
#include <bits/stdc++.h> using namespace std; #define Chris "test" #define FOR(i, a, b) for(int i = (a); i < (b); ++i) #define FORD(i, a, b) for(int i = (a); i <= (b); ++i) #define REP(i, a, b) for(int i = (a); i > (b); --i) #define REPD(i, a, b) for(int i = (a); i >= (b); --i) #define FORE(i, v) for(__typeof((v).begin()) i = (v).begin(); i != (v).end(); i++) #define All(v) (v).begin(), (v).end() #define MARK(i) (1LL << (i)) #define BIT(x, i) (((x) >> (i)) & 1) #define pb push_back #define pf push_front #define pob pop_back #define pof pop_front #define fi first #define se second #define el "\n" #define Chris_No_Luv signed main() #define faster ios_base::sync_with_stdio(false); cin.tie(nullptr); #define file(Chris) if(fopen(Chris".inp", "r")){freopen(Chris".inp", "r", stdin);freopen(Chris".out", "w", stdout);} typedef long long ll; typedef unsigned long long ull; typedef long double ld; typedef pair<int, int> pii; typedef vector<int> vii; typedef set<int> sii; typedef map<int, int> mii; typedef stack<int> sti; typedef deque<int> dqi; typedef queue<int> quei; typedef unordered_map<int, int> umii; const int mod = (int) 1000000007; const int INF = (int) 30000000; const int dx[4] = {1, 0, -1, 0}; const int dy[4] = {0, 1, 0, -1}; int t; vector<long long> a(INF + 5), b(INF + 1); ll pow(ll a, ll b, ll mod) { ll res = 1; while(b > 0) { if(b & 1) res = res * a % mod; a = a * a % mod; b /= 2; } return res; } void tinh() { a[0] = b[0] = 1; FORD(i, 1, INF) { a[i] = a[i - 1] * i % mod; } b[INF] = pow(a[INF], mod - 2, mod); REPD(i, INF - 1, 1) { b[i] = b[i + 1] * (i + 1) % mod; } } ll C(int n, int k) { if(k > n || k < 0) return 0; return a[n] * b[k] % mod * b[n - k] % mod; } Chris_No_Luv { faster file(Chris) cin >> t; tinh(); while(t--) { int m, n; cin >> m >> n; ll res = 0; int tmp = min(m, n); FORD(i, 0, tmp) { ll w = C(m + n - 2 * i, m - i) * C(m + n - i, i) % mod; res = (res + w) % mod; } cout << res << el; } return 0; }
Leave a Comment