模拟题
给定一个字符串 操作次数k 让字符串字典序最小
操作是让 所有的某个字符减1 如 b=>a c=>b
那么就从前往后枚举 优先让前面的字典序最小即可
要注意出现 剩余的操作次数 不足以让s[i]变为小于等于目前操作次数的情况
是让lst2~lst3这个区域的字符 都变为lst3 (见代码)
signed main() {
cf {
char lst = 'a', lst2 = 'a', lst3 = 'a';
n = read();
k = read();
scanf("%s", s + 1);
int now = 1;
while (now <= n) {
if (s[now] <= lst) {
now++;
} else {
int kk = s[now] - lst;
if (kk <= k) {
lst += kk;
now++;
k -= kk;
} else {
lst2 = s[now];
s[now] -= k;
lst3 = s[now];
k = 0;
}
}
if (k <= 0) break;
}
rep(i, 1, n) {
if (s[i] <= lst) {
cout << 'a';
} else if (s[i] <= lst2 && s[i] >= lst3) {
cout << lst3;
} else
cout << s[i];
}
cout << "\n";
}
return 0;
}