QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#115313 | #2354. Ook | ckiseki# | WA | 888ms | 53772kb | C++20 | 3.8kb | 2023-06-25 16:46:35 | 2023-06-25 16:46:37 |
Judging History
answer
#include <bits/stdc++.h>
using namespace std;
#ifdef CKISEKI
#define safe cerr << __PRETTY_FUNCTION__ << " line " << __LINE__ << " safe\n"
#define debug(a...) debug_(#a, a)
#define orange(a...) orange_(#a, a)
template <typename ...T>
void debug_(const char *s, T ...a) {
cerr << "\e[1;32m(" << s << ") = (";
int cnt = sizeof...(T);
(..., (cerr << a << (--cnt ? ", " : ")\e[0m\n")));
}
template <typename I>
void orange_(const char *s, I L, I R) {
cerr << "\e[1;32m[ " << s << " ] = [ ";
for (int f = 0; L != R; ++L)
cerr << (f++ ? ", " : "") << *L;
cerr << " ]\e[0m\n";
}
#else
#define safe ((void)0)
#define debug(...) safe
#define orange(...) safe
#endif
namespace {
constexpr int MOD = 998244353;
int modadd(int a, int b) {
return a + b >= MOD ? a + b - MOD : a + b;
}
int modsub(int a, int b) {
return a - b < 0 ? a - b + MOD : a - b;
}
int modmul(int64_t a, int64_t b) {
return static_cast<int>(a * b % MOD);
}
int modpow(int a, int64_t k) {
int r = 1;
while (k) {
if (k & 1) r = modmul(r, a);
k >>= 1; a = modmul(a, a);
}
return r;
}
int modinv(int a) {
return modpow(a, MOD - 2);
}
struct NTT {
static constexpr int maxn = 1 << 22;
int roots[maxn];
NTT() {
int r = modpow(3, (MOD - 1) / maxn);
for (int i = maxn >> 1; i; i >>= 1) {
roots[i] = 1;
for (int j = 1; j < i; ++j)
roots[i + j] = modmul(roots[i + j - 1], r);
r = modmul(r, r);
}
}
void operator()(int F[], int n, bool inv = false) {
for (int i = 0, j = 0; i < n; ++i) {
if (i < j) swap(F[i], F[j]);
for (int k = n >> 1; (j ^= k) < k; k >>= 1);
}
for (int s = 1; s < n; s *= 2) {
for (int i = 0; i < n; i += s * 2) {
for (int j = 0; j < s; ++j) {
int a = F[i + j];
int b = modmul(F[i + j + s], roots[s + j]);
F[i + j] = modadd(a, b);
F[i + j + s] = modsub(a, b);
}
}
}
if (inv) {
int invn = modinv(n);
for (int i = 0; i < n; ++i)
F[i] = modmul(F[i], invn);
reverse(F + 1, F + n);
}
}
} ntt;
vector<int> calc(string_view s1, string_view s2) {
static int a[NTT::maxn], b[NTT::maxn];
vector<int> ans(s1.size());
for (int x : {'o', 'k'}) {
int y = 'o' ^ 'k' ^ x;
memset(a, 0, sizeof(a));
memset(b, 0, sizeof(b));
for (size_t i = 0; i < s1.size(); ++i)
a[i] = s1[i] == x;
for (size_t i = 0; i < s2.size(); ++i)
b[i] = s2[i] == y;
reverse(b, b + s2.size());
ntt(a, NTT::maxn);
ntt(b, NTT::maxn);
for (int i = 0; i < NTT::maxn; ++i)
a[i] = modmul(a[i], b[i]);
ntt(a, NTT::maxn, true);
for (size_t i = s2.size() - 1; i < s1.size(); ++i)
ans[i] += a[i];
}
return ans;
}
} // namespace
int main() {
cin.tie(nullptr)->sync_with_stdio(false);
int o, k;
cin >> o >> k;
string s1, s2;
cin >> s1 >> s2;
auto to_v = [o, k](char c) {
if (c == 'o') return o;
return k;
};
vector<int> val(s1.size());
for (size_t i = 0; i < s1.size(); ++i) {
if (i) val[i] = val[i - 1];
val[i] += to_v(s1[i]);
if (i >= s2.size())
val[i] -= to_v(s1[i - s2.size()]);
}
auto n_match = calc(s1, s2);
int pre = 0;
vector<int> dp(s1.size());
for (size_t i = s2.size() - 1; i < s1.size(); ++i) {
dp[i] = val[i] >> n_match[i];
dp[i] += pre;
pre = max(pre, dp[i - (s2.size() - 1)]);
}
cout << *max_element(dp.begin(), dp.end()) << '\n';
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 867ms
memory: 52628kb
input:
2 1 ookookook koo
output:
10
result:
ok single line: '10'
Test #2:
score: 0
Accepted
time: 868ms
memory: 52572kb
input:
1 3 koooooook ?
output:
13
result:
ok single line: '13'
Test #3:
score: 0
Accepted
time: 873ms
memory: 52636kb
input:
1000 0 kookoo ook
output:
2000
result:
ok single line: '2000'
Test #4:
score: 0
Accepted
time: 864ms
memory: 52636kb
input:
21 1 ooo kkk
output:
7
result:
ok single line: '7'
Test #5:
score: 0
Accepted
time: 860ms
memory: 52576kb
input:
1 0 ookko k??ko
output:
1
result:
ok single line: '1'
Test #6:
score: 0
Accepted
time: 867ms
memory: 52556kb
input:
5 8 koookokkok oo
output:
32
result:
ok single line: '32'
Test #7:
score: 0
Accepted
time: 861ms
memory: 52564kb
input:
12 13 kkokoookokkooko ?ooo??ook?k?
output:
18
result:
ok single line: '18'
Test #8:
score: 0
Accepted
time: 881ms
memory: 52632kb
input:
8 9 kkkkkkkkokkkokkokkok o????k???oo?o
output:
28
result:
ok single line: '28'
Test #9:
score: 0
Accepted
time: 878ms
memory: 52600kb
input:
2 11 kkkoooooooookkookookokooo kkkokkkok?ok??okok
output:
1
result:
ok single line: '1'
Test #10:
score: 0
Accepted
time: 870ms
memory: 52604kb
input:
0 14 kkookookkkokkkokkoooookokkkokk oooo?kooo?k
output:
22
result:
ok single line: '22'
Test #11:
score: 0
Accepted
time: 857ms
memory: 52608kb
input:
30 4 oookooookkokkkookkkkkkookkokokkookk o?ko?ok
output:
251
result:
ok single line: '251'
Test #12:
score: 0
Accepted
time: 854ms
memory: 52576kb
input:
35 18 okookkoookookokkkokkkkkkkokoookookokkkoo okkk???o?kkkko?kko?kkok?o
output:
19
result:
ok single line: '19'
Test #13:
score: 0
Accepted
time: 859ms
memory: 52600kb
input:
28 0 kokkoookokoookooookokokkkkokkkookkkkoookkkoko o
output:
616
result:
ok single line: '616'
Test #14:
score: 0
Accepted
time: 857ms
memory: 52580kb
input:
22 1 oooookooookkokkokooooookokkokokookkokookkkkokokoko o?ooo?ok???o???oko?ok??oko
output:
40
result:
ok single line: '40'
Test #15:
score: 0
Accepted
time: 877ms
memory: 52564kb
input:
13 15 okkkoookkkokkooookkoookoookokkkokookokkkookkookoookokoo k??kk???kkoo?kk
output:
105
result:
ok single line: '105'
Test #16:
score: 0
Accepted
time: 856ms
memory: 52576kb
input:
13 46 okokokkkkkokokokokokkokkokkoookkooookokkkkookokkookkkokkooko ?oo??koko?okokk?k??kok????k?k?kk
output:
30
result:
ok single line: '30'
Test #17:
score: 0
Accepted
time: 854ms
memory: 52588kb
input:
2 59 okokoooookokkokkkookookkokkoookokookokkkoookkkokokokkookookkkokok ?ooo?kko?kk??ko?kokk?ook?oo??
output:
52
result:
ok single line: '52'
Test #18:
score: 0
Accepted
time: 861ms
memory: 52668kb
input:
11 10 kkkokokookookoooooooooookkooookkokokkookookokokkooookokkokokookokokkko okoooookko?kk?kkok?
output:
13
result:
ok single line: '13'
Test #19:
score: 0
Accepted
time: 879ms
memory: 52576kb
input:
56 63 kkokkokokkkookkoookkkkkkkkkkokoooookookokookoookkokkkkkkkookokkokkkookokokk k?k??
output:
3622
result:
ok single line: '3622'
Test #20:
score: 0
Accepted
time: 873ms
memory: 52656kb
input:
15 16 kkkkookkkkkkokokokookkoookkkkookkookkkokkkokoookokkokokokokoookokkkkokokokkookok ?o?kok?oo??kkooo??o???ko?k
output:
113
result:
ok single line: '113'
Test #21:
score: 0
Accepted
time: 878ms
memory: 52568kb
input:
82 12 kkkkookkokkkoookkkkokookookooookokoookooookokoookokooookkoookokoookkokkkokokokookokko kok??ooook?
output:
1380
result:
ok single line: '1380'
Test #22:
score: 0
Accepted
time: 874ms
memory: 52588kb
input:
86 53 okookokookokookookkokkkooooookkokokokkkkkookookkkkookokokkkkkokokkkokkookkkkokookokokkookk oo??kk?kkokokk???okk?o???ko
output:
286
result:
ok single line: '286'
Test #23:
score: 0
Accepted
time: 858ms
memory: 52664kb
input:
30 0 oookkokokkkkkookkkkokokkookkokkkokokkkokokkookokokkkoooookkookkkokokoookkookokookkokooookokoook oo?okk?ok?k?o?oo?k?ok??o?ko?o?
output:
40
result:
ok single line: '40'
Test #24:
score: 0
Accepted
time: 861ms
memory: 52568kb
input:
65 51 kkoookkoooookokookkokkokokooookkkoookookokkkkkoookoookokkookkokoooooookokkokkokkkkkokookookkkkooooko ?k?kko
output:
3020
result:
ok single line: '3020'
Test #25:
score: 0
Accepted
time: 872ms
memory: 52640kb
input:
139 158 koookookkkooookkokkkkkkokkokkoookooookkokkkkkkkookkookkkkkookkkkkkooookokkokkkokoookkokokoookkokookkkokoooookokooookookkkokkokkkkkkoookookkookkookoookoookkokkkokokokkkkookokkkkokkookoookokkokkkoookkok ook???kko??kok?oo?o??oo??kkkkk
output:
1053
result:
ok single line: '1053'
Test #26:
score: 0
Accepted
time: 870ms
memory: 52572kb
input:
49 236 oookoooookkokkokokkokokkkokokkokkkooookooookokkkokokkkkkoookokookookkkooookkkoookoooookookokokkokkkkkkkookkkkokokokokkkoookkookokoookokkokkkkoookoookookkoookookkokkoookkkookkkookookokkkkokokkkokkkoooooookokoookkkoookkkkkokkkkokkoooookokookokkokkkokkookkoooookkokokkkkkkkokokkkoookokkokkkoookkk...
output:
22936
result:
ok single line: '22936'
Test #27:
score: 0
Accepted
time: 886ms
memory: 52584kb
input:
352 395 kkookkokokookkokkokkkooooookkookkkkookkkkkkkkookookokookooookkkookkkkokkookkkkkookkokookkokkkkkkooooooookokokkookokkokkokkkokkkookoookkokokookkoookkkkooookkkkokkokkkkooookkokokooookkokokokookkokokkokookkkokkookkokoookookookokoookkkookkoookokkokooooooooooooookookookkkkookokokkkkookkkookokkooo...
output:
91919
result:
ok single line: '91919'
Test #28:
score: 0
Accepted
time: 870ms
memory: 52644kb
input:
318 17 kookkokkoooooooooookkookokooookookookookkkkokkkkkkkokkkkokkokkoookkookokokookokokokokokoookkkokkokkkokokookkoookkokokokkokkokookkkkoookokokokokokkokkoookkkkkkkkkkkokkookokoooooookkkkkkokkkkokokookokkkkokokokkookokokoookkokooookokkookkokoookoookkokkookokkokkkkkkookkokkkkkokkookookokkkokkkokokk...
output:
16537
result:
ok single line: '16537'
Test #29:
score: 0
Accepted
time: 858ms
memory: 52640kb
input:
1 581 ookkkkokokokkkoookokookkokkkooookkkoooookoookokkookooookkkkokkokookkooooookkoookkokokkkkkokokkoookokkkkkoookkkkkookkokkookkkokkookkkokokkoookokkokkkookookookookokooooookooookooookoookkokokkookkkokoooookkokkokkkkkkoooookkookokkkokokkkkkooooookokookkokkokkkkookookokkookkkkkokkokkkkokkkkkoooookkk...
output:
1673
result:
ok single line: '1673'
Test #30:
score: 0
Accepted
time: 857ms
memory: 52652kb
input:
166 482 ooooookkookkoookkkkokokokooookookokokokokokkkkkkkkkookkookkkkokkkkkkookkkkkkkokkokkkookoookkkkokokkokokkkookkokkokkkookkkoooookokookookkkooookkkookookookokookokkkookookkkkkookkokookookooooooookokkkokookkkkookokokkkkooooookkkkkooookkokkokkokkkkokokookkkkookkokkokokokokokkookkkooooookkkokkkooo...
output:
125951
result:
ok single line: '125951'
Test #31:
score: 0
Accepted
time: 851ms
memory: 52684kb
input:
554 590 oookokokokkookookokokkooookokkkkokkkkkkkkkoookokokookkooookkkokkkkokkooookooooooookooookokoookkkooookkookkkookkkokkkkookkokkkkookkoooookooookkkkoooookookookkkkookkoookkkoookokookkkokkokkooooooookkkkoookokkkookoookkookoookkkkkokkokokkookkkoookkkoookokkkkkokkkkkookookokookkkookkkoookokokkkkkko...
output:
36325
result:
ok single line: '36325'
Test #32:
score: 0
Accepted
time: 860ms
memory: 52596kb
input:
501 244 okookkoookkoooooooookkkookokoookkkookokkkkokkoooooooookooookokookooookkookooookkkokokokkkokkoookoookkokkkoooooooookokoookokkkookokookkooookokkooooooookkkooookkkookkkkokkkoookoookkookkkokookoookkkkokokkkkkkoookkkkkokkooooookooookokokkkokokkkooookkookkkokkookkokkkkookkookkokkokoookokkoookkokko...
output:
52099
result:
ok single line: '52099'
Test #33:
score: 0
Accepted
time: 873ms
memory: 52600kb
input:
169 292 kookkoookkoooooookkkokkkooookkokkokkkookookkookkokokkokkkkkokokkokokokookookkookooookkoookkkkookokokkookkkookokkoookokooooookokoooookokkkkooooookokkooookokkkookokkokkkookkkokkkokokkoookkookkkokkookookokkkookkkkkkkoookkkkkoooooookkoookkookkkkokookooookkkkooookkkookookokkkkkkkoookokoookkokokok...
output:
120570
result:
ok single line: '120570'
Test #34:
score: 0
Accepted
time: 874ms
memory: 52628kb
input:
357 690 kkkkoookokkkookooooookokookkokkookokkkkkoookookkkooookkkokkkooookokkkookkkkkoookkokookooookookokookkkkkkkokokooookkkkkkokokoookkkkkkookokkkokokkkkokoookokkokkookoookokooookkkkkokkokookkkkkookkkkoookkkkokkkkokkkkkookkkkokkookookkkkkooooooookookokokkkkokkokokkkkkkookkokkkkookkkkkkkkkkkookokoko...
output:
217221
result:
ok single line: '217221'
Test #35:
score: 0
Accepted
time: 871ms
memory: 52616kb
input:
266 1115 kokokkookkkkkookkokkookoookoooookokoooookokkokkokkkokookkkkkkkkookkkkkokokooookkokookookkkoooookkooookkoookkkkkkokokooookkoookokookkkkkoookokkkkkkookkokkokkkoookokooooookkkokkkkokokkookoooooookooooookokokkokkkkookkkkoookoookkkkkkkoooooookokookookokokokokkookoooookokoookkokokookookkkokokokok...
output:
284665
result:
ok single line: '284665'
Test #36:
score: 0
Accepted
time: 876ms
memory: 52688kb
input:
1587 1962 kkkkooookkokkoookkokkkkkkooookooookokokkkkkkooookkokokkkkkkokokokokkokokkkkkokkookoooookookkkkkkoookokkkokoookokkkookokkokkkooooookokkokkokkkokoookkkoookookkokookkkoooookkokoookokkookkokoooooookkokkkooookkkkookokkokokkoooookkkkkoooooookokkokoookokokkookookokkkookooookokkokoookkkokkkkkkookk...
output:
215087
result:
ok single line: '215087'
Test #37:
score: 0
Accepted
time: 879ms
memory: 52632kb
input:
4299 2968 oookkookkkkokookkkokookkkkooookookkkookkkookkkoookokooooookokokoookkkoooooookkokokookokokokookookokkkokkkkookkooookokkkkokokkkkokkoookokoooookkokkokkkkkokoookkokoookokoookkokkooookkokkkkokkkookkoookookkokookkkkkkkoookokkoookokkokooookkokkkkkokooookokookookkkkkkkkokokokokokkkkkkookkkkoookok...
output:
7912001
result:
ok single line: '7912001'
Test #38:
score: 0
Accepted
time: 863ms
memory: 52696kb
input:
732 255 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk...
output:
4979
result:
ok single line: '4979'
Test #39:
score: 0
Accepted
time: 886ms
memory: 52884kb
input:
1905 815 kkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkkk...
output:
1986
result:
ok single line: '1986'
Test #40:
score: 0
Accepted
time: 872ms
memory: 53128kb
input:
156 1659 ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...
output:
2
result:
ok single line: '2'
Test #41:
score: -100
Wrong Answer
time: 888ms
memory: 53772kb
input:
217 3156 ooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooookoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooo...
output:
5784128
result:
wrong answer 1st lines differ - expected: '0', found: '5784128'