题意:https://codeforces.com/contest/915/problem/C
思路:首先很容易想到一个贪心,就是放当前位置能放的最大的,但是这个贪心是错的,可以试试273466,273428这两个串。所以我们考虑暴力,先将a排个序,然后我们从第一位开始尝试和后面的数交换,每次交换之后再将后面的数sort,这样保证了当前这位最大后面也不会放不下。符合更新答案即可。
/*keep on going and never give up*/
#include<cstdio>
#include<iostream>
#include<queue>
#include<algorithm>
using namespace std;
#define int long long
typedef pair<int, int> pii;
#define lowbit(x) x&(-x)
#define endl '\n'
#define wk is zqx ta die
signed main() {
std::ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
string a;
string b;
cin >> a;
cin >> b;
if (a.size() < b.size()) {
sort(a.begin(), a.end());
reverse(a.begin(), a.end());
cout << a << endl;
} else if (a.size() == b.size()) {
sort(a.begin(), a.end());
for (int i = 0; i < a.size(); i++) {
for (int j = i + 1; j < a.size(); j++) {
string h = a;
swap(h[i], h[j]);
sort(h.begin() + i + 1, h.end());
if (h <= b && h > a) {
a = h;
} else {
continue;
}
}
}
cout << a << endl;
}
return 0;
}