CF1620C BA-String
题目描述
给定一个整数 $k$ 和一个只包含小写拉丁字母 'a' 和星号 '*' 的字符串 $s$。
每个星号都应被替换为若干(从 $0$ 到 $k$,包括 $0$ 和 $k$)个小写拉丁字母 'b'。不同的星号可以被替换为不同数量的字母 'b'。
替换后的结果称为 BA-字符串。
如果两个字符串 $a$ 和 $b$ 长度不同,或者存在某个位置 $i$ 满足 $a_i \neq b_i$,则认为这两个字符串不同。
如果满足以下任一条件,则字符串 $a$ 的字典序小于字符串 $b$:
- $a$ 是 $b$ 的前缀,且 $a \ne b$;
- 在第一个不同的位置,$a$ 的字母在字母表中比 $b$ 的对应字母更靠前。
现在,考虑所有不同的 BA-字符串,找出其中字典序第 $x$ 小的字符串。
输入格式
第一行包含一个整数 $t$($1 \le t \le 2000$),表示测试用例的数量。
每个测试用例的第一行包含三个整数 $n$、$k$ 和 $x$($1 \le n \le 2000$;$0 \le k \le 2000$;$1 \le x \le 10^{18}$)。$n$ 表示字符串 $s$ 的长度。
每个测试用例的第二行是一个长度为 $n$ 的字符串 $s$,只包含字符 'a' 或 '*'。
所有测试用例中 $n$ 的总和不超过 $2000$。对于每个测试用例,$x$ 不会超过不同 BA-字符串的总数。字符串 $s$ 至少包含一个字符 'a'。
输出格式
对于每个测试用例,输出一行,仅包含小写字母 'a' 和 'b' 的字符串,即字典序第 $x$ 小的 BA-字符串。
说明/提示
在第一个样例中,按字典序排列的 BA-字符串为:
1. a
2. ab
3. abb
4. abbb
5. abbbb
在第二个样例中,按字典序排列的 BA-字符串为:
1. aa
2. aba
3. abba
注意,字符串 "aba" 只计数一次,尽管有两种方式用 'b' 替换星号得到它。
由 ChatGPT 4.1 翻译