Submission #1105580

#TimeUsernameProblemLanguageResultExecution timeMemory
1105580coolboy19521Bajka (COCI20_bajka)C++17
0 / 70
1067 ms4388 KiB
#include "bits/stdc++.h" using namespace std; int main() { int n, m; cin >> n >> m; if (m > n) { cout << "-1\n"; return 0; } string s, t; cin >> s >> t; int alp = 26; vector<vector<int>> sm(alp); for (int i = 0; i < n; i ++) { sm[s[i] - 'a'].push_back(i); } int maxr = 1e9; int mn = maxr; auto dijk = [&](){ priority_queue<tuple<int,int,int>> q; map<pair<int,int>,int> vi; for (int i : sm[t[0] - 'a']) { q.emplace(0, 0, i); vi[{0, i}] = 0; } while (!q.empty()) { auto [ds, at, ix] = q.top(); q.pop(); if (ds != vi[{at, ix}]) { continue; } if (at == m - 1) { mn = min(mn, -ds); } else { for (int i : sm[t[at] - 'a']) { if (!vi.count({at, i}) || ds - abs(i - ix) > vi[{at, i}]) { q.emplace(ds - abs(i - ix), at, i); vi[{at, i}] = ds - abs(i - ix); } } for (int i : {-1, 1}) { if (0 <= ix + i && ix + i < n && t[at + 1] == s[ix + i]) { if (!vi.count({at + 1, ix + i}) || ds - 1 > vi[{at + 1, ix + i}]) { q.emplace(ds - 1, at + 1, ix + i); vi[{at + 1, ix + i}] = ds - 1; } } } } } }; dijk(); if (mn != maxr) { cout << mn << '\n'; } else { cout << "-1\n"; } }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...