首页 > 其他分享 >Luogu P1939 【模板】矩阵加速(数列)

Luogu P1939 【模板】矩阵加速(数列)

时间:2023-06-10 09:00:10浏览次数:44  
标签:Matrix Luogu P1939 long leq ans include 模板 数列

【模板】矩阵加速(数列)

题目描述

已知一个数列 \(a\),它满足:

\[a_x= \begin{cases} 1 & x \in\{1,2,3\}\\ a_{x-1}+a_{x-3} & x \geq 4 \end{cases} \]

求 \(a\) 数列的第 \(n\) 项对 \(10^9+7\) 取余的值。

输入格式

第一行一个整数 \(T\),表示询问个数。

以下 \(T\) 行,每行一个正整数 \(n\)。

输出格式

每行输出一个非负整数表示答案。

样例 #1

样例输入 #1

3
6
8
10

样例输出 #1

4
9
19

提示

  • 对于 \(30\%\) 的数据 \(n \leq 100\);
  • 对于 \(60\%\) 的数据 \(n \leq2 \times 10^7\);
  • 对于 \(100\%\) 的数据 \(1 \leq T \leq 100\),\(1 \leq n \leq 2 \times 10^9\)。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
#include<cstring>

using namespace std;

long long n, m;

struct Matrix {
	long long matrix[521][13];
}base, ask;

Matrix operator*(const Matrix &a, const Matrix &b) {
	Matrix ans;
	for (long long i = 1; i <= 3; ++ i) {
		for (long long j = 1; j <= 3; ++ j) {
			ans.matrix[i][j] = 0;
		}
	}
	for (long long i = 1; i <= 3; ++ i) {
		for (long long j = 1; j <= 3; ++ j) {
			for (long long q = 1; q <= 3; ++ q) {
				ans.matrix[i][j] += a.matrix[i][q] * b.matrix[q][j];
				ans.matrix[i][j] %= m;
			}
		}
	}
	return ans;
}

Matrix MatrixQuickPower(Matrix a, long long k) {
	Matrix ans;
	Matrix temp = a;
	for (long long i = 1; i <= 3; ++ i) {
		for (long long j = 1; j <= 3; ++ j) {
			if (i == j) ans.matrix[i][j] = 1;
			else ans.matrix[i][j] = 0;
		}
	}
	while (k > 0) {
		if (k & 1 == 1) {
			ans = ans * temp;
		}
		temp = temp * temp; 
		k >>= 1;
	}
	return ans;
}

int main() {
	int t;
	cin >> t;
	while (t --) {
		cin >> n;
		m = 1000000000 + 7;
		if (n <= 3) {
			cout << 1 << endl;
			continue;
		}
		for (long long i = 1; i <= 3; i ++) {
			for (long long j = 1; j <= 3; ++ j) {
				base.matrix[i][j] = 0;
			}
		}
		base.matrix[1][1] = base.matrix[3][1] = base.matrix[1][2] = base.matrix[2][3] = 1;
		base = MatrixQuickPower(base, n - 3);
		cout << (base.matrix[1][1] + base.matrix[2][1] + base.matrix[3][1]) % m << endl;
	}
	
	return 0;
}

标签:Matrix,Luogu,P1939,long,leq,ans,include,模板,数列
From: https://www.cnblogs.com/jueqingfeng/p/17470750.html

相关文章

  • Luogu P3390 【模板】矩阵快速幂
    【模板】矩阵快速幂题目背景一个\(m\timesn\)的矩阵是一个由\(m\)行\(n\)列元素排列成的矩形阵列。即形如\[A=\begin{bmatrix}a_{11}&a_{12}&\cdots&a_{1n}\\a_{21}&a_{22}&\cdots&a_{2n}\\\vdots&\vdots&\ddots&......
  • Luogu B2105 矩阵乘法(模板)
    矩阵乘法题目描述计算两个矩阵的乘法。\(n\timesm\)阶的矩阵\(A\)乘以\(m\timesk\)阶的矩阵\(B\)得到的矩阵\(C\)是\(n\timesk\)阶的,且\(C[i][j]=A[i][0]\timesB[0][j]+A[i][1]\timesB[1][j]+\)……\(+A[i][m-1]\timesB[m-1][j](C[i][j]\)表示\(C\)......
  • MDT部署Windows系列 (十二): 进阶篇—制作完美的Win10 22H2系统镜像模板之移除Windows
    前言由于工作等原因(借口),距离发布上一篇MDT系列的文章已经过去一年::twemoji:sweat::上一章我记录了基于MDT如何使用一个Task即可实现制作Windows基础wim镜像+DIY基础软件+捕捉镜像。传送门有好多同学一直咨询在制作捕捉镜像的时候遇到的常见的2个问题:如何彻底的移除掉Windows10中......
  • golang实现设计模式之模板模式-优缺点,适用场景
    模板模式是一种行为型设计模式,其定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。特点1.算法结构已确定。2.具体实现交由子类实现。结构1.抽象类(AbstractClass)。算法步骤可以被声明为抽......
  • 【web 开发】生活中大家都喜欢搞模板来规范化操作,抽象类却玩不明白-PHP的抽象类
    前言生活中大家都喜欢定标准搞模板来规范化一系列流程,抽象类和接口却玩不明白,抽象类和接口相似,都是一种比较特殊的类,抽象类是一种特殊的类,而接口也是一种特殊的抽象类。他们通常配合面向对象的多态性一起使用。虽然声明和使用都比较容易,但他们的作用在理解上会稍微困难一点,接下来......
  • Treap 模板代码
    structNode{ intpri,data,num,sz,ch[2],fa;}t[maxn];intpos;structTreap{ introot; intnewNode(intx){ t[++pos]=(Node){rand(),x,1,1,0,0,0}; returnpos; } voidupdate(intx){ t[x].sz=t[t[x].ch[0]].sz+t[t[x].ch[1]].sz+......
  • Sgt 模板代码
    structSgt{ intlazyTag; intval;}t[maxn];voidpushUp(intx,intl,intr){ t[x].val=t[x].lazyTag*(r-l+1)+t[x*2].val+t[x*2+1].val;}voidpushDown(intx,intl,intr){ intmid=l+r>>1; t[x*2].lazyTag+=t[x].lazyTa......
  • mysql 8.0.26 my.cnf 配置文件模板
    ##############[mysqld]basedir=/home/work/mysql_3306datadir=/home/work/mysql_3306/datatmpdir=/home/work/mysql_3306/tmppid_file=/home/work/mysql_3306/tmp/mysqld.pidsocket=/home/work/mysql_3306/tmp/mysql.sockmysqlx_socket=/home/work/mysql......
  • Luogu P4219 [BJOI2014]大融合
    [BJOI2014]大融合题目描述小强要在\(N\)个孤立的星球上建立起一套通信系统。这套通信系统就是连接\(N\)个点的一个树。这个树的边是一条一条添加上去的。在某个时刻,一条边的负载就是它所在的当前能够联通的树上路过它的简单路径的数量。例如,在上图中,现在一共有了\(5\)......
  • 21份软件测试全流程文档模板(标准版)
    1、需求说明书2、功能测试计划3、功能测试用例4、业务流程测试用例5、系统安装配置说明书6、阶段功能测试报告7、性能测试计划8、性能测试用例9、性能测试报告10、系统功能测试报告11、需求变更说明书12、用户建议说明书13、验收测试报告14、产品发布说明书15、系统......