P16572 [USACO26Open] Arranging Cows
题目描述
给定一个长度为 $N$ 的 01 字符串 $s_1 \ldots N$($2 \leq N \leq 10^9$)。在一次操作中,你可以反转区间 $s_l \ldots s_r$,但需满足以下条件:
1. 区间长度为偶数。
2. 区间的前一半全为同一个字符($0$ 或 $1$),后一半全为相反的字符。
3. 要么 $l = 1$,要么 $s_{l-1} \neq s_l$。
4. 要么 $r = N$,要么 $s_{r+1} \neq s_r$。
求将所有 $1$ 移动到字符串最前面所需的最少操作次数,若不可能则报告不可能。如果可能,同时输出达到该最少操作次数的操作序列个数,对 $10^9 + 7$ 取模。
输入格式
第一行包含 $T$($1 \leq T \leq 2026$),表示独立测试用例的数量。每个测试用例按以下格式给出:
01 字符串以压缩格式给出。第一行包含两个整数 $R$(表示字符串中连续段的个数,$2 \leq R \leq 800$)以及字符串的第一个字符($0$ 或 $1$)。
下一行包含 $R$ 个空格分隔的整数 $l_1, l_2, l_3, \ldots l_R$($0 < l_i < 10^9$),表示 $s$ 中相同字符的最大连续块的长度。保证 $N = \sum_{i=1}^{R} l_i \leq 10^9$。
此外,保证所有测试用例的 $R^2$ 之和不超过 $1.5 \cdot 10^6$。
输出格式
对于每个测试用例,输出一行两个整数:将所有的 $1$ 移动到最前面所需的最少操作次数(若不可能则输出 $-1$),以及达到该最少操作次数的操作序列个数对 $10^9 + 7$ 取模的结果。
说明/提示
### 样例 1 解释
对于第 5 个测试用例,两次操作的一种可行顺序为:$010110 \to 100110 \to 111000$。
### 样例 2 解释
在这些测试用例中,最少操作次数均为 $R/2-1$。
下面是第 4 个测试用例所有 3 种三次操作的操作序列:
```
(1)
10101010
-> 11001010
-> 11001100
-> 11110000
(2)
10101010
-> 10110010
-> 10001110
-> 11110000
(3)
10101010
-> 10101100
-> 11001100
-> 11110000
```
### 计分规则
- 输入 $3$:$N \le 10$,所有测试用例互不相同。
- 输入 $4$:$R \le 10$。
- 输入 $5$-$8$:$R \le 100$,所有测试用例的 $R^2$ 之和不超过 $10^5$,且保证最少操作次数等于 $R/2 - 1$。
- 输入 $9$-$12$:$R \le 100$,所有测试用例的 $R^2$ 之和不超过 $10^5$。
- 输入 $13$-$16$:无额外限制。
翻译由 DeepSeek V4 Pro 完成