题解
2025-08-10 10:17:21
发布于:浙江
3阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
void previousPermutation(vector<int>& perm) {
int n = perm.size();
int i = n - 1;
while (i > 0 && perm[i - 1] <= perm[i]) {
i--;
}
if (i <= 0) {
reverse(perm.begin(), perm.end());
return;
}
int j = n - 1;
while (perm[j] >= perm[i - 1]) {
j--;
}
swap(perm[i - 1], perm[j]);
reverse(perm.begin() + i, perm.end());
}
int main() {
int n;
cin >> n;
vector<int> initial(n);
for (int i = 0; i < n; ++i) {
cin >> initial[i];
}
vector<int> current(n);
for (int i = 0; i < n; ++i) {
cin >> current[i];
}
unordered_map<int, int> position;
for (int i = 0; i < n; ++i) {
position[initial[i]] = i;
}
vector<int> indices(n);
for (int i = 0; i < n; ++i) {
indices[i] = position[current[i]];
}
previousPermutation(indices);
vector<int> result(n);
for (int i = 0; i < n; ++i) {
result[i] = initial[indices[i]];
}
for (int i = 0; i < n; ++i) {
if (i > 0) cout << " ";
cout << result[i];
}
cout << endl;
return 0;
}
这里空空如也
有帮助,赞一个