Official algorithmic problem description and constraints.
You are given an array A of length N, where each element represents either empty ground (Ai=0) or a wall (a positive integer indicating the height of the wall).
You can place a ball on any empty ground (that is, choose an index i with Ai=0) and push it either to the right or to the left.
When the ball hits a wall, it decreases the height of the wall it hit by 1, and then bounces back in the opposite direction. If the wall's height reaches 0
0, it becomes empty ground.
The ball continues to move until it goes out of bounds.
Determine the number of ways to place and push the ball so that all walls are destroyed. Two ways are considered different if either the starting index of the ball or the direction of the push is different.
Detailed video explanations, mathematical intuition, and clean C++ implementation code.