跟我 烨哥学了 一下 看了看它的代码

其实 和他的想法差不多

题目意思 比赛的时候想出来了

差在那个取模

还有 写的过程

欠练

inv 函数 就是题目的意思 我们 取消了 除法 直接 按照题目的那样 去写
这也是我比赛没ac的原因

由题目可知 这道题有n个黑球 m个白球 , 摸q次 摸到k个黑球的概率

我们可以知道 一个 数学公式 :

http://lx666.xiaopangkj.space/c++%e6%95%99%e5%ad%a6a/%e5%be%ae%e4%bf%a1%e6%88%aa%e5%9b%be_20220403200406.png

也就是我们高中数学学的 概率 选 多少

code 如下:

#define  _CRT_SECURE_NO_WARNINGS
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 2e5 + 50;
const int mod = 1e9 + 7;
ll a[N];
ll n, m, k, q;
ll qmi(ll a, ll b) {
	ll ans = 1;
	while (b) {
		if (b & 1)ans = (ans * a) % mod;
		a = (a * a) % mod;
		b >>= 1;
	}
	return ans;
}
ll inv(ll a, ll b) {
	return (a * qmi(b, mod - 2)) % mod;
}
void solve()
{
	cin >> n >> m >> k >> q;
	if (k > n) {
		cout << 0 << endl;
		return;
	}
	ll ans1 = inv(a[n], a[n - k]) % mod;
	ll ans2 = inv(a[n + m], a[n + m - k]) % mod;
	ans1 = qmi(ans1, q) % mod;
	ans2 = qmi(ans2, q) % mod;
	ll ans = inv(ans1, ans2) % mod;
	ans %= mod;
	cout << ans << endl;
}
int main()
{
	int t;
	a[0] = 1;
	for (int i = 1; i <= N - 1; i++) {
		a[i] = a[i-1] * i;
		a[i] %= mod;
	}
	cin >> t;
	while (t--) {
		solve();
	}
}