CF2084H.Turtle and Nediam 2

NOI/NOI+/CTSC

通过率:0%

AC君温馨提醒

该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。

题目描述

LGR-205-Div.1 C Turtle and Nediam

给定一个长度为 nn 的二进制序列 ss,仅由 00 和 11 组成。

你可以进行最多 n−2n - 2 次(可以是零次)以下操作:

  • 设当前序列 ss 的长度为 mm。选择一个整数 ii 满足 1≤i≤m−21 \le i \le m - 2。
  • 设子数组 [si,si+1,si+2][s_i, s_{i + 1}, s_{i + 2}] 的中位数 ∗^{\text{∗}} 为 xx,并令 jj 为满足 j≥ij \ge i 且 sj=xs_j = x 的最小整数。
  • 从序列中移除 sjs_j 并将剩余部分拼接。换句话说,将 ss 替换为 [s1,s2,…,sj−1,sj+1,sj+2,…,sm][s_1, s_2, \ldots, s_{j - 1}, s_{j + 1}, s_{j + 2}, \ldots, s_m]。

注意每次操作后,序列 ss 的长度会减少 11。

求经过若干次操作后,可以得到的不同二进制序列的数量,结果对 109+710^9 + 7 取模。

∗^{\text{∗}} 长度为奇数 kk 的数组的中位数是指排序后的第 k+12\frac{k + 1}{2} 个元素。

输入格式

每个测试包含多个测试用例。第一行包含测试用例的数量 tt(1≤t≤1041 \le t \le 10^4)。接下来是每个测试用例的描述。

每个测试用例的第一行包含一个整数 nn(3≤n≤2⋅1063 \le n \le 2 \cdot 10^6)——二进制序列的长度。
第二行包含一个长度为 nn 的字符串 ss,仅由 00 和 11 组成。

保证所有测试用例的 nn 之和不超过 2⋅1062 \cdot 10^6。

输出格式

对于每个测试用例,输出一个整数——可以得到的二进制序列的数量,对 109+710^9 + 7 取模。

输入输出样例

  • 输入#1

    5
    5
    11111
    6
    100011
    9
    000111000
    14
    11001111111000
    16
    0010000110100011

    输出#1

    4
    8
    30
    114
    514

说明/提示

  • 在第一个测试用例中,可以得到以下二进制序列:[1,1][1, 1]、[1,1,1][1, 1, 1]、[1,1,1,1][1, 1, 1, 1]、[1,1,1,1,1][1, 1, 1, 1, 1]。

  • 在第二个测试用例中,可以得到以下二进制序列:[0,1][0, 1]、[0,1,1][0, 1, 1]、[1,0,1][1, 0, 1]、[1,0,0,1][1, 0, 0, 1]、[1,0,1,1][1, 0, 1, 1]、[1,0,0,0,1][1, 0, 0, 0, 1]、[1,0,0,1,1][1, 0, 0, 1, 1]、[1,0,0,0,1,1][1, 0, 0, 0, 1, 1]。例如,要得到 [0,1,1][0, 1, 1],可以:

    • 选择 i=2i = 2。子数组 [0,0,0][0, 0, 0] 的中位数为 00。移除 s2s_2,序列变为 [1,0,0,1,1][1, 0, 0, 1, 1]。
    • 选择 i=1i = 1。子数组 [1,0,0][1, 0, 0] 的中位数为 00。移除 s2s_2,序列变为 [1,0,1,1][1, 0, 1, 1]。
    • 选择 i=1i = 1。子数组 [1,0,1][1, 0, 1] 的中位数为 11。移除 s1s_1,序列变为 [0,1,1][0, 1, 1]。

翻译由 DeepSeek V3 完成

输入解题思路,AI测评打分。不知道怎么写?

首页