思路:对于n<k,必定是s+(k-n)个min字符,对于n>=k,贪心取,更改最后一个不为max字符的字符,将它改成大于最小的字符,并把后的字符全部输出min字符。
int main()
{
//freopen("in.txt", "r", stdin);
int n, k;
while (cin >> n >> k)
{
string s;
cin >> s;
map<char, int> mp;
for (auto I : s)mp[I]++;
char mi = '1',mx='1';
f(i, 0, 25)
{
char now = 'a' + i;
if (mp[now] > 0) { mi = now;break; }
}
ff(i, 25, 0)
{
char now = 'a' + i;
if (mp[now] > 0) { mx = now;break; }
}
if (n < k)
{
cout << s;
f(i, 1, k-n)cout << mi;
cout << endl;
}
else
{
ff(i, k - 1, 0)
{
if (s[i] != mx)
{
f(j, 0, i-1)printf("%c", s[j]);
f(j, 0, 25)
{
char c = 'a' + j;
if (mp[c] >0&& c>s[i])
{
printf("%c",c);
break;
}
}
f(j, i + 1, k - 1)printf("%c", mi);
goto hh;
}
}
}
hh:;
}
return 0;
}