CF1954F Unique Strings
题目描述
我们称两个字符串 $a$ 和 $b$ 是相等的,如果可以通过循环移位字符串 $a$ 得到字符串 $b$。例如,字符串 0100110 和 1100100 是相等的,而 1010 和 1100 则不相等。
给定一个长度为 $n$ 的二进制字符串 $s$,其前 $c$ 个字符为 1,后 $n-c$ 个字符为 0。
每次操作,你可以将一个 0 替换为 1。
请计算在不超过 $k$ 次操作内,最多可以得到多少个不同的字符串(不同指的是循环同构意义下的不同字符串)。由于答案可能很大,请输出答案对 $10^9+7$ 取模后的结果。
输入格式
第一行包含三个整数 $n$、$c$ 和 $k$($1 \le n \le 3000$;$1 \le c \le n$;$0 \le k \le n-c$)——字符串 $s$ 的长度、前缀 1 的长度以及最多操作次数。
输出格式
输出一个整数,表示在不超过 $k$ 次操作内可以得到的不同字符串的数量,对 $10^9+7$ 取模。
说明/提示
在第一个测试用例中,唯一可能的字符串是 1。
在第二个测试用例中,可能的字符串有:100、110 和 111。字符串 101 与 110 是循环等价的,因此不计入。
在第三个测试用例中,可能的字符串有:10000、11000、10100。字符串 10010 与 10100 循环等价,10001 与 11000 循环等价。
由 ChatGPT 4.1 翻译