UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212174#3817. 写字Panjunnan016ms1596kbC++111.7kb2024-10-13 11:49:252024-10-13 12:29:48

answer

#include <iostream>
#include <vector>
#include <unordered_map>
#include <climits>

using namespace std;

int main() {
    int n, m;
    cin >> n >> m;
    string S, T;
    cin >> S >> T;

    // 构建S中每个字符的位置映射
    unordered_map<char, vector<int>> pos;
    for (int i = 0; i < n; ++i) {
        pos[S[i]].push_back(i);
    }

    // dp数组初始化
    vector<vector<int>> dp(m + 1, vector<int>(n + 1, INT_MAX));
    dp[0][0] = 0; // 初始化条件,表示不需要时间来复制一个空串

    for (int i = 0; i < m; ++i) {
        for (int j = 0; j < n; ++j) {
            if (S[j] == T[i]) {
                // 如果S[j]等于T[i],可以选择从S[j]开始复制
                dp[i + 1][j + 1] = min(dp[i + 1][j + 1], dp[i][j] + 1);
                if (j + 1 < n && S[j + 1] == T[i]) {
                    // 如果S[j+1]也等于T[i],可以选择移动到S[j+1]
                    dp[i + 1][j + 2] = min(dp[i + 1][j + 2], dp[i][j] + abs(j + 1 - j));
                }
            }
            // 如果S[j]不等于T[i],尝试找到S中下一个等于T[i]的位置
            if (!pos[T[i]].empty()) {
                int nextPos = lower_bound(pos[T[i]].begin(), pos[T[i]].end(), j) - pos[T[i]].begin();
                if (nextPos < pos[T[i]].size()) {
                    dp[i + 1][pos[T[i]][nextPos]] = min(dp[i + 1][pos[T[i]][nextPos]], dp[i][j] + abs(pos[T[i]][nextPos] - j));
                }
            }
        }
    }

    int result = INT_MAX;
    for (int i = 0; i <= n; ++i) {
        result = min(result, dp[m][i]);
    }

    cout << (result == INT_MAX ? -1 : result) << endl;
    return 0;
}

Details

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 20
Accepted
time: 1ms
memory: 1264kb

input:

1 1
v
v

output:

0

result:

ok 1 number(s): "0"

Test #2:

score: -20
Wrong Answer
time: 0ms
memory: 1272kb

input:

5 5
bacbb
cabcb

output:

-2147483648

result:

wrong answer 1st numbers differ - expected: '7', found: '-2147483648'

Subtask #2:

score: 0
Wrong Answer

Test #3:

score: 0
Wrong Answer
time: 2ms
memory: 1316kb

input:

26 300
ywzhvjnpdfqtukimsrbxageloc
brsmsrbxbxbxbxagagagegelococololegaxagaxaxbxbrbxbrsrsmikimikikimim...

output:

-2147483648

result:

wrong answer 1st numbers differ - expected: '299', found: '-2147483648'

Subtask #3:

score: 0
Wrong Answer

Test #6:

score: 0
Wrong Answer
time: 13ms
memory: 1596kb

input:

300 300
hgbfdbgcghedefchdabhgdddahcdedebceffegfbceehceeheggffhhddbecbfdhceeedcaeeebdaddfgccggfdcachg...

output:

-2147483648

result:

wrong answer 1st numbers differ - expected: '3643', found: '-2147483648'