IOI '20 P4 - Packing Biscuits
View as PDFAunty Khong is organising a competition with  participants, and wants to give each participant a bag of biscuits. There are 
 different types of biscuits, numbered from 
 to 
. Each biscuit of type 
 
 has a tastiness value of 
. Aunty Khong has 
 (possibly zero) biscuits of type 
 in her pantry.
Each of Aunty Khong's bags will contain zero or more biscuits of each type. The total number of biscuits of type  in all the bags must not exceed 
. The sum of tastiness values of all biscuits in a bag is called the total tastiness of the bag.
Help Aunty Khong find out how many different values of  exist, such that it is possible to pack 
 bags of biscuits, each having total tastiness equal to 
.
Implementation details
You should implement the following procedure:
long long count_tastiness(long long x, std::vector<long long> a)
: the number of bags of biscuits to pack.
: an array of length
. For
,
denotes the number of biscuits of type
in the pantry.
- The procedure should return the number of different values of 
, such that Aunty can pack
bags of biscuits, each one having a total tastiness of
.
 - The procedure is called a total of 
times (see Constraints and Subtasks sections for the allowed values of
). Each of these calls should be treated as a separate scenario.
 
Examples
Example 1
Consider the following call:
count_tastiness(3, {5, 2, 1})
This means that Aunty wants to pack  bags, and there are 
 types of biscuits in the pantry:
biscuits of type
, each having a tastiness value
,
biscuits of type
, each having a tastiness value
,
biscuit of type
, having a tastiness value
.
The possible values of  are 
. For instance, in order to pack 3 bags of total tastiness 
, Aunty can pack:
- one bag containing three biscuits of type 
, and
 - two bags, each containing one biscuit of type 
and one biscuit of type
.
 
Since there are  possible values of 
, the procedure should return 
.
Example 2
Consider the following call:
count_tastiness(2, {2, 1, 2})
This means that Aunty wants to pack  bags, and there are 
 types of biscuits in the pantry:
biscuits of type
, each having a tastiness value
,
biscuit of type
, having a tastiness value
,
biscuits of type
, each having a tastiness value
.
The possible values of  are 
. Since there are 
 possible values of 
, the procedure should return 
.
Constraints
(for all
)
- For each call to 
count_tastiness, the sum of tastiness values of all biscuits in the pantry does not exceed.
 
Subtasks
- (
points)
, and for each call to
count_tastiness, the sum of tastiness values of all biscuits in the pantry does not exceed.
 - (
points)
 - (
points)
 - (
points) The correct return value of each call to
count_tastinessdoes not exceed.
 - (
points) No additional constraints.
 
Sample grader
The sample grader reads the input in the following format. The first line contains an integer . After that, 
 pairs of lines follow, and each pair describes a single scenario in the following format:
- line 
:
 - line 
:
 
The output of the sample grader is in the following format:
- line 
: return value of
count_tastinessfor the-th scenario in the input.
 
Comments