首先用c数组储存a数组,再将a,b两个数组排序,判断b数组中是否有子序列为a数组,若没有输出impossi。
若满足条件,创建一个字符串类型的vector,将b数组中除了a数组的子序列每一个字母作为字符串写入vector容器,再将之前保存的c数组写入vector,使用sort函数进行字典序排序,最后输出vector即可
#include<bits/stdc++.h>
using namespace std;
inline bool cmp( const string &s1, const string &s2 ) {
return s1+s2 < s2+s1;
}
int main() {
ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(nullptr);
int t,i,j;
bool p;
char a[100001],b[100001],c[100001];
cin>>t;
while(t--){
p= false;
cin>>a>>b;
if(strlen(a)> strlen(b)){
cout<<"impossible"<<endl;
continue;
}
for(i=0;i< strlen(b);i++){
c[i]=a[i];
}
sort(a,a+ strlen(a));
sort(b, b+strlen(b));
j=0;
for(i=0;i< strlen(b);i++){
if(a[j]==b[i]){
b[i]='+';
j++;
}
if(j== strlen(a)){
p=true;
break;
}
}
if(p){
string s;
vector<string> v;
for(i=0;i< strlen(b);i++){
if (b[i] != '+') {
s = b[i];
v.push_back(s);
}
}
s = c;
v.push_back(s);
sort(v.begin(), v.end(), cmp);
for (auto k: v)
cout << k;
cout << endl;
}else{
cout<<"impossible"<<endl;
}
}
return 0;
}

京公网安备 11010502036488号