ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#212174 | #3817. 写字 | Panjunnan | 0 | 16ms | 1596kb | C++11 | 1.7kb | 2024-10-13 11:49:25 | 2024-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;
}
详细
小提示:点击横条可展开更详细的信息
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'