我真心认为这段时间的题有点超出我的能力范围。
今天因为不会莫队被qjk嘲讽了,于是去学,发现自己连分块都不会,感受到自己的弱智,于是又去学。
额感觉把这个放到今天的blog里面不太应景不是吗……打算等我学会之后在自己的洛谷blog里面更新。
所以先说说今天的(以及一些昨天的)题。由于某些原因并没有敲代码,那么直接把思路写下来吧。
矩阵快速幂
其实是昨天的主题,但是不想再upd昨天的blog了。
学习了如何推矩阵。
矩阵其实就是把一些多项式封装起来的东西,这也是矩阵乘法是左行右列然后加起来的那个奇怪的做法的原因。那么我们就可以根据转移多项式推出相应的矩阵。
似乎有点抽象?没有关系,举个栗子。
我们有一个数列 f , f_0=1 , f_1=1 , $fn=f{n-1}+f_{n-2}+n+1(n>1)$ 。
现在要求你求第 k 项,如果 k 比较小可以直接递推求出,但是在 k 非常大的时候就需要用到矩阵快速幂了。
对于每个 n>2,m=n-1 ,我们都有:$ fn=f{n-1}+f{n-2}+n+1,f{n-1}=fm,f{n-2}=f_{m-1} ,也就是 f_n=fm+f{m-1}+(m+1)+1 。那么我们就可以通过维护 fm 与 f{m-1} 来求出f_n$ 。
感觉还是好抽象……那么来试着推一下。
$f_n=fm+f{m-1}+n+1, 这四个项的系数均为1;f_{n-1}=f_m,也就是f_n项系数为1(f_m也就是上一个f_n);n=m+1,也就是n项与1项系数为1;
别忘了最后还有一个1,很显然1项系数为1$ 。
那么就可以直接构造矩阵了:
$1,1,1,1$
$1,0,0,0$
$0,0,1,1$
$0,0,0,1$
最后因为每项对应一行, f对应的矩阵是这样的:
$fnf{n-1}n1$ 。
感觉还是挺简单的,学起来也不算特别慢,就是写这个blog费劲极了。
ps:写完之后预览了一下发现这个网站的markdown一如既往地烂,而这一段用到了非常多长长长长长的公式于是它又爆炸了,建议为获取更好的阅读体验点击这里。
同余
去简 单学习了一下BSGS。
细心的读者应该已经发现今天没有诸如T1T2之类的题目标题了,这证明我今天的做题情况……
但是这不重要,关键在于我还是搞懂了BSGS的思路了。但由于自己并不会写这一段的markdown,所以可能会看起来非常草率。
大致思路就是令 x=i\sqrt{p}-j ,其中 0\leq i,j\leq b , a^{i\sqrt{p}-j} 同余 b (modp) 。也就是说 a^{i\sqrt{p}} 同余 ba^j 。
然后暴力枚举 j 并用Hash存储即可,然后再依次判断是否有符合条件的 i 。
但是exBSGS还没搞懂,让我再看看orz
以及markdown好难写。
组合数
这个还没搞orz感觉Catalan数好抽象。