2023.3.7 闲话
今天把博客的字体优先级改了一下,现在应该是上不了 fonts.googleapis.com 的 Windows 一般会匹配上 Microsoft YaHei,Linux 上一般会匹配 sans-serif,MacOS 上一般会匹配 PingFang SC(这个我没条件测试).
上得了 fonts.googleapis.com 的话当然是匹配 Noto Serif SC .
别的情况应该没了,我觉得不会有匹配上 Times New Roman 的吧!
SoyTony 于 2023.1.27 对吾等韶身降下神言:【闲话】2023.1.27 斐波那契数列一个性质及推广,我简单落实一下 .
注意看一下 Lemma 3,这是以下内容的理论基础 .
(免责声明:这个不是春季赛游记里说的那个学术部分)
SoyTony 的神力 I
话说上古时期,SoyTony 创世时顺便创造了 SoyTony 数列 \(f\),她由两个参数 \(x,y\) 描述:
\[f(n)=\begin{cases}0&n=0\\1&n=1\\x\cdot f(n-1)+y\cdot f(n-2)&n>1\end{cases} \]SoyTony 要试试 SoyTony 数列的威力,便开始在一棵树上施展神力 .
对于一棵 \(n\) 个点的带点权有根树,点 \(u\) 的点权是 \(a_u\),每次 SoyTony 施展神力时会选定两个点 \(u,v\),然后对于每个 \(u\) 子树内的点 \(x\),将 \(a_x\gets a_x+f(\dist(x,v))\).
为了勘测 SoyTony 数列的效果,SoyTony 有时会抛出若干询问,祂选定一个点 \(u\) 并询问 \(u\) 子树内所有点的点权和,对 \(10^9+7\) 取模 .
\(1\le n,q\le 10^6\),\(q\) 是操作次数 .
Solution:
对于 SoyTony 施展神力的情况讨论一下:
- \(v\) 在 \(u\) 子树内:倍增求 \(u\) 靠近 \(v\) 的那个儿子 \(s\),那么对于 \(u\) 子树内的 \(s\) 的子树和子树补分别处理即可 .
- \(v\) 不在 \(u\) 子树内:就是 \(a_x\gets a_x+f(\dep(x)-\dep(u)+\dist(u,v))\) .
根据以上讨论和 DFS 序的基本转换以及一些抽象可以把问题变得漂亮一点:
维护一个序列 \(\{a_n\}\),有一个固定序列 \(\{b\}\),\(q\) 次操作:
change l r k
,对于所有 \(i\in[l,r]\),让 \(a_i\gets a_i+f(b_i+k)\) .query l r
,求 \(\displaystyle\sum_{i=l}^ra_i\) .
这个就好做很多了,根据 Lemma 3,可以得知 \(f(b_i+k)=y\cdot f(b_i)f(k-1)+f(b_i+1)f(k)\),由于 \(b_i\) 是定值所以只需要维护每个点上 \(f(b_i)\) 和 \(f(b_i+1)\) 的系数,这个可以线段树完成 .
query
维护矩阵乘法或者扩域就完了 .
这样复杂度就是 \(\Theta((n+q)\log n)\) 了,解决了 .
SoyTony 也是给出了很高的评价:
SoyTony 的神力 II
交互 .
后台有一个二阶常系数递推序列 \(f(n)\),由两个参数 \(a,b\) 描述:
\[f(n)=\begin{cases}0&n=0\\1&n=1\\a\cdot f(n-1)+b\cdot f(n-2)&n>1\end{cases} \]有两个公开的正整数 \(p,t\),你可以询问交互库不超过 \(t\) 次,每次你可以给交互库发送一个整数 \(n\),交互库会回答你 \(f(pn)\bmod 998244353\) 和 \(f(pn+1)\bmod 998244353\) 的值,你需要找到后台的 \(a\) 和 \(b\) .
保证 \(0\le a,b<998244353\) .
Solution:
四次询问!SoyTony 大神做到了三次我也不知道咋整的!(UPD. SoyTony 大神的做法目前 OI 界还没有引入,我们众韶身不可能学的会的
首先考察 \(f(2n)=b\cdot f(n)f(n-1)+f(n)f(n+1)\),选一个好的 \(n\) 然后两次询问分别查出来 \(f(n),f(n+1)\) 和 \(f(2n)\) .
这样根据递推式 \(f(n+1)=a\cdot f(n)+b\cdot f(n-1)\),可以把 \(b\cdot f(n-1)\) 用 \(f(n),f(n+1),a\) 表出,这样原式可以看成关于 \(a\) 的一元一次方程,即可解出 \(a\) .
再选一个好的 \(m\),考察 \(f(n+m)=b\cdot f(n)f(m-1)+f(n+1)f(m)\),那么可以两次询问查出来 \(f(m-1),f(m),f(n+m)\),解方程可以得出 \(b\) .
这样就四次询问解决了!如果没逆元可以多来几轮我相信一定会有的!虽然这样就不是四次询问了。
以下是博客签名,正文无关
本文来自博客园,作者:Jijidawang,转载请注明原文链接:https://www.cnblogs.com/CDOI-24374/p/17188237.html
版权声明:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议(CC BY-NC-SA 4.0)进行许可。看完如果觉得有用请点个赞吧 QwQ