洛谷 [P1939] 矩阵加速数列】的更多相关文章

矩阵快速幂模版 #include <iostream> #include <cstring> #include <cstdlib> #include <algorithm> #include <cstdio> #include <cmath> #define ll long long using namespace std; const int MOD = (int) 1e9+7; struct Matrix { static con…
题意简述 \(a[1]=a[2]=a[3]=1\) \(a[x]=a[x−3]+a[x−1](x>3)\) 求a数列的第n项对1000000007取余的值. 题解思路 矩阵加速 设\[ F=\begin{bmatrix} 0&0&1\\1&0&0\\0&1&1\end{bmatrix}, G=\begin{bmatrix} 1\\1\\1\end{bmatrix}\] 则\[ \begin{bmatrix} a[n-3]\\a[n-2]\\a[n-1]…
P1939 [模板]矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. 输出格式: 每行输出一个非负整数表示答案. 说明 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,n<=2*10^9: 直接套矩阵快…
题目大意:给你一个数列a,规定$a[1]=a[2]=a[3]=1$,$a[i]=a[i-1]+a[i-3](i>3)$求$a[n]\ mod\ 10^9+7$的值. 解题思路:这题看似是很简单的递推,但是$n\leq 2×10^9$,递推肯定是会超时的.故我们需要优化. 常见优化有矩阵加速,还有什么我并不知道了. 用矩阵可将此类题目时间复杂度从$O(n)$优化为$O(\log_2 n)$. 具体对于此类形如$f(n)=f(n-1)*p(1)+f(n-2)*p(2)+...+f(n-k)*p(k)…
https://www.luogu.org/problemnew/show/P1939 矩阵快速幂 斐波那契数列 首先看一下斐波那契数列的矩阵快速幂求法: 有一个矩阵1*2的矩阵|f[n-2],f[n-1]|,要使它乘一个2*2的矩阵,使得到的矩阵为|f[n-1],f[n]|,即|f[n-1],f[n-2]+f[n-1]| 则该矩阵为 0  1 1  1 第一行第一列:f[n-2]*0+f[n-1]*1=f[n-1] 第一行第二列:f[n-2]*1+f[n-1]*1=f[n] 同理,对于本题:…
题目链接 2017.12.24 第一次写: 时间: 2316ms (1268ms) 空间: 19.42MB (19.5MB)(O2) 注:洛谷测的时间浮动比较大 /* 插入一段数:将这些数先单独建一棵平衡树t'.将pos旋到根,pos+1旋到son[root][1],直接将t'放到son[pos+1][0]即可 删除一段数:将要删除区间旋转到r+1的左儿子上,直接删除 统一修改一段数.区间反转:同样,提取修改区间,打标记 区间求和:提取,输出记录的sum 最大子序列:有一种求最大子序列的nlog…
题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值. 输入输出格式 输入格式: 第一行一个整数T,表示询问个数. 以下T行,每行一个正整数n. 输出格式: 每行输出一个非负整数表示答案. 输入输出样例 输入样例#1: 3 6 8 10 输出样例#1: 4 9 19 说明 对于30%的数据 n<=100: 对于60%的数据 n<=2*10^7: 对于100%的数据 T<=100,…
思路: 这个 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 可以想成: [a(n) ] [1 0 1] [a(n-1)   ] [a(n-1) ] =   [1 0 0] * [a(n-2)  ] [a(n-2) ]  [0 1 0] [a(n-3)   ] 然后就是利用矩阵快速幂去算中间那个矩阵的n次结果 #include <iostream> #include <cstdio> #include <cstring> usi…
P1473 零的数列 Zero Sum 134通过 170提交 题目提供者该用户不存在 标签USACO 难度普及/提高- 提交  讨论  题解 最新讨论 路过的一定帮我看错了我死了- 题目描述 请考虑一个由1到N(N=3, 4, 5 ... 9)的数字组成的递增数列:1 2 3 ... N. 现在请在数列中插入"+"表示加,或者"-"表示减," "表示空白(例如1-2 3就等于1-23),来将每一对数字组合在一起(请不要在第一个数字前插入符号).…
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n*m的矩阵,矩阵中的每个元素aij均为非负整数.游戏规则如下: 1.每次取数时须从每行各取走一个元素,共n个.m次后取完矩阵所有元素: 2.每次取走的各个元素只能是该元素所在行的行首或行尾: 3.每次取数都有一个得分值,为每行取数的得分之和,每行取数的得分 = 被取走的元素值*2^i,其中i表示第i次取数(从1开始编号): 4.游戏结束总得分为m次取数得分之和. 帅帅想请你帮忙写一个程序,对于任意矩阵,可以求出取数后的最大得分. 输入输…