Editorial for DMOPC '17 Contest 2 P2 - Balance
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
For of points, it is possible to try inverting each parenthesis and then checking if the sequence is balanced with a stack.
Time Complexity:
For full points, we can loop through the sequence. Using a deque, we can pop the back of the deque if it forms a pair with the character currently in consideration, otherwise, we can push it into the back of the deque. If the deque is empty, then the sequence is balanced. If the deque is not empty, we can check if both the front and the back of the deque form a matching sequence, and pop them both if this is true. Otherwise, check if the front and back can be inverted to form a balanced sequence, and if so, print Yes
if the deque is of size , and No
otherwise. Proof of correctness is left as an exercise to the reader.
Time Complexity:
Comments
You can also do the question with a stack but we push the ) bracket if the top of the stack is not ( . Similarly if the stack is empty or there is a stack size of 2. It can form a balanced sequence.
FWIW, according to the statement
(())(())
is not balanced.Nice catch, that was entirely our mistake.