day1T3 操作

给定一个 质数 \(p\)\(n\) 个操作,操作有如下两种:

  • 给定 \(x\),将 \(w\) 修改为 \(x\)
  • 给定 \(x\),将 \(w\) 修改为 \((w\times x)\bmod p\)

其中 \(w\) 是一个初始为 \(1\) 的变量。

你可以以任意顺序执行上面的 \(n\) 个操作,得到最终的 \(w\)。你需要求出在 \(0\sim p-1\) 中,有多少个数是 无论以什么顺序执行操作都无法得到的。

\(n,p \le 10^6\).


题目给出的条件相当于随意选择一个初始变量,进行任意个乘法操作,问哪些数是无法得到的。

题目保证了 \(p\) 是质数,所以可以先找出 \(p\) 的原根 \(g\),那么就可以把每个数表示成 \(g^x\),就把乘法转化为指数上的加法。

最后要求的相当于一个多项式。

\[(\sum g^{s_i})\times\prod (1+g^{m_i}) \]

前面的部分可以简单处理,中间的乘法可以直接 NTT,让我们来考虑最后一部分怎么做。

最后一部分相当于一个背包,但是直接转移会爆。

\(n \le 10^5\) 的部分分可以直接上 bitset

然后我们注意到一个性质是,\(1\) 转移到 \(0\) 的部分最多只有 \(p\) 次,考虑利用这个性质减少不必要的更新。

我们断环为链,然后对区间进行分治,用树桩数组维护哈希,如果哈希相等就直接返回。

有一个可能的问题是可能会产生 \(1 \rightarrow 0\) 的不必要的更新。

实际上是没有问题的,因为在整个转移方向构成的环上,每一个 \(1 \rightarrow 0\) 必然会和一个 \(0 \rightarrow 1\) 配对。

于是就对了,复杂度 \(O(nlog^2n)\)

posted @ 2025-04-20 15:33  CuteNess  阅读(15)  评论(0)    收藏  举报