数组a(需要先排序)中重复元素有价值的只是最后一个,也就是说重复元素只用到了一次,需要找到重复元素的最后一个并且将其与排序后的字符串c一一对应:
for(int i=0;i<m;i++)
{
while(a[i]==a[i+1]) i++;
c[i]=d[j];
j++;
}
但其实这一步可以直接用STL中的set来实现排序+去重
set<int> a;
for(int i=0;i<m;i++)
{
int x;
cin>>x;
a.insert(x);
}
遍历的时候:
for(auto i:a)
{
s[i-1]=c[j++];
}
完整代码:
#include <iostream>
#include <algorithm>
#include <cstring>
#include <set>
using namespace std;
const int N=1e5+10;
int t;
int main()
{
cin>>t;
while(t--)
{
int n,m;
cin>>n>>m;
string s;
cin>>s;
set<int> a;
for(int i=0;i<m;i++)
{
int x;
cin>>x;
a.insert(x);
}
string c;
cin>>c;
sort(c.begin(),c.end());
int j=0;
for(auto i:a)
{
s[i-1]=c[j++];
}
cout<<s<<endl;
}
return 0;
}