## IOI '20 P4 - Packing Biscuits

View as PDF

Points: 25 (partial)
Time limit: 0.5s
Memory limit: 1G

Problem types
Allowed languages
C++

Aunty 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:

int64 count_tastiness(int64 x, int64[] 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 .

1. ( points) , and for each call to count_tastiness, the sum of tastiness values of all biscuits in the pantry does not exceed .
2. ( points)
3. ( points)
4. ( points) The correct return value of each call to count_tastiness does not exceed .
5. ( points) No additional constraints.

• line : return value of count_tastiness for the -th scenario in the input.