 # Codeforces 466C Help

Can anyone help me with this problem.

My approach till now:

1.Make a prefix sum array from the input

2.In one single loop, find indices where `pref[i] = total_sum/3`, such indices will be my possible indices for first block

3.For every such index(say idx), iterate over from `idx to n-1` (say i) to again check
if `a[i]-a[idx] = total_sum/3` , if yes then it is a possible index for the ending of 2nd block and count such possibilities.

But deservedly its showing tle and i’ not sure how to optimise it. code

This a very good question in terms of prefix and suffix. Here are some hints for you:

hint1
• The total sum should be multiple of 3 else answer is zero.
hint2
• You are using a prefix sum array. Can you think the same as the suffix sum array? It can be used to optimize the part3 of your algorithm.
hint3
• If we remove some prefix and suffix from the array such that both do not have any overlapping part and have the sum equal to total sum/3, then the middle array also has the same sum. We use this information to solve the question.
hint4
• So, for 3rd part of your algorithm, for each prefix i that has sum equal to total sum/3, you can try to count the ways to remove a suffix of the original array with same sum and appears the right of the i-th prefix. Make sure that you are not left with the empty array in the middle.
3 Likes

if i’ll be doing it for every such prefix won’t it be n^2 in complexity?

Finally i got AC, thanks bro for helping. Took some time to understand but it was worth it Welcome!