답안 #386887

# 제출 시각 아이디 문제 언어 결과 실행 시간 메모리
386887 2021-04-07T15:22:09 Z two_sides 원형 문자열 (IZhO13_rowords) C++17
68 / 100
90 ms 63468 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; dir[0][1] = 2;
    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';
}
# 결과 실행 시간 메모리 Grader output
1 Incorrect 36 ms 63212 KB Output isn't correct
2 Correct 36 ms 63212 KB Output is correct
3 Correct 36 ms 63212 KB Output is correct
4 Correct 41 ms 63212 KB Output is correct
5 Correct 35 ms 63212 KB Output is correct
6 Incorrect 40 ms 63340 KB Output isn't correct
7 Correct 63 ms 63340 KB Output is correct
8 Incorrect 68 ms 63212 KB Output isn't correct
9 Correct 67 ms 63212 KB Output is correct
10 Correct 62 ms 63212 KB Output is correct
11 Correct 64 ms 63340 KB Output is correct
12 Incorrect 55 ms 63212 KB Output isn't correct
13 Correct 79 ms 63212 KB Output is correct
14 Correct 68 ms 63212 KB Output is correct
15 Correct 74 ms 63212 KB Output is correct
16 Correct 74 ms 63212 KB Output is correct
17 Incorrect 56 ms 63468 KB Output isn't correct
18 Correct 74 ms 63212 KB Output is correct
19 Correct 65 ms 63352 KB Output is correct
20 Incorrect 90 ms 63212 KB Output isn't correct
21 Correct 43 ms 63340 KB Output is correct
22 Correct 45 ms 63212 KB Output is correct
23 Correct 50 ms 63212 KB Output is correct
24 Incorrect 51 ms 63212 KB Output isn't correct
25 Incorrect 59 ms 63212 KB Output isn't correct