luogu#P16419. [IATI 2022] Cubes
[IATI 2022] Cubes
题目描述
Octavia 的玩具中有 个大小相同的立方体。这些立方体的重量可能不同,但也可能有两个立方体重量相同。Octavia 喜欢把她的立方体排成一个长序列,在玩了几个小时后,她开始琢磨能得到的不同的立方体序列有多少种。
立方体序列由 个整数表示,其中每个整数对应初始序列中相应立方体的重量。Octavia 可以挑选两个相邻的立方体,只有当它们的总重量不超过整数 时才能交换它们。Octavia 可以无限次地重复交换任意两个总重量不超过 的相邻立方体。如果两个序列所对应的立方体重量序列不同,则认为这两个序列是不同的。
以 个立方体、重量分别为 、 的情况为例。可以获得的立方体序列共有 种。第一种就是初始序列。要得到第二种序列,我们可以交换初始序列中第 和第 个位置上的立方体,从而得到序列 。注意,我们不能交换初始序列中第 和第 个位置上的立方体,因为它们不相邻。我们也不能交换第 和第 个位置上的立方体,因为它们的总重量为 ,大于 。最后一种序列可以通过交换初始序列中前两个立方体得到,即 。注意,如果从初始序列出发且 ,则只有一种可能的序列;当 时,也只有一种;当 时,有 种序列;当 时,有 种序列。
请编写一个程序 ,帮助 Octavia 找出不同立方体序列的数量。
输入格式
第一行有两个整数: —— 立方体的数量,以及 —— 可以交换的两个相邻立方体的最大总重量。第二行包含 个正整数 ,对应初始序列中各立方体的重量。
输出格式
输出一行一个整数,表示 Octavia 可以得到的可能序列数,对 取模。
4 5
1 2 1 3
12
5 4
4 3 1 5 2
2
提示
样例解释
样例 1:如题目描述中所示。
样例 2:我们只能交换重量为 和 的立方体,因此答案为 ,两种可能序列为 和 。
数据范围
子任务
| 编号 | 附加约束 | < | 分值 |
|---|---|---|---|
| 其他 | |||
| 1 | 所有重量互不相同 | 7 | |
| 2 | 23 | ||
| 3 | 15 | ||
| 4 | – | ||
| 5 | 所有重量互不相同 | 21 | |
| 6 | – | 19 |
翻译由 DeepSeek V4 Pro 完成