Editorial for Canada Day Contest 2021 - CCC Bad Haha
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Hint
In what cases will operating on a digit decrease the number?
Answer
When the digit is larger than the one after it.
Hint
The earlier digits always make a bigger difference than the later ones.
Solution
Given  moves, Lookcook should move back the first 
 digits that are larger than the digit after it. These 
 digits can be found by keeping a monotonically nondecreasing stack. After finding these 
 values, move them in nondecreasing order (move the smallest of the 
 digits first and the largest last). This takes 
 time for an 
 digit number.
Example
1
26451689
5
 is bigger than 
. So 
 should be a digit that gets moved. The resulting number is 
.
 is bigger than 
, so it should be moved. The resulting number is 
.
Now that  is directly after 
, 
 should be moved. This leaves 
.
Now that  is directly after 
, 
 should be moved. This leaves 
.
 is the last element. But we know that we will move 
 to the end, and it will be smaller than 
. So 
 should also be moved, leaving 
.
 Should be moved for the same reason as 
, but we've used up all our 
 operations, so we stop now.
The  digits we've selected are 
. They should be moved in the non-decreasing order 
, giving the result as 
.
Comments