Problem - C - Codeforces(初识反悔贪心)
题目:

思路:

代码:
#include <bits/stdc++.h>
#define fi first
#define se secondusing namespace std;
typedef pair<int,int> PII;string a, b, ans;
bool vis[105], up;
int n;void change(int x)
{bool suc=false;ans=ans.substr(0,ans.size()-1);for(int i=0; i<n; i++){if(!vis[i] && a[i]<b[x]){suc=true, vis[i]=true;ans+=a[i];break;}}for(int i=0; i<n; i++){if(vis[i] && a[i]==b[x]){vis[i]=false;break;}}if(!suc) change(x-1);else{for(int i=0; i<n; i++){if(vis[i]) continue;vis[i]=true;ans+=a[i];}cout<<ans<<'\n';}
}void solve()
{cin>>a>>b;sort(a.begin(), a.end(), greater<char>());if(a.size() != b.size()) cout<<a<<'\n';else{n=a.size();for(int i=0; i<n; i++){bool find=false;for(int j=0; j<n; j++){if(vis[j]) continue;if(up){vis[j]=true, ans+=a[j];find=true;break;}else{if(a[j]>b[i]) continue;vis[j]=true, ans+=a[j];if(a[j]<b[i]) up=true;find=true;break;}}if(!find){change(i-1);return;}}cout<<ans<<'\n';}}int main()
{int T;// cin>>T;T=1;while(T--){solve();}return 0;
}