Editorial for WC '18 Contest 3 S3 - Counterpicking
Submitting an official solution before solving the problem yourself is a bannable offence.
For each Pokémon trainer , let
. We can observe that this ratio is sufficient to determine which of Jessie's Pokémon is optimal to use against that trainer. We can furthermore observe that each of Jessie's Pokémon is either never optimal, or is optimal for a single interval of ratios.
Our objective will be to pre-process Jessie's set of Pokémon into a sequence of Pokémon
and corresponding splitting points
, such that
is optimal for ratios in the interval
,
is optimal for ratios in the interval
, and so on, with
being optimal for ratios in the interval
. If we can perform this pre-processing, then we'll be able to obtain the answer for each trainer
in
time by binary searching on
for the interval containing
, and using the corresponding optimal Pokémon.
Given two of Jessie's Pokémon and
, let's consider when one is more optimal than the other. If
, then whichever Pokémon has a larger
value is simply always better. Otherwise, if we assume that
and let
, then the two Pokémon are equally optimal for the ratio
, Pokémon
is more optimal for all ratios smaller than
, and Pokémon
is more optimal for all ratios greater than
.
Given that fact, let's sort Jessie's Pokémon in non-decreasing order of values and then iterate over them in that order, while ignoring any which are known to never be optimal (due to having an equal
value to another Pokémon and a smaller
value). As we go, we'll maintain our sequence
of optimal Pokémon, which is initially empty. Each time we process a new Pokémon, we'll add it onto the end of
, but first we may need to remove zero or more Pokémon from the end of
if their intervals of optimal ratios have been rendered empty. For example, if the last two Pokémon in
are
and
, we're currently processing Pokémon
, and
, then there is no ratio for which Pokémon
is optimal, and it should be removed from
.
Sorting Jessie's Pokémon takes time, and then processing them to generate the sequence
takes another
time. The sequence of splitting points
may then be generated based on it in
time, with
for each
. Finally, we can use this to compute the optimal answers for all of the Pokémon trainers as described above, bringing the total time complexity up to
.
Comments