MoreHolidays

[ABC300F] More Holidays

问题关键:发现并证明一下引理:

  • 一定存在最优解最左端的 o[1,n]

考虑最优解最左端的 o 不在 [1,n],那么修改的 x 位置肯定大于 n,那么对于每个修改的位置,将修改的下标 n(即原来修改 i 处的 x,现在修改 in 处的 x),因为是循环串,所以这样操作一定是可以进行的。然后又因为这个 o 的左端不能延伸,新串的左右相对位置并没有变(即对于修改的位置,左右情况是完全没有发生变化的),所以这样的操作只要一直进行,那么最优解最左端的 o 一定能跑到 [1,n]

有了这个引理,那么问题就好解决了。我们直接枚举起点,看终点最远能延伸到哪里。当然是尽量穿过,直到这段区间内的 x 个数超过 k 为止。这个还是好处理的,主要考虑零散的部分和整段的部分,零散的部分可以用前缀和处理当前位置到末尾的 x 的个数,然后中间的部分直接循环节搞定,最后多出来的部分再使用前缀和搞定。

特别注意要特判最大长度不能超过总长度 nm

code

本文作者:wscqwq

本文链接:https://www.cnblogs.com/wscqwq/p/17485308.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wscqwq  阅读(10)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示
评论
收藏
关注
推荐
深色
回顶
收起