Editorial for Back From Summer '19 P3: ASDFGHJKL
Submitting an official solution before solving the problem yourself is a bannable offence.
Author:
Subtask 1
For the first subtask, we only need to worry about removing individual characters from the original string. Observe that for each of the  removals, it is always optimal to remove the most frequent letter. Thus, we can build a frequency array of the count for each character in 
 and do the following 
 times:
find the most frequent letter and decrement its frequency in the array. After doing this 
 times, we can compute the minimum value using the resulting frequency array.
Time Complexity: 
Subtask 2
For the second subtask, we can see that there are  different substrings to remove. We can get the frequency of the remaining letters quickly by either using prefix sum arrays, or maintaining a sliding window. For each substring that is removed, we will compute the minimum value of the string after removing 
 individual characters, however the method used in subtask 1 will be too slow. Instead, we can observe that after removing 
 letters, there exists a value 
 such that all letters that originally had a frequency of greater than 
 (after removing the substring), now have a frequency of 
 or 
. We can binary search for this value of 
 by checking to see if the sum of the remaining letters is less than or equal to 
. We can then determine the frequencies of the letters for the minimum value string after removing 
 letters, for each possible substring that is removed. The answer is the global minimum among all possible candidates. Be careful when 
, as you can remove the entire string.
Time Complexity: 
Bonus
Can you solve the problem in ?
Comments