Untitled

 avatar
unknown
plain_text
16 days ago
2.3 kB
2
Indexable
#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