这题为什么非n的因数不能旋转?百思不得其解
查看原帖
这题为什么非n的因数不能旋转?百思不得其解
291976
quanjun楼主2022/5/21 13:32

题目大意:在一个圆上有 nn 个等距的点以及 mm 条(连接这 nn 个点的)边。问:这些点和边组成的是否是一个 旋转对称图形,即图上每个点沿顺时针旋转 k(<n)k(\lt n) 次后得到的图形和原图形重合。

题解翻译自 官方题解,如下:

让我们暴力枚举 kk 并判断将图形顺时针旋转 kk 次之后能否得到相同的图形。我们可以通过判断每个线段 (a,b)(a,b) 是否都存在一个对应的线段 (a+k,b+k)(a+k, b+k)(你需要按需对 nn 取模,如果这里指的节点编号超过了 nn 的话)。

这给出了一个 O(nm)O(n \cdot m) 的解法,然而,我们只需要去枚举 nn 的因数就可以(而不是说把 11nn 都枚举一遍)。这是因为 (a,b),(a+k,b+k),(a+2k,b+2k),(a,b), (a+k, b+k), (a+2k, b+2k), \ldots 的集合是等价于 (a,b),(a+gcd(n,k),b+gcd(n,k)),(a+2gcd(n,k),b+2gcd(n,k)),(a,b), (a+gcd(n,k), b+gcd(n,k)), (a+2gcd(n,k), b+2gcd(n,k)), \ldots 的集合的。

基于此,时间复杂度可以降为 O(nd(n))O(n \cdot d(n)),其中 d(n)d(n) 表示的是 nn 的因子个数,这个时间复杂度足以解决这个问题。

样例1对应的图片:


我没有搞懂的问题是题解中的这句话:

(a,b),(a+k,b+k),(a+2k,b+2k),(a,b), (a+k, b+k), (a+2k, b+2k), \ldots 的集合是等价于 (a,b),(a+gcd(n,k),b+gcd(n,k)),(a+2gcd(n,k),b+2gcd(n,k)),(a,b), (a+gcd(n,k), b+gcd(n,k)), (a+2gcd(n,k), b+2gcd(n,k)), \ldots 的集合的。

希望有大佬能够帮助我解答一下这个问题,万分感谢!

2022/5/21 13:32
加载中...