CF1295B Infinite Prefixes
题目描述
给定一个长度为 $n$ 的仅由 $0$ 和 $1$ 组成的字符串 $s$。你将字符串 $s$ 无限次拼接,构造出一个无限长的字符串 $t$,即 $t = sss\dots$。例如,如果 $s = 10010$,那么 $t = 100101001010010\dots$。
请计算 $t$ 的前缀中,平衡值等于 $x$ 的前缀数量。一个字符串 $q$ 的平衡值定义为 $cnt_{0, q} - cnt_{1, q}$,其中 $cnt_{0, q}$ 表示 $q$ 中 $0$ 的个数,$cnt_{1, q}$ 表示 $q$ 中 $1$ 的个数。这样的前缀数量可能是无限的,如果是无限的,请输出 $-1$。
前缀是指由某个字符串的前若干个字符组成的子串,且不改变字符顺序。空串也是合法前缀。例如,字符串 "abcd" 有 $5$ 个前缀:空串、"a"、"ab"、"abc" 和 "abcd"。
输入格式
第一行包含一个整数 $T$($1 \le T \le 100$),表示测试用例的数量。
接下来的 $2T$ 行,每两行描述一个测试用例。第一行包含两个整数 $n$ 和 $x$($1 \le n \le 10^5$,$-10^9 \le x \le 10^9$),分别表示字符串 $s$ 的长度和期望的平衡值。
第二行包含一个二进制字符串 $s$($|s| = n$,$s_i \in \{0, 1\}$)。
保证所有测试用例中 $n$ 的总和不超过 $10^5$。
输出格式
输出 $T$ 行,每行一个整数,表示每个测试用例的答案。如果前缀数量无限,则输出 $-1$。
说明/提示
在第一个测试用例中,$t$ 有 $3$ 个平衡值为 $x$ 的前缀,长度分别为 $28$、$30$ 和 $32$。
由 ChatGPT 4.1 翻译