Brukhovich and Exams

我们将gcd为1的相邻两个数连边,比如

最初的ans就是边的总数

我们考虑一次操作最多让两条边消失。我们将这些边看成若干连通块(比如上面这幅图就有两个连通块,分别有三条边和一条边)。对于一个连通块若含有偶数条边,显然我们每次操作都可以让两条边消失,若含有奇数条边,最后要剩下一条边

所以我们先把所有的连通块处理了,来看看剩下了多少条边以及剩余了多少次操作次数,比较即可

这个算法对吗?对了一半

我们的前提——一次操作让两条边消失——是要没有数为1的情况下才成立的。现在有了1怎么办?

我们稍微修改一下就好了,将所有1独立成连通块,比如

那么对于非1的块,我们仍然执行上面的算法,然后来考虑剩余的边

对于全1的块,设其有num1,那么我们每执行一次操作会让ans1,但是如果执行了num次操作,ans总共会少num+1(其实这里有一种特殊情况,就是这个块的左端点为1或者右端点为n,此时执行num次操作ans还是只会减少num次)(其实还有一种最特殊的情况就是所有ai都是1,此时我们特殊判断就好了)。所以我们肯定按照全1块的长度排序,优先处理长度较小的全1

如果所有全1块都处理完了还有次数没有用,我们再来考虑最开始的长度为偶数的非1块(这种块有奇数条边,所以最后会剩下一条边)剩下的边即可

update 2024.7.24

重新做的时候,想出来了前半段做法,特殊处理1的操作可以记住

但是还是没办法严格证明,CF的题很多都是这样吧

posted @   最爱丁珰  阅读(4)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统
· 【译】Visual Studio 中新的强大生产力特性
· 2025年我用 Compose 写了一个 Todo App
点击右上角即可分享
微信分享提示