CF1799G Count Voting

题目描述

有 $n$ 个人将参与投票。每个人恰好有一票。 第 $i$ 个人属于团队 $t_i$($1 \leq t_i \leq n$),其中 $t_i = t_j$ 表示第 $i$ 个人和第 $j$ 个人属于同一个团队。根据规则,每个人必须投票给不同团队的人。注意,这也意味着每个人不能投票给自己。 每个人都知道自己希望获得的票数 $c_i$。有多少种可能的投票方式,使得每个人都能获得期望的票数?由于答案可能很大,请输出对 $998\,244\,353$ 取模后的结果。

输入格式

第一行包含一个整数 $n$($1 \leq n \leq 200$)——表示人数。 第二行包含 $n$ 个整数 $c_1, c_2, \ldots, c_n$($0 \leq c_i \leq n$)——每个人期望获得的票数。保证 $\sum\limits_{i=1}^{n} c_i = n$。 第三行包含 $n$ 个整数 $t_1, t_2, \ldots, t_n$($1 \leq t_i \leq n$)——每个人所属的团队编号。

输出格式

输出一个整数,表示满足条件的投票方案数,对 $998\,244\,353$ 取模。

说明/提示

在第一个测试样例中,有两种可能的投票方式:$(2, 3, 1)$,$(3, 1, 2)$。 在第三个测试样例中,有五种可能的投票方式:$(3, 3, 2, 2, 1)$,$(2, 3, 2, 3, 1)$,$(3, 3, 1, 2, 2)$,$(3, 1, 2, 3, 2)$,$(2, 3, 1, 3, 2)$。 由 ChatGPT 4.1 翻译