Eating Candies
Contest: Codeforces Round 784 (Div. 4)
Difficulty rating: 1100
Tags: binary search, data structures, greedy, two pointers

There are $$$n$$$ candies put from left to right on a table. The candies are numbered from left to right. The $$$i$$$-th candy has weight $$$w_i$$$. Alice and Bob eat candies.

Alice can eat any number of candies from the left (she can't skip candies, she eats them in a row).

Bob can eat any number of candies from the right (he can't skip candies, he eats them in a row).

Of course, if Alice ate a candy, Bob can't eat it (and vice versa).

They want to be fair. Their goal is to eat the same total weight of candies. What is the most number of candies they can eat in total?

Input format:
The first line contains an integer $$$t$$$ ($$$1 \leq t \leq 10^4$$$) — the number of test cases.

The first line of each test case contains an integer $$$n$$$ ($$$1 \leq n \leq 2\cdot10^5$$$) — the number of candies on the table.

The second line of each test case contains $$$n$$$ integers $$$w_1, w_2, \dots, w_n$$$ ($$$1 \leq w_i \leq 10^4$$$) — the weights of candies from left to right.

It is guaranteed that the sum of $$$n$$$ over all test cases does not exceed $$$2\cdot10^5$$$.

Output format:
For each test case, print a single integer — the maximum number of candies Alice and Bob can eat in total while satisfying the condition.

Constraints:
Time limit: 1.0 s
Memory limit: 256.0 MB

Note:
For the first test case, Alice will eat one candy from the left and Bob will eat one candy from the right. There is no better way for them to eat the same total amount of weight. The answer is $$$2$$$ because they eat two candies in total.

For the second test case, Alice will eat the first three candies from the left (with total weight $$$7$$$) and Bob will eat the first three candies from the right (with total weight $$$7$$$). They cannot eat more candies since all the candies have been eaten, so the answer is $$$6$$$ (because they eat six candies in total).

For the third test case, there is no way Alice and Bob will eat the same non-zero weight so the answer is $$$0$$$.

For the fourth test case, Alice will eat candies with weights $$$[7, 3, 20]$$$ and Bob will eat candies with weights $$$[10, 8, 11, 1]$$$, they each eat $$$30$$$ weight. There is no better partition so the answer is $$$7$$$.

Example input:
4
3
10 20 10
6
2 1 4 2 4 1
5
1 2 4 8 16
9
7 3 20 5 15 1 11 8 10

Example output:
2
6
0
7

Editorial:
We can solve the problem with a two pointers technique. Let $$$i$$$ be the left pointer, initially at $$$1$$$, and $$$j$$$ be the right pointer, initially at $$$n$$$. Let's store Alice and Bob's current totals as $$$a$$$ and $$$b$$$.
Let's iterate $$$i$$$ from the left to the right. For each $$$i$$$, we should do the following.
• Increase $$$a$$$ by $$$a_i$$$ (Alice eats the $$$i$$$-th candy).
• Move $$$j$$$ leftwards until Bob's total is at least Alice's total, and update $$$b$$$ every time we move.
• If the two pointers have crossed, then both Alice and Bob took the same candy, which is not possible. So we should exit and output the current answer.
• Otherwise, if $$$a=b$$$ after this step, we should update the current answer to be the value that is equal to Alice and Bob.
Both $$$i$$$ and $$$j$$$ move at most $$$n$$$ times in total, so the solution runs in $$$\mathcal{O}(n)$$$.