传送锚点:
input
4 26
bear
output
roar
input
2 7
af
output
db
input
3 1000
hey
output
-1
思路
此题答案不限
有点类似贪心,每一步都要做到最佳,将k不断变小
code
#include<iostream>
#include<vector>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
int n, k;//n为单词长度,k为要求的值
cin >> n >> k;
string input;
cin >> input;
string res;//输出答案
for (int i = 0; i < input.size(); i++) {
if(!k){
//这句话不能省略,若还没遍历完input,k就为0,原封不动输出input[i],保证输出的长度与n符合
res += input[i];
continue;
}
int x = input[i] - 'a', y = 'z' - input[i];
//x、y可分别理解为到字母a、z的距离
if (x >= y) {
if (x >= k) res += (char)(input[i] - k), k = 0;
//若改为input[i] + k会报错,可能会超了26个字母范围
else k -= x, res += 'a';
}
else {
if (y >= k) res += (char)(input[i] + k), k = 0;
//若改为input[i] - k会报错,可能会超了26个字母范围
else k -= y, res += 'z';
}
}
if (k) cout << -1 << endl;
else cout << res << endl;
return 0;
}