先考虑无解的情况,来看样例三,很容易发现是因为太大了,所以每次都会修改之前已经改好的。于是我们猜想,如果任意一段连续的数的长度都小于,那么就无解,证明比较容易,反证就好了,如果存在一个解,那么这个解的最后一步操作,一定是连续的个格子,而且这个格子的颜色一定要一样,与我们前面的条件矛盾,所以无解;于是我们猜想如果存在一个连续段长度大于等于,那么一定有解,我们假设只有一个连续段,然后考虑从这个连续段入手,除了这个连续段,剩下的连续段的长度都小于,我们依次涂每个连续段,最后再涂这个最长的连续段,显然是一个解;拓展到多个连续段的情况,对于两个长度大于等于的连续段之间的连续段(长度都小于),我们按照上面的方法涂,然后最后涂大的连续段,就是一个解,而且可以发现这个解是最优解,来证明一下
对一个长度为的连续段,将其覆盖最少需要次,那么下界就是所有这种连续段的和,显然我们上面的方法可以达到这个下界
代码可以看看,为了避免麻烦,我们断环成链的时候选取两个相邻且不同的数之间断开就好了
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构