【洛谷】P8792 [蓝桥杯 2022 国 A] 最大公约数 的题解
题目传送门
思路
首先先考虑数组中是否存在 1 1 1,如果数组中存在 1 1 1,那么我们可以直接进行平铺把全部变成 1 1 1,假设 1 1 1 的个数为 x x x 个,那么最终的答案应该是 n − x n-x n−x 次。
如果原数组中不存在 1 1 1,该如何呢?那么我们应该想方法变出一个 1 1 1,然后使用这个 1 1 1 进行平推将数组全部变成 1 1 1。关于 gcd \gcd gcd,我们首先要明白——如果一段子数组的的 gcd \gcd gcd 为 1 1 1,那么原数组的 gcd \gcd gcd 也一定为 1 1 1。 这也非常容易理解,如果存在一个数组的 gcd \gcd gcd 为 1 1 1,那么这个数组无论再加上任何正整数, gcd \gcd gcd 也永远是 1 1 1,因为 1 1 1 和任何数的 gcd \gcd gcd 都是 1 1 1。
题意要求最少次数,那么在没有 1 1 1 的情况下,我们需要使用最少的步数获得 1 1 1 ,那么就是我们需要在数组中找到最短的子数组,使得它们的 gcd \gcd gcd 为 1 1 1。所以我们会涉及道查询区间 gcd \gcd

文章讲述了如何解决一道关于最大公约数的竞赛题目,当数组中存在1时可以直接平铺,否则需要找到最短的子数组使其gcd为1,利用线段树和二分查找来优化求解过程。
最低0.47元/天 解锁文章
797

被折叠的 条评论
为什么被折叠?



