Submission #386878

# Submission time Handle Problem Language Result Execution time Memory
386878 2021-04-07T15:08:58 Z two_sides Round words (IZhO13_rowords) C++17
76 / 100
71 ms 63360 KB
#include <bits/stdc++.h>

using namespace std;

template <class X, class Y>
bool cmax(X &a, const Y &b) {
    return a < b ? a = b, 1 : 0;
}
const int N = 2005;

int dp[N][N * 2], dir[N][N * 2], m, n;
/// 0: up, 1: up-left, 2:left

void init_lcs(string s, string t) {
    memset(dp, 0, sizeof dp);
    memset(dir, 0, sizeof dp);
    m = s.size(), n = t.size(); t += t;
    for (int i = 1; i <= m; i++)
        for (int j = 1; j <= 2 * n; j++) {
            dp[i][j] = dp[i - 1][j];
            if (s[i - 1] == t[j - 1] && cmax
            (dp[i][j], dp[i - 1][j - 1] + 1))
                dir[i][j] = 1;
            if (cmax(dp[i][j], dp[i][j - 1]))
                dir[i][j] = 2;
        }
}

int get_lcs(int i, int j) {
    int lcs = 0;
    while (i) {
        if (dir[i][j] == 2) j--;
        else if (dir[i][j] == 1) {
            i--; j--; lcs++;
        }
        else i--;
    }
    return lcs;
}

void remove_col(int j) {
    int i = 0;
    while (j < 2 * n) {
        if (dir[i][j + 1] == 2)
            dir[i][++j] = 0;
        else {
            if (i == m) break;
            if (dir[++i][j + 1] == 1)
                dir[i][++j] = 0;
        }
    }
}

int circular_lcs(string s, string t) {
    init_lcs(s, t); int lcs = 0;
    for (int j = 0; j < n; j++) {
        cmax(lcs, get_lcs(m, j + n));
        remove_col(j);
    }
    return lcs;
}

int main() {
    cin.tie(0)->sync_with_stdio(0);
    string s, t; cin >> s >> t;
    cout << circular_lcs(s, t) << '\n';
}
# Verdict Execution time Memory Grader output
1 Incorrect 32 ms 63212 KB Output isn't correct
2 Correct 33 ms 63212 KB Output is correct
3 Correct 39 ms 63212 KB Output is correct
4 Correct 34 ms 63212 KB Output is correct
5 Correct 37 ms 63212 KB Output is correct
6 Correct 34 ms 63212 KB Output is correct
7 Correct 58 ms 63212 KB Output is correct
8 Incorrect 63 ms 63212 KB Output isn't correct
9 Correct 62 ms 63212 KB Output is correct
10 Correct 56 ms 63212 KB Output is correct
11 Correct 59 ms 63212 KB Output is correct
12 Correct 49 ms 63212 KB Output is correct
13 Correct 71 ms 63360 KB Output is correct
14 Correct 61 ms 63212 KB Output is correct
15 Correct 70 ms 63360 KB Output is correct
16 Correct 69 ms 63212 KB Output is correct
17 Incorrect 52 ms 63212 KB Output isn't correct
18 Correct 66 ms 63212 KB Output is correct
19 Correct 58 ms 63212 KB Output is correct
20 Incorrect 71 ms 63340 KB Output isn't correct
21 Correct 44 ms 63212 KB Output is correct
22 Correct 44 ms 63212 KB Output is correct
23 Correct 47 ms 63212 KB Output is correct
24 Incorrect 48 ms 63212 KB Output isn't correct
25 Incorrect 56 ms 63360 KB Output isn't correct