input a b
output: a中经过排列后的最大的数 同时满足比b
#include <bits/stdc++.h>
#define rep(i,n) for(int i=0;i<(n);i++)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int INF=1e9+7;
string a,b;
int main(){
cin>>a>>b;
int n=a.length();
if(n<b.length()){
sort(a.begin(),a.end());reverse(a.begin(),a.end());
cout<<a<<'\n';
}else{
sort(a.begin(),a.end());
rep(i,n){ // 0到size-1
int j=i;
for(;j<n&&a.substr(0,i)+string(1,a[j])+a.substr(i,j-i)+a.substr(j+1)<=b;j++); //满足j++的条件
j--;
// cout << a.substr(0,i) << ' '<< string(1,a[j]) << ' '<< a.substr(i,j-i) << ' '<< a.substr(j+1) << endl;
// cout << a.substr(0,i)+string(1,a[j])+a.substr(i,j-i)+a.substr(j+1) << endl << endl;
a=a.substr(0,i)+string(1,a[j])+a.substr(i,j-i)+a.substr(j+1);
}
cout<<a<<'\n';
}
return 0;
}
substr:
string a;
int main() {
a = "01234567891011121314151617181920";
int i = 5;
int j = 10;
cout << a.substr(0,i) << ' '<< string(1,a[j]) << ' '
<< a.substr(i,j-i) << ' '<< a.substr(j+1) << endl;
/* 01234 56789 1 011121314151617181920 分为4部分
01234 1 56789 011121314151617181920 替换2、3部分
a.substr(0,i)+a.substr(i,j-i)+string(1,a[j])+a.substr(j+1);
0到i i到j-1 1个a[j] j+1到字符串结尾*/
}