luogu#P8863. 「KDOI-03」构造数组

    ID: 12848 远端评测题 4000ms 512MiB 尝试: 0 已通过: 0 难度: 6 上传者: 标签>动态规划,dpO2优化动态规划优化组合数学

「KDOI-03」构造数组

题目描述

你现在有一个长度为 nn 的数组 aa。一开始,所有 aia_i 均为 00。给出一个同样长度为 nn 的目标数组 bb。求有多少种方案,使得通过若干次以下操作,可以让 aa 数组变成 bb

  • 选出两个不同的下标 1i<jn1\leq i<j\leq n,并将 aia_iaja_j 同时增加 11

两种方案被称之为不同的,当且仅当存在一个 xx 使得一种方案中第 xx 次操作选择的两个下标 (i,j)(i,j) 与另一种方案中的不同。

答案对 998244353\bm{998244353} 取模。

输入格式

从标准输入读入数据。

输入数据一共包含两行。

第一行包含一个正整数 nn

第二行包含 nn 个正整数,表示 b1,b2,,bnb_1,b_2,\ldots,b_n

输出格式

输出到标准输出。

输出一行一个正整数,表示将 aa 数组通过若干次操作变成 bb 数组的方案数对 998244353998244353 取模后的结果。

4
2 2 2 2
90

提示

【样例 1 解释】

种类编号 第一组 第二组 第三组 第四组 方案数
11 1<->2 3<->4 (42)=6\binom{4}{2}=6
22 1<->3 2<->4
33 1<->4 1<->4 2<->3 2<->3
44 1<->2 3<->4 4!=244!=24
55 1<->3 2<->4
66 1<->3 1<->4 2<->3 2<->4

总方案数是 6×3+24×3=906\times3+24\times3=90

【样例 2】

见选手文件中的 array/array2.inarray/array2.ans

此样例满足测试点 686\sim8 的限制。

【样例 3】

见选手文件中的 array/array3.inarray/array3.ans

此样例满足测试点 121412\sim14 的限制。

【样例 4】

见选手文件中的 array/array4.inarray/array4.ans

此样例满足测试点 151815\sim18 的限制。

【样例 5】

见选手文件中的 array/array5.inarray/array5.ans

此样例满足测试点 192019\sim20 的限制。

【样例 6】

见选手文件中的 array/array6.inarray/array6.ans

此样例满足测试点 212221\sim22 的限制。

【样例 7】

见选手文件中的 array/array7.inarray/array7.ans

此样例满足测试点 232523\sim25 的限制。


【数据范围】

对于 100%100\% 的数据,1n5 0001\le n\le5~0001bi30 0001\leq b_i\le30~000bi30 000\sum b_i\le30~000

测试点编号 nn bi\sum b_i
11 5 000\leq5~000 1(mod2)\equiv 1\pmod 2
232\sim3 =1=1 30 000\leq30~000
454\sim5 =2=2
686\sim8 5\leq5 8\leq8
9119\sim11 20\leq20 =n=n
121412\sim14 5 000\leq 5~000
151815\sim18 16\leq16
192019\sim20 700\le 700 700\le700
212221\sim22 5 000\le 5~000 5 000\le5~000
232523\sim25 5 000\le5~000 30 000\le30~000