CF2084E.Blossom

提高+/省选-

通过率:0%

AC君温馨提醒

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

题目描述

给定一个长度为 nn 的排列 aa ∗^{\text{∗}},其中部分元素缺失(用 −1-1 表示)。

定义一个排列的值为其所有非空子段 ‡^{\text{‡}} 的 MEX †^{\text{†}} 之和。

求所有可能通过填充 aa 中缺失元素形成的有效排列的值的总和,结果对 109+710^9 + 7 取模。

∗^{\text{∗}} 长度为 nn 的排列是指由 00 到 n−1n - 1 的 nn 个不同整数按任意顺序组成的数组。例如,[1,2,0,4,3][1,2,0,4,3] 是一个排列,但 [0,1,1][0,1,1] 不是排列(因为 11 在数组中出现了两次),[0,2,3][0,2,3] 也不是排列(因为 n=3n=3 但数组中包含 33)。

†^{\text{†}} 整数集合 c={c1,c2,…,ck}c = \{c_1, c_2, \ldots, c_k\} 的最小排除值(MEX)定义为不包含在 cc 中的最小非负整数 xx。

‡^{\text{‡}} 序列 aa 是序列 bb 的子段,当且仅当 aa 可以通过从 bb 的开头和结尾删除若干(可能为零或全部)元素得到。

输入格式

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

每个测试用例的第一行包含一个整数 nn(1≤n≤50001 \le n \le 5000)。
第二行包含 nn 个整数 a1,a2,…,ana_1, a_2, \ldots, a_n(−1≤ai<n-1 \le a_i < n)。

保证 aa 中非 −1-1 的元素互不相同。
保证所有测试用例的 nn 之和不超过 50005000。

输出格式

对于每个测试用例,输出一个整数——所有可能有效排列的值的总和对 109+710^9 + 7 取模的结果。

输入输出样例

  • 输入#1

    5
    2
    0 -1
    2
    -1 -1
    3
    2 0 1
    3
    -1 2 -1
    5
    -1 0 -1 2 -1

    输出#1

    3
    6
    7
    10
    104

说明/提示

  • 在第一个测试用例中,唯一有效的排列是 [0,1][0, 1],其值为 33,因为:

    mex⁡([0])+mex⁡([1])+mex⁡([0,1])=1+0+2=3\operatorname{mex}([0]) + \operatorname{mex}([1]) + \operatorname{mex}([0, 1]) = 1 + 0 + 2 = 3

    因此答案为 33。

  • 在第二个测试用例中,有两个有效排列:[0,1][0, 1] 和 [1,0][1, 0]。[0,1][0, 1] 和 [1,0][1, 0] 的值均为 33,因此答案为 3+3=63 + 3 = 6。

  • 在第四个测试用例中,有两个有效排列:[0,2,1][0, 2, 1] 和 [1,2,0][1, 2, 0]。[0,2,1][0, 2, 1] 的值为 55,因为:

    mex⁡([0])+mex⁡([2])+mex⁡([1])+mex⁡([0,2])+mex⁡([2,1])+mex⁡([0,2,1])=1+0+0+1+0+3=5\operatorname{mex}([0]) + \operatorname{mex}([2]) + \operatorname{mex}([1]) + \operatorname{mex}([0, 2]) + \operatorname{mex}([2, 1]) + \operatorname{mex}([0, 2, 1]) = 1 + 0 + 0 + 1 + 0 + 3 = 5

    [1,2,0][1, 2, 0] 的值也为 55,因为:

    mex⁡([1])+mex⁡([2])+mex⁡([0])+mex⁡([1,2])+mex⁡([2,0])+mex⁡([1,2,0])=0+0+1+0+1+3=5\operatorname{mex}([1]) + \operatorname{mex}([2]) + \operatorname{mex}([0]) + \operatorname{mex}([1, 2]) + \operatorname{mex}([2, 0]) + \operatorname{mex}([1, 2, 0]) = 0 + 0 + 1 + 0 + 1 + 3 = 5

    因此答案为 5+5=105 + 5 = 10。

翻译由 DeepSeek V3 完成

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

首页