CF2208E.Counting Cute Arrays

省选/NOI-

通过率:0%

AC君温馨提醒

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

题目描述

给定长度为 nn 的正整数数组 [A1,A2,…,An][A_1, A_2, \ldots, A_n],定义数组 f(A)f(A) 如下:

对于每个 ii 从 11 到 nn:

  • 如果存在 j<ij < i 满足 Aj<AiA_j < A_i,则 f(A)i=max⁡j<i, Aj<Aijf(A)_i = \max\limits_{j < i,\, A_j < A_i} j,即 f(A)if(A)_i 是位于 ii 前且值严格小于 AiA_i 的最右边元素的下标。
  • 否则,f(A)i=0f(A)_i = 0。

我们称非负整数数组 [P1,P2,…,Pn][P_1, P_2, \ldots, P_n] 是一个“cute array”,如果存在数组 AA 使得 f(A)=Pf(A)=P。

现在给定一个长度为 nn 的数组 XX,其中 −1≤Xi≤n-1 \leq X_i \leq n 对所有 ii 都成立。统计将 XX 中的 −1-1 替换为 00 到 nn 之间的整数后,形成的“cute array” X′X' 的个数。由于答案可能很大,请对 998 244 353998\,244\,353 取模输出。

输入格式

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

每组测试用例第一行包含一个整数 nn(1≤n≤50001 \leq n \leq 5000),表示 XX 的长度。

第二行包含 nn 个整数 X1,X2,…,XnX_1, X_2, \ldots, X_n(−1≤Xi≤n-1 \leq X_i \leq n)。

保证所有测试用例中 nn 的总和不超过 50005000。

输出格式

对于每个测试用例,输出一个整数,表示满足条件的“cute array” X′X' 的数量,对 998 244 353998\,244\,353 取模。

输入输出样例

  • 输入#1

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

    输出#1

    2
    3
    42
    1
    0
    0

说明/提示

对于第一个测试用例,在所有可能的 X′X' 中,只有 [0,0,0][0,0,0] 和 [0,0,2][0,0,2] 是“cute array”。
[0,0,0][0,0,0] 是一个“cute array”,因为 f([1,1,1])=[0,0,0]f([1,1,1]) = [0,0,0],[0,0,2][0,0,2] 也是一个好数组,因为 f([1,1,2])=[0,0,2]f([1,1,2])=[0,0,2]。

对于第二个测试用例,只有 [0,1,1,0][0,1,1,0]、[0,1,1,1][0,1,1,1] 和 [0,1,1,3][0,1,1,3] 是“cute array”。

由 ChatGPT 5 翻译

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

首页