这样做还会有一个问题。假如所有 w_i' 的最小值为 w_x',那么在计算 i = x 的答案时就不能与这个字符串作比较了,因为我们要做的是判断当前字符串是否小于其它字符串。所以我们还需要维护次小值w_y',然后在 i \ne x 时将 w_i' 与 w_x' 比较,在 i = x 时将 w_i' 与 w_y' 作比较即可。
Code
赛时我的几个时间优化:
上面说了,需要将 w_i 按字符从大到小排序得到新字符串 w_i',但如果实际排序复杂度是 \Theta(m \log m) 的,算了一下可能会超时。因此这里用桶排代替了 std::sort;