RT,经测试:
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define D double
#define LD long double
#define LL long long
#define ULL unsigned long long
#define S string
#define fi first
#define se second
#define mp make_pair
using namespace std;
S s, tmp;
S ans;
int a[10001] = {0};//这
int v[10001] = {0};//这
int main()
{
int n, p;
cin >> n;
cin >> s;
tmp = s;
cin >> p;
for (int i = 0; i < n; i++)
{
a[i] = s[i] - 'a';
}
sort(a, a + n);
for (int i = 0; i < n; i++)
{
s[i] = a[i] + 'a';
}
int sta = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == tmp[p - 1])
{
sta = i;
v[i] = 1;
break;
}
}
for (int i = n - 1; i >= 0; i--)
{
ans[i] = tmp[sta];
for (int j = n - 1; j >= 0; j--)
{
if (tmp[sta] == s[j] && v[j] != 1)
{
sta = j;
v[j] = 1;
break;
}
}
}
for (int i = 0; i < n; i++)
{
cout << ans[i];
}
return 0;
}
能A
#include <map>
#include <stack>
#include <queue>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <vector>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>
#define D double
#define LD long double
#define LL long long
#define ULL unsigned long long
#define S string
#define fi first
#define se second
#define mp make_pair
using namespace std;
S s, tmp;
S ans;
int v[10001] = {0};//这
int a[10001] = {0};//这
int main()
{
int n, p;
cin >> n;
cin >> s;
tmp = s;
cin >> p;
for (int i = 0; i < n; i++)
{
a[i] = s[i] - 'a';
}
sort(a, a + n);
for (int i = 0; i < n; i++)
{
s[i] = a[i] + 'a';
}
int sta = 0;
for (int i = 0; i < n; i++)
{
if (s[i] == tmp[p - 1])
{
sta = i;
v[i] = 1;
break;
}
}
for (int i = n - 1; i >= 0; i--)
{
ans[i] = tmp[sta];
for (int j = n - 1; j >= 0; j--)
{
if (tmp[sta] == s[j] && v[j] != 1)
{
sta = j;
v[j] = 1;
break;
}
}
}
for (int i = 0; i < n; i++)
{
cout << ans[i];
}
return 0;
}
只能过前两个点,求大佬解答为啥调换一下顺序就会错啊