洛谷P5110 块速递推 [分块]】的更多相关文章

传送门 思路 显然可以特征根方程搞一波(生成函数太累),得到结果: \[ a_n=\frac 1 {13\sqrt{337}} [(\frac{233+13\sqrt{337}}{2})^n-(\frac{233+13\sqrt{337}}{2})^n] \] (其实我也不知道是不是,网上抄的,懒得算了) 放在模意义下,得到 \[ a_n= 233230706\times (94153035^n-905847205^n) \pmod {1e9+7} \] 后面两个可以分块,预处理出\(x^{[1…
题目大意: 给定一个数列a满足递推式 \(An=233*an-1+666*an-2,a0=0,a1=1\) 求这个数列第n项模\(10^9+7\)的值,一共有T组询问 \(T<=10^7\) \(N\)为\(64\)位正整数 首先感谢出题人的好心,凑了一个好模数,有循环节,于是复杂度骤降 麻麻我会矩阵快速幂! 时间复杂度约为\(O(T*log_{2}n)\) 但很抱歉,时间复杂度仍然不过关. 因为,丧心病狂的出题人把T开到了\(10^7\)!!! 预计得分\(6*1=6\) 这意味着,我们需要在…
P5110 块速递推 题意 多次询问,求数列 \[a_i=\begin{cases}233a_{i-1}+666a_{i-2} & i>1\\ 0 & i=0\\ 1 & i=1\\ \end{cases} \] 的第 \(n\) 项在 \(\mod 1e9+7\) 意义下的值的异或和. 思路 首先这个数列是一个广义斐波那契数列.对于广义斐波那契数列,我们一般是用矩阵快速幂求的. 但是,这个题的询问次数是 \(5e7\) . 所以我们就必须用 \(O(1)\) 的方法处理询问…
传送门 为啥我就没看出来有循环节呢-- 打表可得,这个数列是有循环节的,循环节为\(10^9+6\),然后分块预处理,即取\(k=sqrt(10^9+6)\),然后分别预处理出转移矩阵\(A\)的\(A^1,A^2,...,A^{k-1}\)和\(A^k,A^{2k},...\),那么每一次就能\(O(1)\)回答询问了 注意常数问题--这份代码勉强卡过--建议矩阵里的元素别开数组直接用四个变量存会快一点-- //minamoto #include<bits/stdc++.h> #define…
太菜了,不会生成函数,于是用特征方程来写的这道题 首先我们知道,形如\(a_n=A*a_{n-1}+B*a_{n-2}\)的特征方程为\(x^2=A*x+B\) 于是此题的递推式就是:\(x^2=233x+666\),即:\(x^2-233x-666=0\) 用求根公式解得:\(x_1=\dfrac{233+\sqrt{56953}}{2}, x_2=\dfrac{233-\sqrt{56953}}{2}\) 由于\(188305837≡\sqrt{56953}(mod\ 1e9+7)\) 所以…
题面 题解 线性常系数齐次递推sb板子题 $a_n=233a_{n-1}+666a_{n-2}$的特征方程为 $$ x^2=233x+666 \\ x^2-233x+666=0 \\ x_1=\frac{233+\sqrt{56953}}2,x_2=\frac{233-\sqrt{56953}}2 \\ \therefore a_n=\alpha x_1^n+\beta x_2^n \\ \because a_0=0,a_1=1 \\ \therefore \begin{cases} \alph…
诸侯安置 这道题是一题递推题,一开始自己不知道,用了搜索,只过了三个样例: 两两相同的合并, 成 1,1,3,3,5,5........n*2-1; 然后我们会容易发现一种不同与搜索的动态规划做法. f[i,j]:=f[i,j]+f[k,j-1]*(Len[i]-(j-1)) [j-1<=k<=i-1] 1.f[i,j]表示前i列放置j个的方案,且第j个放在第i列上, 2.前面f[k,j-1]个都需要累加上来,举一个说明为什么需要累加:对于前4排放置2个的情况(平移后的),2个即可以放在第一列…
题目链接 掌握了分块打表法了.原来以前一直想错了... 块的大小\(size=\sqrt n\),每隔\(size\)个数打一个表,还要在\(0\text{~}size-1\)每个数打一个表. 然后就可以做到\(O(1)\)查询了. 比如要求\(A^{n}\),只需要算出\(biao[n/size]*pow[n\mod size]\)就好了. 然后我是看题解用了通项公式..事实上套个矩阵也没有影响. #include <cstdio> #include <cmath> #defin…
正题 题目链接:https://www.luogu.com.cn/problem/P5110 题目大意 数列\(a\)满足 \[a_n=233a_{n-1}+666a_{n-2},a_0=0,a_1=1 \] \(T\)组询问给出\(n\)求\(a_n\) \(1\leq T\leq 5\times 10^7\),\(n\)在\(\text{unsigned long long}\)范围内 解题思路 上面那个递推式的特征方程就是\(x^2-233x-666\),直接带式子解出来\(x_0=\fr…
洛谷 Codeforces 又是一道卡常题-- 思路 YNOI当然要分块啦. 分块之后怎么办? 零散块暴力,整块怎么办? 显然不能暴力改/查询所有的.考虑把相同值的用并查集连在一起,这样修改时就只需要枚举值了. 然而每次修改的\(x\)特别小时仍然复杂度爆炸,发现大于\(x\)的减去\(x\)等价于小于等于\(x\)的加上\(x\),然后整体减去\(x\). 那么,设一个块的最大值为\(mx\),则 \(2x\geq mx\)时枚举\(x<v\leq mx\),把\(v\)的并查集连到\(v-x…