CF1038F Wrap Around
题目描述
给定一个二进制字符串 $s$。
请你计算长度为 $n$ 的不同循环二进制字符串的数量,这些字符串中包含 $s$ 作为子串。
如果存在某个循环移位后的字符串 $t$,使得 $s$ 是该字符串的一个子串,则称循环字符串 $t$ 包含 $s$ 作为子串。
例如,循环字符串 "000111" 包含子串 "001"、"01110" 和 "10",但不包含 "0110" 和 "10110"。
如果两个循环字符串本身不同,则认为它们是不同的循环字符串,即使它们仅通过循环移位不同,也视为不同的循环字符串。
输入格式
第一行包含一个整数 $n$($1 \le n \le 40$),表示目标字符串 $t$ 的长度。
第二行包含字符串 $s$($1 \le |s| \le n$),表示必须作为子串出现的字符串。字符串 $s$ 仅包含字符 '0' 和 '1'。
输出格式
输出一个整数,表示包含 $s$ 作为子串的不同循环二进制字符串 $t$ 的数量。
说明/提示
在第一个样例中,有三个包含 "0" 的循环字符串——"00"、"01" 和 "10"。
在第二个样例中,只有两个这样的字符串——"1010" 和 "0101"。
由 ChatGPT 4.1 翻译