Waste less time on Facebook — follow Brilliant.

Can anyone help me out with this problem?

Kuching the Cat enjoys eating fish. However, he accidentally bought a large fish and does not want to eat all of it. To solve his problem, he has subdivided the fish into N linear segments (head to tail) and has given each segment a ‘satisfaction rating’. These segments are labelled 1 to N. The higher the satisfaction rating, the more Kuching will enjoy eating this segment of the fish. However, fish only taste nice if eaten as a chunk. One chunk consists of multiple linear segments of fish that are contiguous/consecutive.

Kuching is very picky and will not enjoy a chunk of fish where the sum of satisfaction ratings is less than K (i.e. he wants the sum to be ≥ K). He wonders how many ways are there to cut a single chunk out of the fish such that he would enjoy eating. Those segments not part of the chunk will be thrown and not eaten.

To clarify: a chunk must contain at least 1 linear segment of fish and can only contain up to N segments in total (i.e. the entire fish).


The first line of input will contain two 32-bit signed integers, N and K. Note that N will always be positive while K can take both positive and non-positive integers.

The next line will be an array containing the satisfaction rating of the N segments. The i-th integer will be the satisfaction rating of the i-th segment of the fish. Do note that the satisfaction ratings will fit into a 32-bit signed integer and can take on positive and non-positive values.


Output a single integer, the number ways there are to cut a single chunk out of the fish such that Kuching the Cat would enjoy eating (i.e. sum of satisfaction ratings ≥ K).


5 2
1 -2 3 -4 5



Kuching the Cat has divided the fish into 5 segments. The first segment has satisfaction rating 1, 2nd has rating -2, 3rd has rating 3, 4th has rating -4 and the 5th has rating 5.

He will only enjoy chunks of fish which the sum of satisfaction ratings is more than or equal to 2.

Hence, the six chunks that he will enjoy are: [1 -2 3], [1 -2 3 -4 5], [-2 3 -4 5], [3], [3 -4 5], [5]

No other possible chunks will have a sum of satisfaction ratings ≥ K.

Do note that [1 3 5] is not a valid chunk as they are not contiguous/consecutive.

Problem adapted from Malaysia Computing Olympiad 2014

Note by Christopher Boo
1 year, 6 months ago

No vote yet
1 vote


Sort by:

Top Newest

I've not solved this but to use DP, this is the key idea: you will need an estimated possible gain and a target.

You'll be creating a contiguous chunk from left to right.

When you pick up a piece such that the maximum possible gain on the rest of the pieces in the right will in no way satisfy the remaining target and that you are already short of the remaining target, you do not need to explore anymore to the right.

I understand that the above is poorly phrased. I will make a more complete solution if I have time. Agnishom Chattopadhyay · 1 year, 6 months ago

Log in to reply

@Agnishom Chattopadhyay what you did? Salman Rasheed · 1 year, 4 months ago

Log in to reply

@Christopher Boo , here is a complete python solution:

def xfish(data, target):
    chunks = []
    if data == []:
            return chunks
    if data[0] >= target:
    if sum(data) < target:
            return chunks
    for i in xfish(data[1:], target-data[0]):
    return chunks

def fish(data,target):
    chunks = []
    for i in xrange(len(data)):
            chunks += xfish(data[i:],target)
    return chunks


>>> fish([1, -2, 3, -4, 5],2)
[[1, -2, 3], [1, -2, 3, -4, 5], [-2, 3, -4, 5], [3], [3, -4, 5], [5]]
Agnishom Chattopadhyay · 1 year, 6 months ago

Log in to reply

@Agnishom Chattopadhyay Sorry, something is terribly wrong about the above. I do not know what. Agnishom Chattopadhyay · 1 year, 6 months ago

Log in to reply

You can always brute-force it. Check all possible 1 segment combinations, all possible 2 segment ones, and so on.

This seems like a DP problem, though. But I'm not familiar enough with DP to have any idea what to do to solve this problem. Kp Govind · 1 year, 6 months ago

Log in to reply

@Kp Govind For \(N=2^{31}-1\) the complete search includes \(\approx 2.3\times 10^{18}\) possibilities. This has to be solved via DP. Jubayer Nirjhor · 1 year, 6 months ago

Log in to reply


Problem Loading...

Note Loading...

Set Loading...