一次操作可以删掉当前串中一组互不相邻的字符。若目标是保留某种字母 c,则所有非 c 字符必须被删光;被 c 隔开的每一段连续非 c 字符互相独立,长度为 L 的连续段需要 ⌈log2(L+1)⌉ 次操作才能删完。因此字符串的权值等于:对所有出现过的字母,取其「最长待删段」对应操作次数的最小值。
要让权值恰好为 k,必须存在某字母的最长待删段长度落在 [2k−1,2k−1],且没有任何字母的操作次数更小。由此得到判定:
-1。a 后接 p 个字符 b。保留 a 时待删段长度恰好为 p,操作次数为 k;保留 b 时待删段更长,操作次数不小于 k。故权值恰好为 k。定义一次操作为:在当前字符串中选择若干个两两互不相邻的字符并删除它们。删除后,两侧剩余字符会拼接到一起。
一个仅由小写英文字母组成的字符串的权值,是指通过若干次上述操作,把它变成「剩余字符全部相同」所需的最少操作次数。若字符串已经全部相同,权值为 0。
给定两个正整数 n 和 k,请构造一个长度为 n、仅含小写英文字母、权值恰好等于 k 的字符串。若有多种合法构造,输出任意一种即可;若无法构造,输出 -1。
约束:n 与 k 满足 1≤k≤n≤2×105。
By signing up a CodeFun2000 universal account, you can submit code and join discussions in all online judging services provided by us.