Submission #25337352


Source Code Expand

#include <bits/stdc++.h>
#define REP(i, n) for (int i = 0; (i) < (int)(n); ++(i))
#define REP3(i, m, n) for (int i = (m); (i) < (int)(n); ++(i))
#define REP_R(i, n) for (int i = (int)(n)-1; (i) >= 0; --(i))
#define REP3R(i, m, n) for (int i = (int)(n)-1; (i) >= (int)(m); --(i))
#define ALL(x) ::std::begin(x), ::std::end(x)
using namespace std;

int sim(char x, char y) {
    if (x == '-') return -5;
    if (y == '-') return -5;
    return x == y ? 1 : -3;
}

constexpr int INF = 1e9;

std::pair<std::string, std::string> solve(const std::string &s, const std::string &t) {
    int n = s.length();
    int m = t.length();
    vector<vector<int>> dp(n + 1, vector<int>(m + 1, -INF));
    vector<vector<pair<int, int>>> link(n + 1, vector<pair<int, int>>(m + 1, make_pair(-1, -1)));
    auto use = [&](int i, int j, int value, int prev_i, int prev_j) {
        if (dp[i][j] < value) {
            dp[i][j] = value;
            link[i][j] = make_pair(prev_i, prev_j);
        }
    };
    dp[0][0] = 0;
    REP (i, n + 1) {
        REP (j, m + 1) {
            if (i < n and j < m) {
                use(i + 1, j + 1, dp[i][j] + sim(s[i], t[j]), i, j);
            }
            if (i < n) {
                use(i + 1, j, dp[i][j] + sim(s[i], '-'), i, j);
            }
            if (j < m) {
                use(i, j + 1, dp[i][j] + sim('-', t[j]), i, j);
            }
        }
    }
    string ss;
    string tt;
    for (int i = n, j = m; ; ) {
        auto [prev_i, prev_j] = link[i][j];
        if (prev_i == -1) {
            break;
        }
        ss.push_back(i == prev_i ? '-' : s.at(prev_i));
        tt.push_back(j == prev_j ? '-' : t.at(prev_j));
        i = prev_i;
        j = prev_j;
    }
    reverse(ALL(ss));
    reverse(ALL(tt));
    return make_pair(ss, tt);
}

// generated by oj-template v4.8.0 (https://github.com/online-judge-tools/template-generator)
int main() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::string s, t;
    std::cin >> s >> t;
    auto [c, d] = solve(s, t);
    std::cout << c << '\n' << d << '\n';
    return 0;
}

Submission Info

Submission Time
Task B - Practice 2
User kimiyuki
Language C++ (GCC 9.2.1)
Score 500
Code Size 2093 Byte
Status AC
Exec Time 9 ms
Memory 4956 KiB

Judge Result

Set Name Sample All
Score / Max Score 0 / 0 500 / 500
Status
AC × 1
AC × 22
Set Name Test Cases
Sample sample01.txt
All sample01.txt, in01.txt, in02.txt, in03.txt, in04.txt, in05.txt, in06.txt, in07.txt, in08.txt, in09.txt, in10.txt, in11.txt, in12.txt, in13.txt, in14.txt, in15.txt, in16.txt, in17.txt, in18.txt, in19.txt, in20.txt, sample01.txt
Case Name Status Exec Time Memory
in01.txt AC 9 ms 3924 KiB
in02.txt AC 6 ms 4668 KiB
in03.txt AC 2 ms 3688 KiB
in04.txt AC 3 ms 3800 KiB
in05.txt AC 2 ms 3512 KiB
in06.txt AC 4 ms 3900 KiB
in07.txt AC 2 ms 3744 KiB
in08.txt AC 4 ms 4216 KiB
in09.txt AC 2 ms 3536 KiB
in10.txt AC 2 ms 3468 KiB
in11.txt AC 2 ms 3584 KiB
in12.txt AC 8 ms 4956 KiB
in13.txt AC 2 ms 3748 KiB
in14.txt AC 3 ms 3896 KiB
in15.txt AC 2 ms 3548 KiB
in16.txt AC 2 ms 3604 KiB
in17.txt AC 2 ms 3868 KiB
in18.txt AC 2 ms 3564 KiB
in19.txt AC 2 ms 3552 KiB
in20.txt AC 1 ms 3632 KiB
sample01.txt AC 2 ms 3412 KiB