CF2124F2.Appending Permutations (Hard Version)
省选/NOI-
通过率:0%
AC君温馨提醒
该题目为【codeforces】题库的题目,您提交的代码将被提交至codeforces进行远程评测,并由ACGO抓取测评结果后进行展示。由于远程测评的测评机由其他平台提供,我们无法保证该服务的稳定性,若提交后无反应,请等待一段时间后再进行重试。
题目描述
这是该问题的困难版本。不同之处在于本版本中 n≤5000。只有在你解决了所有版本的问题后,才能进行 hack。
你有一个初始为空的数组 a。你可以进行如下操作任意次:
- 选择一个整数 s≥1,并将数组 [1,2,…,s] 的一个循环移位结果追加到 a 的末尾。具体来说,选择整数 s 和 r,满足 1≤r≤s,然后将数组
[r,r+1,…,s,1,2,…,r−1]
追加到 a 的末尾。
你还给定一个整数 n 和 m 个限制条件,每个限制条件形如 ai=x。也就是说,对于每个限制条件,最终数组的第 i 个位置的值不能等于 x。
你的任务是统计,使用上述操作可以构造出多少个长度恰好为 n 且满足所有限制条件的不同数组。只要在 1 到 n 的某个位置不同,就认为两个数组不同。
请输出答案对 998244353 取模后的结果。
输入格式
每个测试点包含多个测试用例。第一行包含测试用例数量 t(1≤t≤5000)。接下来是每个测试用例的描述。
每个测试用例的第一行包含两个整数 n 和 m(1≤n≤5000,0≤m≤min(5000,n2)),分别表示数组 a 的长度和限制条件的数量。
接下来的 m 行,每行包含两个整数 i 和 x(1≤i,x≤n),表示最终数组的第 i 个位置不能等于 x。保证没有重复的限制条件。
保证所有测试用例中 n 的总和不超过 5000,m 的总和也不超过 5000。
输出格式
对于每个测试用例,输出一个整数,表示满足条件的数组数量,对 998244353 取模。
输入输出样例
输入#1
7 3 0 3 3 1 1 2 1 3 1 3 2 1 1 2 1 6 2 2 3 4 2 2 3 1 2 2 2 1 1 4 3 2 2 3 2 4 2 3 2 2 3 3 3
输出#1
7 0 1 65 0 4 5
输入#2
1 5000 1 69 420
输出#2
886908216
说明/提示
在第一个测试用例中,总共有 7 个可达数组:[1,2,3],[2,3,1],[3,1,2],[1,1,2],[1,2,1],[2,1,1],[1,1,1]。
在第二个测试用例中,上述 7 个数组都不合法,因为所有元素都不能为 1,而所有数组中至少有一个 1。
在第三个测试用例中,只有 [2,3,1] 被计入。
由 ChatGPT 4.1 翻译
输入解题思路,AI测评打分。不知道怎么写?