解题思路
一次操作从左到右处理字符串。对于当前位置 i,设当前字符为 c,如果左边字符 c 的数量等于右边字符 c 的数量,就把它改成下一个字母。
这个条件等价于:当前位置 i 是当前字符 c 在整个字符串中的中位出现位置,并且字符 c 的出现次数是奇数。
因此可以维护每个字母的所有出现位置:
- 用 26 个树状数组分别维护每个字母的位置。
P4995.第3题-字符串等频递增变换
题目内容
在蝴蝶悲园里,有一串写着小写字母的标牌。
你拿到一个长度为 n的字符串 s(下标从1到 n)。
你需要对字符串做 k 次 “操作”。
一次操作的过程如下:你从左到右依次处理 i=1,2,…,n。
在一次操作中,按 i=1,2,…,n 的顺序依次处理每个位置,每个位置的修改将立即生效并影响后续位置的统计:
- 令 c 为当前位置 i 的字符;
- 令 x 为位置 1 至 i−1 中当前字符等于 c 的数量;
- 令 y 为位置 i+1至 n 中当前字符等于 c 的数量;
- 若 x=y,则将位置 i 的字符修改为字母表中的下一个字母(
'z' 变为 'a'),否则保持不变。
现在我们将按顺序执行 k 次操作,请你输出做完k次操作后的最终字符串。
输入描述
每个测试文件均包含多组测试数据。
输出描述
对于每一组测试数据,新起一行输出做完k 次操作后的最终字符串。
样例1
输入
2
2 1
ab
3 2
abc
输出
bb
bbe