CF2164D的弱化,将s和t都反转并取消每一步的输出。
code CF:
#include <bits/stdc++.h>
using namespace std; using ll = long long; int t_ = 1;
void solve()
{
int n, m;
cin >> n >> m;
string ss, tt;
cin >> ss >> tt;
vector<int> pipei(n);
vector<vector<int>> idx(26);
vector<int> s(n), t(n);
for (int i = 0; i < n; i++)
{
s[i] = ss[i] - 'a';
t[i] = tt[i] - 'a';
}
for (int i = 0; i < n; i++)
idx[s[i]].push_back(i);
int R = n;
for (int i = n - 1; i >= 0; i--)
{
auto it = ranges::upper_bound(idx[t[i]], min(R, i));
if (it == idx[t[i]].begin())
{
cout << -1 << '\n';
return;
}
it--;
pipei[i] = *it;
R = *it;
}
int maxk = 0;
for (int i = 0; i < n; i++)
maxk = max(maxk, abs(i - pipei[i]));
if (maxk > m)
{
cout << -1 << '\n';
return;
}
else
{
cout << maxk << '\n';
string s2 = ss;
for (int i = 0; i < maxk; i++)
{
for (int j = n - 1; j >= 1; j--)
{
if (pipei[j] < j)
{
s2[j] = s2[j - 1];
pipei[j]++;
}
}
cout << s2 << '\n';
}
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
cin >> t;
for (t_ = 1; t_ <= t; t_ ++)
solve();
return 0;
}
#include <bits/stdc++.h>
using namespace std; using ll = long long; int t_ = 1;
void solve()
{
int n, m;
cin >> n >> m;
string ss, tt;
cin >> ss >> tt;
reverse(ss.begin(), ss.end());
reverse(tt.begin(), tt.end());
vector<int> pipei(n);
vector<vector<int>> idx(26);
vector<int> s(n), t(n);
for (int i = 0; i < n; i++)
{
s[i] = ss[i] - 'a';
t[i] = tt[i] - 'a';
}
for (int i = 0; i < n; i++)
idx[s[i]].push_back(i);
int R = n;
for (int i = n - 1; i >= 0; i--)
{
auto it = ranges::upper_bound(idx[t[i]], min(R, i));
if (it == idx[t[i]].begin())
{
cout << -1 << '\n';
return;
}
it--;
pipei[i] = *it;
R = *it;
}
int maxk = 0;
for (int i = 0; i < n; i++)
maxk = max(maxk, abs(i - pipei[i]));
if (maxk > m)
{
cout << -1 << '\n';
return;
}
else
{
cout << maxk << '\n';
/* string s2 = ss;
for (int i = 0; i < maxk; i++)
{
for (int j = n - 1; j >= 1; j--)
{
if (pipei[j] < j)
{
s2[j] = s2[j - 1];
pipei[j]++;
}
}
cout << s2 << '\n';
} */
}
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(nullptr);
int t = 1;
// cin >> t;
for (t_ = 1; t_ <= t; t_ ++)
solve();
return 0;
}
全部评论
(0) 回帖