贪心,先判断当前位置能否解决,不然就向下一个位置移动。
#include <iostream>
#include <cstdio>
const int MAX = 1e5 + 5;
char arr1[MAX], arr2[MAX];
int main()
{
int n, k;
scanf("%d%d", &n,&k);
scanf("%s", arr1);
for (int i = 0; arr1[i]; ++i)
{
if (arr1[i] + k > 'z' && arr1[i] - 'a' < k)
{
if ('z' - arr1[i] >= arr1[i] - 'a')
{
arr2[i] = 'z';
k = k - ('z' - arr1[i]);
}
else
{
arr2[i] = 'a';
k = k - (arr1[i] - 'a');
}
}
else if (arr1[i] + k <= 'z')
{
arr2[i] = arr1[i] + k;
k = 0;
}
else if (arr1[i] - 'a' >= k)
{
arr2[i] = arr1[i] - k;
k = 0;
}
}
if (!k)
printf("%s\n", arr2);
else
printf("-1\n");
return 0;
}