CF2129D.Permutation Blackhole

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

对于一个长度为 nn 的排列 p1,p2,…,pnp_1, p_2, \ldots, p_n,可以通过如下的染色过程得到对应的染色序列 ss:

  • 初始时,有 nn 个白色格子,从左到右编号为 11 到 nn。在第 00 秒时,每个格子的分数均为 00。
  • 在第 ii 秒(1≤i≤n1 \le i \le n):
    • 如果 i>1i > 1,找到距离格子 pip_i 最近的黑色格子,并将该格子的分数加 11。如果有多个最近的黑色格子,选择编号最小的那个。格子 yy 被称为格子 xx 最近的黑色格子,当且仅当格子 yy 是黑色的,且不存在黑色格子 zz 满足 ∣x−z∣<∣x−y∣|x-z|<|x-y|。
    • 将格子 pip_i 染成黑色。

当所有格子都被染成黑色后,记 sis_i 为格子 ii 的分数(1≤i≤n1 \le i \le n),则得到染色序列 ss。

你可以阅读题目下方的注释以更好地理解题意。

现在给定一个不完整的染色序列 ss,其中部分 sis_i 已经确定,部分尚未确定。请你计算有多少种不同的排列 pp 能够产生该染色序列。由于答案可能很大,请输出答案对 998 244 353998\,244\,353 取模后的结果。

输入格式

每个测试点包含多组测试数据。第一行包含一个整数 tt(1≤t≤1031 \le t \le 10^3),表示测试数据的组数。

对于每组测试数据,第一行包含一个整数 nn(2≤n≤1002 \leq n \leq 100)。

第二行包含 nn 个整数 s1,s2,…,sns_1, s_2, \ldots, s_n(−1≤si≤n−1-1 \leq s_i \leq n-1)。其中 si=−1s_i=-1 表示 sis_i 尚未确定,si≠−1s_i \neq -1 表示 sis_i 已经确定。

保证所有测试数据中 n2n^2 的和不超过 10410^4。

输出格式

对于每组测试数据,输出能够产生该染色序列 ss 的不同排列 p1,p2,…,pnp_1, p_2, \ldots, p_n 的总数,对 998 244 353998\,244\,353 取模。

输入输出样例

  • 输入#1

    9
    3
    -1 -1 1
    3
    -1 -1 -1
    4
    -1 2 -1 0
    4
    -1 0 1 -1
    5
    -1 3 -1 0 -1
    5
    4 4 4 4 4
    5
    1 0 1 2 0
    6
    -1 1 -1 -1 3 0
    13
    -1 -1 -1 -1 -1 -1 2 -1 -1 -1 -1 -1 -1

    输出#1

    2
    6
    4
    3
    8
    0
    4
    10
    867303072

说明/提示

在第一个测试点中,p=[3,1,2]p=[3,1,2] 和 p=[3,2,1]p=[3,2,1] 都可以产生染色序列 s=[−1,−1,1]s=[-1,-1,1]。

对于 p=[3,1,2]p=[3,1,2],染色过程如下图所示。

分别为 p=[3,1,2]p=[3,1,2] 时第 00 秒、第 11 秒、第 22 秒和第 33 秒的格子状态。

对于 p=[3,2,1]p=[3,2,1],染色过程如下图所示。

分别为 p=[3,2,1]p=[3,2,1] 时第 00 秒、第 11 秒、第 22 秒和第 33 秒的格子状态。

由 ChatGPT 4.1 翻译

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

首页