QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#115313#2354. Ookckiseki#WA 888ms53772kbC++203.8kb2023-06-25 16:46:352023-06-25 16:46:37

Judging History

This is the latest submission verdict.

  • [2023-08-10 23:21:45]
  • System Update: QOJ starts to keep a history of the judgings of all the submissions.
  • [2023-06-25 16:46:37]
  • Judged
  • Verdict: WA
  • Time: 888ms
  • Memory: 53772kb
  • [2023-06-25 16:46:35]
  • Submitted

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;
}

详细

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'