2023.3.7 闲话

今天把博客的字体优先级改了一下,现在应该是上不了 fonts.googleapis.com 的 Windows 一般会匹配上 Microsoft YaHei,Linux 上一般会匹配 sans-serif,MacOS 上一般会匹配 PingFang SC(这个我没条件测试).

上得了 fonts.googleapis.com 的话当然是匹配 Noto Serif SC .

别的情况应该没了,我觉得不会有匹配上 Times New Roman 的吧!

\[\newcommand{\dep}[0]{\operatorname{dep}} \newcommand{\dist}[0]{\operatorname{dist}} \]


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\) .

这样就四次询问解决了!如果没逆元可以多来几轮我相信一定会有的!虽然这样就不是四次询问了。

posted @ 2023-03-07 16:00  Jijidawang  阅读(103)  评论(4编辑  收藏  举报
😅​