首先用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; }