怪盗基德的挑战
怪盗基德是一名出色的数字盗贼,擅长窃取珍贵的数字宝藏。在密室的中央,基德看到了一个巨大的保险箱,里面藏着数字宝藏。
然而,基德发现这个保险箱上有一个巧妙的密码锁。密码锁的规则是这样的:只有通过交换数字中的两位,才能打开保险箱。基德明白,他只有一次机会交换数字中的任意两位,以得到最大的数字宝藏。
基德开始思考如何利用这次交换机会来获取最大的数字宝藏。他知道,这个数字宝藏是一个正数,并且它的数字位数不会超过一百位数。
现在,你有机会像基德一样挑战自己。给定一个正数 x,你至多可以交换一次数字中的任意两位。你能得到的最大值是多少呢?
输入说明
输入一个正数 x。
输出说明
能够得到的最大数。
时间限制
1.000 秒
内存限制
25600 kb
样例输入1
2736
样例输出1
7236
样例输入2
9999
样例输出2
9999
#include <bits/stdc++.h>
using namespace std;
string max(string num) {
int n = num.size();
map<char, int> last;
for (int i = 0; i < n; i++) {
last[num[i]] = i;
}
for (int i = 0; i < n; i++) {
for (char d = '9'; d > num[i]; d--) {
if (last.find(d) != last.end() && last[d] > i) {
swap(num[i], num[last[d]]);
return num;
}
}
}
return num;
}
int main() {
string x;
cin >> x;
cout << max(x) << endl;
return 0;
}