Editorial for The Contest Contest 1 P4 - A Typical YAC Problem
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1
Let's consider how we can build up a path Josh can take and how this affects its corresponding arrays and .
Initially, Josh is at so , and ( is the only nonzero element). Observe that we can extend Josh's path by performing the following operation as many times as needed:
Pick an index where . Then replace with either the elements or . This corresponds to incrementing , or , by respectively. This new path has length .
Then we observe that the above operation is equivalent to the following:
Pick adjacent indices , such that at least one of are nonzero. Then increment and by .
Given an array , how can we check if it can be made by performing the above operations? To check if index is a possible starting point, we first decrement by . Then we go from to , greedily decrementing adjacent indices until they all become . An important observation to make is that each pair of indices must be decremented at least once, since when constructing the array, at least one of the elements in the pair had to already be nonzero. If these conditions are met and the ending array is , then is a possible starting point.
Time Complexity:Subtask 2
We can optimize the solution above to by precomputing the resultant array after decrementing a prefix or suffix of the array to . That is, we let denote the value of after decrementing all adjacent pairs of indices until they become . Let denote the value of after decrementing all adjacent pairs of indices until they become . Then to check if is a possible starting point, we simply check if (if we can undo the operations to end up with the starting array of ).
Time Complexity:Subtask 3 and 4
We first observe that the minimum length path Josh could take is . Excluding , this corresponds to the frequency array .
However, this minimum length path may not satisfy all the requirements, since the subarrays , and may have lengths greater than . To resolve this, we try adding "zigzags" to the path. To do this, we first define . Now consider a monotonic subarray of length . If there exists an such that and , we can turn the subarray into , where the length of the longest contiguous subarray is now strictly less than . Hence, we try to add as many zigzags as possible to the path.
To compute this, let if Josh can go from without visiting more than houses in a row. Similarly we let if Josh can go from without visiting more than houses in a row. To compute , we go from left to right and keep track of the rightmost indices (initially ) of when Josh last changed directions (i.e. when he takes a zigzag). As soon as we find an index where , there are two cases. If , Josh takes one zigzag so we set to to . If , Josh takes at least zigzags so we set both and to . We then decrement by . If , then and let . Otherwise, any starting point greater than or equal to is impossible so . The idea for computing is similar, where we let . Then in order for to be a possible starting point, we must also have and . The second condition must hold since the subarray is the optimal subarray for Josh to take when he passes by when travelling from as it minimizes the distance between the two zigzags.
Time Complexity:
Comments