2023.8.10 闲话

看了一眼 STAOI R3 评价,主要都是针对 T2 的,后两道没多少评价,额 . T3 评价有点分化,可能和个人爱好有关 .

T2 数据较弱,我先谢罪 /wq

不过赛时过 T4 的没有写正解的,恼 . 赛后改成 2.5s 了,都得死 /fn(upd. 没杀掉,算了

其实好像时限是 1.5 倍 std 时间就行,没注意到 . 当时写的 std 跑的也不是那么快,就开的 4s,然后就被各种艹过。。

大豆

对于一个序列 \(\{a\}\),定义其大豆化 (Soybeanization) 序列 \(\{b\}\) 由如下操作得到:

  1. 初始 \(\{b\}\)\(\{a\}\) 相等。
  2. \(n\) 从小到大遍历整个正整数集,对于每个 \(n\),进行操作:
    • \(i\) 从小到大遍历整个不小于 2 的正整数集,对于每个 \(i\),操作 \(b_n\gets b_n-b_{\lfloor\frac ni\rfloor}\)
    • 如果 \(i>n\),结束过程。

进而,定义一个序列的 \(k\)-大豆化序列为进行 \(k\) 次大豆化操作后得到的序列。

现在给你一个整数序列 \(\{t_n\}\),将 \(\{t\}\) 复制无穷遍得到序列 \(\{a\}\),求 \(\{a\}\)\(k\)-大豆化序列的第 \(m\) 项。

序列下标从 1 开始。答案可能很大,对 \(23068673\) 取模。

\(1\le n\le 10^4\)\(1\le m\le 10^{10}\)\(k\in\{1,2,3\}\)

其实就是 SoyTony 筛啦,不过这个的预处理部分没有好组合意义,Rolling_star 给出了代数推导,感谢 .

首先考虑 \(\{a\}\) 经过一次大豆化之后得到的序列 \(\{b\}\) 满足递推:

\[b_m=a_m-\sum_{d=2}^mb_{\lfloor\frac md\rfloor} \]

那么暴力递归记忆化即可做到 \(O(k\cdot m^{3/4})\) .

原递推式可以改写为:

\[b_m=a_m+b_m-\sum_{d=1}^mb_{\lfloor\frac md\rfloor} \]

那么就有 \(\displaystyle \sum_{d=1}^mb_{\lfloor\frac md\rfloor}=a_m\),施整除 Möbius 反演,即得:

\[b_m=\sum_{i=1}^m\mu(i)a_{\lfloor\frac mi\rfloor} \]

(我本来以为这个整除 Möbius 反演没有啥应用的,没想到还能和 SoyTony 筛联系上)

进而考察 \(\{b\}\) 的差分:

\[\begin{aligned}\begin{aligned}b_m-b_{m-1}&=\sum_{i=1}^m\mu(i)(a_{\lfloor\frac mi\rfloor}-a_{\lfloor\frac{m-1}i\rfloor})\\&=\sum_{i\mid m}\mu(i)(a_{\frac mi}-a_{\frac{m}i-1})\end{aligned}\end{aligned} \]

其中 \(a_0=0\) .

那么 Dirichlet 前缀和即可求出 \(b\) 的差分,前缀和后即为 \(b\),从而可以做到小范围预处理,若 \(\le B\) 的部分预处理,结合杜教筛的时间复杂度分析,复杂度就是 \(O\left(B\log\log B+\dfrac{m}{\sqrt B}\right)\),取 \(B=m^{2/3}\) 那么就是 \(O(km^{2/3}\log\log m)\),可以通过本题 .

有人评论我说 zak 有块筛卷积好做法,不过我又看了一遍他那个博也没咋看懂 . 颤抖 .

关于 \(O(km^{2/3}\log m)\) 做法:也可以考虑直接对递推差分,这样就去掉整除了,不过得到的形式不太能 Dirichlet 前缀和(至少在我看来). 现在应该已经被我卡了 .(upd. abcdefg

posted @ 2023-08-10 15:30  Jijidawang  阅读(121)  评论(2编辑  收藏  举报
😅​