CF1942G Bessie and Cards
CF1942G Bessie and Cards
先判断一组方案是否成功。设还能抓的牌的数量为
注意到失败的方案一定有
经典格路计数。枚举在第
设
时间复杂度
#include <bits/stdc++.h>
using namespace std;
using ll = long long;
using pii = pair<int, int>;
using pll = pair<ll, ll>;
using pdi = pair<double, int>;
using pdd = pair<double, double>;
using ull = unsigned long long;
#define ppc(x) __builtin_popcount(x)
#define clz(x) __builtin_clz(x)
bool Mbe;
mt19937 rnd(chrono::steady_clock::now().time_since_epoch().count());
//mt19937_64 rnd(1064);
int rd(int l, int r) {
return rnd() % (r - l + 1) + l;
}
constexpr int mod = 998244353;
void addt(int &x, int y) {
x += y, x >= mod && (x -= mod);
}
int add(int x, int y) {
return x += y, x >= mod && (x -= mod), x;
}
int ksm(int a, ll b) {
int s = 1;
while(b) {
if(b & 1) s = 1ll * s * a % mod;
a = 1ll * a * a % mod, b >>= 1;
}
return s;
}
constexpr int Z = 1e6 + 5;
int fc[Z], ifc[Z], inv[Z];
int bin(int n, int m) {
if(n < m) return 0;
return 1ll * fc[n] * ifc[m] % mod * ifc[n - m] % mod;
}
void init_fac(int Z) {
for(int i = fc[0] = 1; i < Z; i++) fc[i] = 1ll * fc[i - 1] * i % mod;
ifc[Z - 1] = ksm(fc[Z - 1], mod - 2);
for(int i = Z - 2; ~i; i--) ifc[i] = 1ll * ifc[i + 1] * (i + 1) % mod;
for(int i = 1; i < Z; i++) inv[i] = 1ll * fc[i - 1] * ifc[i] % mod;
}
// ---------- templates above ----------
int n, A, B, C;
void solve(int T) {
cin >> A >> B >> C, A += 5, B = 0;
int ans = 0, n = A + C;
for(int i = 5; i <= n; i += 2) {
int nc = i - 5 >> 1, na = i - nc;
if(na > A || nc > C) continue;
int coef = 1ll * add(bin(i - 1, na - 1), mod - (i > na ? bin(i - 1, na) : 0)) * bin(n - i, A - na) % mod;
addt(ans, 1ll * coef * add(bin(A, 5), mod - bin(na, 5)) % mod);
}
cout << (1 + mod - 1ll * ans * ifc[n] % mod * fc[C] % mod * fc[A - 5] % mod * 120 % mod) % mod << "\n";
}
/*
1
2 0 1
*/
bool Med;
signed main() {
fprintf(stderr, "%.3lf MB\n", (&Mbe - &Med) / 1048576.0);
init_fac(Z);
int T = 1;
cin >> T;
while(T--) solve(T);
fprintf(stderr, "%.3lf ms\n", 1e3 * clock() / CLOCKS_PER_SEC);
return 0;
}
/*
g++ a.cpp -o a -std=c++14 -O2 -DALEX_WEI
*/