logo AlgoBeat OnlineJudge
登录 注册

#10108. [NOIP2025] 清仓甩卖

内存限制:512 MiB 时间限制:1000 ms 输入文件:sale.in 输出文件:sale.out
题目类型:传统 评测方式:文本比较
上传者: Carey_chen HCl

题目描述

小 X 的糖果促销策略很成功,现在糖果店只剩下了 颗糖果,其中第 () 颗糖果的原价为 元。小 X 计划将它们全部重新定价,清仓甩卖。具体地,小 X 会将每颗糖果的清仓价格分别定为 元或 元。设第 () 颗糖果的清仓价格为 元,则它的性价比被定义为原价与清仓价格的比值,即

小 R 又带了 元钱买糖果。这一次,小 R 希望他购买到的糖果的原价总和最大,于是他采用了以下购买策略:将所有糖果按照性价比从大到小排序,然后依次考虑每一颗糖果。具体地,若小 R 在考虑第 () 颗糖果时剩余的钱至少为 元,则他会购买这颗糖果;否则他会跳过这颗糖果,继续考虑下一颗。特别地,若存在两颗糖果的性价比相同,则小 R 会先考虑原价较高的糖果;若存在两颗糖果的性价比与原价均相同,则小 R 会先考虑编号较小的糖果。

例如,若小 X 的糖果商店剩余 颗糖果,原价分别为 ,而清仓价格分别为 ,则性价比分别为 。因此小 R 会先考虑第 颗糖果,然后考虑第 颗糖果,最后考虑第 颗糖果。

小 R 想知道,在小 X 的所有 种定价方案中,有多少种定价方案使得他按照上述购买策略能购买到的糖果的原价总和最大。你需要帮助小 R 求出满足要求的定价方案的数量。由于答案可能较大,你只需要求出答案对 取模后的结果。

输入格式

本题包含多组测试数据。

输入的第一行包含两个非负整数 ,分别表示测试点编号与测试数据组数。 表示该测试点为样例。

接下来依次输入每组测试数据,对于每组测试数据:

  • 第一行包含两个正整数 ,分别表示糖果的数量与小 R 的钱数;
  • 第二行包含 个正整数 ,分别表示每颗糖果的原价。

输出格式

对于每组测试数据,输出一行一个非负整数,表示使得小 R 购买到的糖果的原价总和达到最大值的定价方案数对 取模后的结果。

样例

输入 #1

0 1
3 2
1 3 5

输出 #1

6

数据范围与提示

说明/提示

【样例 1 解释】

该样例即为【题目描述】中的例子。共有以下 种定价方案使得小 R 购买到的糖果原价总和最大,分别为:

  • ,小 R 购买到的糖果原价总和为
  • ,小 R 购买到的糖果原价总和为
  • ,小 R 购买到的糖果原价总和为
  • ,小 R 购买到的糖果原价总和为
  • ,小 R 购买到的糖果原价总和为
  • ,小 R 购买到的糖果原价总和为

注意:若 ,则小 R 会依次购买第 颗和第 颗糖果,原价总和为 ,但小 R 可以只购买第 颗糖果,原价总和为 。因此该定价方案无法使小 R 购买到的糖果的原价总和达到最大值。

【样例 2】

见选手目录下的 sale/sale2.insale/sale2.ans

该样例满足测试点 的约束条件。

【样例 3】

见选手目录下的 sale/sale3.insale/sale3.ans

该样例满足测试点 的约束条件。

【样例 4】

见选手目录下的 sale/sale4.insale/sale4.ans

该样例满足测试点 的约束条件。

【样例 5】

见选手目录下的 sale/sale5.insale/sale5.ans

该样例满足测试点 的约束条件。

【样例 6】

见选手目录下的 sale/sale6.insale/sale6.ans

该样例满足测试点 的约束条件。

【样例 7】

见选手目录下的 sale/sale7.insale/sale7.ans

该样例满足测试点 的约束条件。

【样例 8】

见选手目录下的 sale/sale8.insale/sale8.ans

该样例满足测试点 的约束条件。

【样例 9】

见选手目录下的 sale/sale9.insale/sale9.ans

该样例满足测试点 的约束条件。

【样例 10】

见选手目录下的 sale/sale10.insale/sale10.ans

该样例满足测试点 的约束条件。

【样例 11】

见选手目录下的 sale/sale11.insale/sale11.ans

该样例满足测试点 的约束条件。

【数据范围】

为单个测试点内所有测试数据的 的和。对于所有测试数据,均有:

  • 对于所有 ,均有

::cute-table{tuack}

测试点编号 特殊性质
^ ^ ^
^ B
^
^
^
A
^ B
^

特殊性质 A:

特殊性质 B:对于所有 ,均有