QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#234773 | #6698. Flipping Game | EndPB | AC ✓ | 119ms | 6320kb | C++17 | 1.9kb | 2023-11-01 22:12:18 | 2023-11-01 22:12:18 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
#define endl '\n'
const ll N = 1e5 + 5, mod = 998244353;
ll n, m;
string s, st;
ll dp[205][205];
ll fac[2 * N], invfac[2 * N];
ll quick_pow(ll a, ll b) {
if (a == 0)return 0;
ll ans = 1;
while (b) {
if (b & 1)ans = ans * a % mod;
a = a * a % mod;
b = b >> 1;
}
return ans;
}
ll inv(ll x) {
return quick_pow(x, mod - 2);
}
void init() {
fac[0] = invfac[0] = 1;
for (int i = 1; i < N; i++) {
fac[i] = fac[i - 1] * i % mod;
}
invfac[N - 1] = inv(fac[N - 1]);
for (int i = N - 2; i >= 1; i--) {
invfac[i] = invfac[i + 1] * (i + 1) % mod;
}
}
ll C(ll a, ll b) {
if (b < a)return 0;
//assert(a >= 0 && b >= 0 && b - a >= 0);
if (a >= 0 && b >= 0 && b - a >= 0);
else return 0;
return fac[b] * invfac[b - a] % mod * invfac[a] % mod;
}
void solve() {
ll k;
cin >> n >> m >> k;
cin >> s;
cin >> st;
ll cnt = 0;
for (int i = 0; i < n; i++) {
if (s[i] != st[i])cnt++;
}
for (int i = 0; i <= m; i++) {
for (int j = 0; j <= n; j++) {
dp[i][j] = 0;
}
}
dp[0][0] = 1;
for (int i = 1; i <= m; i++) {
for (int j = 0; j <= n; j++) {
for (int u = 0; u <= j; u++) {
if (k - u > n - j)continue;
if (j + k - 2 * u < 0 || j + k - 2 * u > n)continue;
dp[i][j + k - 2 * u] += dp[i - 1][j] * C(u, j) % mod * C(k - u, n - j) % mod;
dp[i][j + k - 2 * u] %= mod;
}
}
}
cout << dp[m][cnt] * inv(C(cnt, n) % mod) % mod << endl;
}
int main() {
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
int _ = 1;
init();
cin >> _;
while (_--)
solve();
return 0;
}
这程序好像有点Bug,我给组数据试试?
詳細信息
Test #1:
score: 100
Accepted
time: 2ms
memory: 5256kb
input:
3 3 2 1 001 100 3 1 2 001 100 3 3 2 001 100
output:
2 1 7
result:
ok 3 number(s): "2 1 7"
Test #2:
score: 0
Accepted
time: 119ms
memory: 6320kb
input:
1000 8 50 2 11111001 01100001 13 4 5 0010011001101 0000001010010 15 58 12 011111110110100 011010000101000 15 30 2 000101100111101 100010100110000 16 99 15 0111011010111101 1000100101011100 7 73 1 0010010 1010111 1 45 1 1 1 15 64 4 111000001000100 111000110011011 13 16 6 0000001101000 0101001010111 5...
output:
0 0 0 0 0 565123576 0 671397628 866048220 0 0 0 934159397 0 0 0 657964873 0 0 0 297620792 518284447 16636231 1 294524820 259008109 0 0 0 0 0 0 990349196 899244686 0 0 497963164 0 49814547 0 0 0 0 0 529815127 411739397 562040211 0 0 0 0 0 0 0 531433326 0 77531359 703399699 0 0 0 1 0 896329183 0 0 0 0...
result:
ok 1000 numbers