这题之所以给你x是为什么?这其实还挺重要的,因为出题人想让你用隔板法,首先分类讨论,两种情况,第一种,第一段数字是左边的(定位0),那么就是把x个0分成(t+1)/2向上取整段,因为如果是奇数个段(等于t+1如果是奇数),那么一定是0结尾,接下来把n-x个1分成(t+1)/2向下取整,总共是两种情况, 如果是偶数个段,那左右都是(t+1)/2; 然后就是隔板法,在x中插入(t+1)/2个板子,(注意上下取整) 用组合数来解决。另外取模注意求逆元,快速幂预处理

#include <bits/stdc++.h>
#define int long long
#define pii pair<int,int>
using namespace std;

const int N = 1e6+5;
const int mod = 998244353;
int fact[N], infact[N];

int fac[N], ifac[N];  
int qmi(int a, int b) { 
	int res = 1;
	while (b > 0) {
		if (b & 1) {
			res = res * a % mod;
		}
		a = a * a % mod;
		b >>= 1;
	}
	return res;
}

void init() {
	fac[0] = ifac[0] = 1;
	for (int i = 1; i < N; i++) {
		fac[i] = fac[i - 1] * i % mod;
		ifac[i] = ifac[i - 1] * qmi(i, mod - 2) % mod;
	}
}

int C(int a, int b) { 
	return fac[a] * ifac[b] % mod * ifac[a - b] % mod;
}


int sv(int x, int k) {
	if (k > x) return 0;
	if (x == 0) return 1;

	return C(x - 1, k - 1);
}

void solve() {
	int n, x, t;
	cin >> n >> x >> t;

	int k1 = (t + 1) / 2, k2 = t + 1 - k1; 
	int ans1 = sv(x, k1) * sv(n - x, k2) % mod;//sv函数用于求解把x个球分成k堆的问题  sv(int x,int k)
	int ans2 = sv(x, k2) * sv(n - x, k1) % mod;

	int ans = (ans1 + ans2) % mod;

	cout << ans << endl;
}

signed main() {
	init();

	int T = 1;
	cin >> T;
	while (T--)
		solve();

	return 0;
}