等差数列问题

Published: by Creative Commons Licence

  • Tags:

模意义下的等差数列

题目1:给定素数m,并给定n个不同的数a1,,an,满足0ai<m。现在我们希望将整个数组进行排列,得到新的数列b1,,bn,满足对所有的1<i<n,有bibi1=bi+1bi。如果存在这样的一个排列,就输出任意一个,否则报告无解。

这是一道CF原题

如果n1,答案很显然,因此我们仅考虑2n的情况。

设我们找到的等差数列的公式为f(i)=x+id,其中bi=f(i1)。可以发现一定有d>0,考虑到m是素数,因此md一定互质,即我们保证了f(0),f(1),,f(m1)都是不同的数。

nm2满足,则考虑a1,a2,设二者分别对应b的第ii+k项,则一定有a2a1=kd。注意到b1,,bn对应的是f(0),,f(n1),其中正好有nk项的差值正好为kd,因此我们可以通过哈希表枚举有多少数对的差值正好为kd,从而计算出k,进而得出d

知道了k,下面考虑怎么算x。由于

n1i=0ai=n1i=0x+id=nx+n(n1)d2

通过上面的公式,我们可以直接求出x。接下来我们验证一下解是否可行即可。总的时间复杂度为O(n)

下面考虑当nm2的时候,我们可以考虑a中元素的补集¯a即可,可以发现其对应的等差数列为f(n),f(n+1),,f(m1)。求出¯a对应的等差数列,之后递推前面几项即可,时间复杂度相同。

题目1:给定任意数m,并给定n个不同的数a1,,an,满足0ai<m。现在我们希望将整个数组进行排列,得到新的数列b1,,bn,满足对所有的1<i<n,有bibi1=bi+1bi。如果存在这样的一个排列,就输出任意一个,否则报告无解。

一道原题

不会。