Problem - C - Codeforces(初识反悔贪心)
题目:
思路:
代码:
#include <bits/stdc++.h>
#define fi first
#define se second
using 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;
}