显然操作 是最优的。
相当于在 意义下,令 使得 ,选定 使得最大的 在所有可能的 中最小。
求该 .
,可以写成 ,那么我们记录所有出现过的 值。
枚举 ,对每一个 ,在值域上枚举 ,解出对应的 ,取 即为当前 的操作次数。
解 我一开始想的是直接 exgcd,不过 会超时,卡卡常没卡过去。
预处理出逆元 ,那么 ,那么复杂度就降低到 了。
似乎有一种奇怪的边界情况, 后直接相等,此时的操作次数是 次, 最优。如果不管的话按上述算法算出来的操作次数是 ,不过也没啥区别。
显然操作 [1,n] 是最优的。
相当于在 modp 意义下,令 a[i]:=a[i]+kx 使得 a[i]=b[i],选定 x 使得最大的 k 在所有可能的 x 中最小。
求该 x.
a[i]+kx≡b[i](modp),可以写成 kx≡b[i]−a[i](modp),那么我们记录所有出现过的 b[i]−a[i] 值。
枚举 x,对每一个 x,在值域上枚举 b[i]−a[i],解出对应的 ki,取 maxki 即为当前 x 的操作次数。
解 kx≡b[i]−a[i](modp) 我一开始想的是直接 exgcd,不过 p2logp 会超时,卡卡常没卡过去。
预处理出逆元 x−1(modp),那么 k≡(b[i]−a[i])x−1(modp),那么复杂度就降低到 O(p2) 了。
似乎有一种奇怪的边界情况,a[i]modp 后直接相等,此时的操作次数是 1 次,x=0 最优。如果不管的话按上述算法算出来的操作次数是 0,不过也没啥区别。