A16781 | Christmas Tree Decoration
时间限制1s
内存限制256MB
通过 / 提交0/0
题目描述
有 $n$ 个人决定一起装饰圣诞树。他们有 $n+1$ 个装饰品盒子,编号从 $0$ 到 $n$。最初,第 $i$ 个盒子里有 $a_i$ 个装饰品。
我们称一个大小为 $n$ 的排列 $p$(长度为 $n$ 的数组,里面每个数字 $1$ 到 $n$ 各出现一次)是公平的,如果可以通过如下过程将所有装饰品都挂在树上:
- 第 $p_1$ 个人可以从盒子 $0$ 或盒子 $p_1$ 中取一个装饰品,并挂在树上;
- 第 $p_2$ 个人可以从盒子 $0$ 或盒子 $p_2$ 中取一个装饰品,并挂在树上;
- 以此类推;
- 第 $p_n$ 个人后,轮到第 $p_1$ 个人,如此循环,直到所有装饰品都挂完。
在这个过程中,永远不应该出现这样一种情况:第 $i$ 个人需要挂装饰品,而盒子 $0$ 和盒子 $i$ 都为空。如果无法避免这样的情况,则该排列不是公平排列。如果每轮每个人都能选择从哪个盒子取装饰品,始终不出现上述情况,则该排列是公平排列。
你的任务是计算有多少个公平排列。由于答案可能很大,请输出对 $998244353$ 取模的结果。
我们称一个大小为 $n$ 的排列 $p$(长度为 $n$ 的数组,里面每个数字 $1$ 到 $n$ 各出现一次)是公平的,如果可以通过如下过程将所有装饰品都挂在树上:
- 第 $p_1$ 个人可以从盒子 $0$ 或盒子 $p_1$ 中取一个装饰品,并挂在树上;
- 第 $p_2$ 个人可以从盒子 $0$ 或盒子 $p_2$ 中取一个装饰品,并挂在树上;
- 以此类推;
- 第 $p_n$ 个人后,轮到第 $p_1$ 个人,如此循环,直到所有装饰品都挂完。
在这个过程中,永远不应该出现这样一种情况:第 $i$ 个人需要挂装饰品,而盒子 $0$ 和盒子 $i$ 都为空。如果无法避免这样的情况,则该排列不是公平排列。如果每轮每个人都能选择从哪个盒子取装饰品,始终不出现上述情况,则该排列是公平排列。
你的任务是计算有多少个公平排列。由于答案可能很大,请输出对 $998244353$ 取模的结果。
输入格式
第一行包含一个整数 $t$($1 \le t \le 5000$),表示测试用例数量。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 50$)。
第二行包含 $n+1$ 个整数 $a_0, a_1, \dots, a_n$($0 \le a_i \le 10^6$)。
每个测试用例的第一行包含一个整数 $n$($1 \le n \le 50$)。
第二行包含 $n+1$ 个整数 $a_0, a_1, \dots, a_n$($0 \le a_i \le 10^6$)。
输出格式
对于每个测试用例,输出一行一个整数,表示公平排列的数量,对 $998244353$ 取模。
输入输出样例
输入 #1
4 3 1 2 1 0 3 1 0 2 0 1 2 5 4 6 1 4 2 1
输出 #1
2 0 1 12
在第一个样例中,公平的排列是 $[1, 2, 3]$ 和 $[1, 3, 2]$。
让我们更仔细地看看排列 $[1, 3, 2]$ 的装饰过程:
- 第 $p_1=1$ 个人从盒子 $1$ 拿一个装饰品;
- 第 $p_2=3$ 个人从盒子 $0$ 拿一个装饰品;
- 第 $p_3=2$ 个人从盒子 $2$ 拿一个装饰品;
- 第 $p_1=1$ 个人再次从盒子 $1$ 拿一个装饰品。
注意,如果第 $p_1=1$ 个人第一步取的是盒子 $0$,那么第 $p_2=3$ 个人接下来就无法进行(因为此时盒子 $0$ 和 $3$ 都为空)。但由于可以避免这种情况,该排列依然是公平的。
让我们更仔细地看看排列 $[1, 3, 2]$ 的装饰过程:
- 第 $p_1=1$ 个人从盒子 $1$ 拿一个装饰品;
- 第 $p_2=3$ 个人从盒子 $0$ 拿一个装饰品;
- 第 $p_3=2$ 个人从盒子 $2$ 拿一个装饰品;
- 第 $p_1=1$ 个人再次从盒子 $1$ 拿一个装饰品。
注意,如果第 $p_1=1$ 个人第一步取的是盒子 $0$,那么第 $p_2=3$ 个人接下来就无法进行(因为此时盒子 $0$ 和 $3$ 都为空)。但由于可以避免这种情况,该排列依然是公平的。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?