#P6836. [IOI2020] 装饼干
[IOI2020] 装饼干
题目描述
Khong 阿姨在组织一场有 位选手参加的竞赛,她打算给每位选手一 袋饼干。总共有 种不同类型的饼干,编号为从 到 。类型为 的每块饼干都有一个 口味值 。在 Khong 阿姨的食品储藏室里,有 (有可能为 )块类型为 的饼干。
对每种类型的饼干,Khong 阿姨在每个袋子都会装上 或者多块。所有袋子里面类型为 的饼干的总块数不能超过 。一个袋子里面所有饼干的口味值的总和,被称为这袋饼干的 总口味值。
请帮 Khong 阿姨算一下,究竟存在多少不同的 值,使得她可以装出 袋饼干,而且每袋饼干的总口味值都等于 。
实现细节
你需要实现下面的这个函数:
int64 count_tastiness(int64 x, int64[] a)
- :需要装的饼干袋的数量。
- :长度为 的数组。对 , 表示在食物储藏室里类型为 的饼干数量。
- 此函数应当返回不同 值的数目,使得阿姨可以装出 袋饼干,且每袋饼干的总口味值都为 。
- 此函数会被调用 次 (对于允许的 值,详见约束条件和子任务部分)。每次调用应当被看成是独立的场景。
提示
样例说明
例 1
考虑如下调用:
count_tastiness(3, [5, 2, 1])
这意味着阿姨打算装 袋饼干,而在食物储藏室里总共有 种类型的饼干:
- 块类型为 的饼干,每块的口味值为 ,
- 块类型为 的饼干,每块的口味值为 ,
- 块类型为 的饼干,其口味值为 。
能够取的值为 。举例来说,为了装出总口味值均为 的 袋饼干,阿姨可以这样装:
- 一袋饼干里有 块类型为 的饼干,以及
- 两袋饼干,其中各有一块类型为 的饼干和一块类型为 的饼干。
由于总共有 个可能的 值,函数应当返回 。
例 2
考虑如下调用:
count_tastiness(2, [2, 1, 2])
这意味着阿姨打算装 袋饼干,而在食物储藏室里总共有 种类型的饼干:
- 块类型为 的饼干,每块的口味值为 ,
- 块类型为 的饼干,其口味值为 ,
- 块类型为 的饼干,每块的口味值为 。
能够取的值为 。由于总共有 个可能的 值,函数应当返回 。
约束条件
- (对于所有的 )
- 对于
count_tastiness
的每次调用,食物储藏室里所有饼干的口味值总和都不会超过 。
子任务
- (9 分) ,且对于
count_tastiness
的每次调用,食物储藏室里所有饼干的口味值总和都不会超过 。 - (12 分)
- (21 分)
- (35 分) 对于
count_tastiness
的每次调用,正确的返回结果都不会超过 。 - (23 分) 没有附加限制条件。
评测程序示例
评测程序示例将读取如下格式的输入数据。第一行包含一个整数 。接下来是 对这样的两行:它们按照下面的格式来描述一个单独的场景:
第 ⾏:
第 ⾏:
评测程序示例的输出结果的格式如下:
第 行 ():count_tastiness
对于输入数据中第 个场景的返回值。