洛谷 P1939 【模板】矩阵加速(数列) 解题报告
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;

直接套矩阵快速幂即可
Code:
#include <cstdio>
#include <cstring>
#define ll long long
const ll mod=1e9+7;
int n,t;
struct matrix
{
    ll dx[4][4];
    matrix()
    {
        memset(dx,0,sizeof(dx));
    }
    matrix friend operator *(matrix n1,matrix n2)
    {
        matrix n3;
        for(int i=1;i<=3;i++)
            for(int j=1;j<=3;j++)
                for(int k=1;k<=3;k++)
                    n3.dx[i][j]=(n3.dx[i][j]+n1.dx[i][k]*n2.dx[k][j])%mod;
        return n3;
    }
}f,d,ans;
void quick(int k)
{
    while(k)
    {
        if(k&1)
            f=f*d;
        d=d*d;
        k>>=1;
    }
}
void init()
{
    ans.dx[1][1]=1,ans.dx[1][2]=1,ans.dx[1][3]=1;
    ans.dx[2][1]=0,ans.dx[2][2]=0,ans.dx[2][3]=0;
    ans.dx[3][1]=0,ans.dx[3][2]=0,ans.dx[3][3]=0;
    f.dx[1][1]=1,f.dx[1][2]=0,f.dx[1][3]=0;
    f.dx[2][1]=0,f.dx[2][2]=1,f.dx[2][3]=0;
    f.dx[3][1]=0,f.dx[3][2]=0,f.dx[3][3]=1;
    d.dx[1][1]=1,d.dx[1][2]=1,d.dx[1][3]=0;
    d.dx[2][1]=0,d.dx[2][2]=0,d.dx[2][3]=1;
    d.dx[3][1]=1,d.dx[3][2]=0,d.dx[3][3]=0;
}
void work()
{
    scanf("%d",&t);
    while(t--)
    {
        init();
        scanf("%d",&n);
        if(n>3)
        {
            quick(n-3);
            ans=ans*f;
            printf("%d\n",ans.dx[1][1]);
        }
        else
            printf("1\n");
    }
}
int main()
{
    work();
    return 0;
}
2017.7.2
洛谷 P1939 【模板】矩阵加速(数列) 解题报告的更多相关文章
- 【洛谷P1939】 矩阵加速模板
		https://www.luogu.org/problemnew/show/P1939 矩阵快速幂 斐波那契数列 首先看一下斐波那契数列的矩阵快速幂求法: 有一个矩阵1*2的矩阵|f[n-2],f[n ... 
- 洛谷 P2323 [HNOI2006]公路修建问题 解题报告
		P2323 [HNOI2006]公路修建问题 题目描述 输入输出格式 输入格式: 在实际评测时,将只会有m-1行公路 输出格式: 思路: 二分答案 然后把每条能加的大边都加上,然后加小边 但在洛谷的题 ... 
- 洛谷 P1852 [国家集训队]跳跳棋 解题报告
		P1852 [国家集训队]跳跳棋 题目描述 跳跳棋是在一条数轴上进行的.棋子只能摆在整点上.每个点不能摆超过一个棋子. 我们用跳跳棋来做一个简单的游戏:棋盘上有3颗棋子,分别在\(a\),\(b\), ... 
- 洛谷 P2149 [SDOI2009]Elaxia的路线 解题报告
		P2149 [SDOI2009]Elaxia的路线 题目描述 最近,Elaxia和w**的关系特别好,他们很想整天在一起,但是大学的学习太紧张了,他们 必须合理地安排两个人在一起的时间. Elaxia ... 
- 洛谷 P1377 [TJOI2011]树的序 解题报告
		P1377 [TJOI2011]树的序 题目描述 众所周知,二叉查找树的形态和键值的插入顺序密切相关.准确的讲:1.空树中加入一个键值\(k\),则变为只有一个结点的二叉查找树,此结点的键值即为\(k ... 
- 洛谷 P3299 [SDOI2013]保护出题人 解题报告
		P3299 [SDOI2013]保护出题人 题目描述 出题人铭铭认为给SDOI2012出题太可怕了,因为总要被骂,于是他又给SDOI2013出题了. 参加SDOI2012的小朋友们释放出大量的僵尸,企 ... 
- 洛谷 P2059 [JLOI2013]卡牌游戏 解题报告
		P2059 [JLOI2013]卡牌游戏 题意 有\(n\)个人玩约瑟夫游戏,有\(m\)张卡,每张卡上有一个正整数,每次庄家有放回的抽一张卡,干掉从庄家起顺时针的第\(k\)个人(计算庄家),干掉的 ... 
- 洛谷 P2463 [SDOI2008]Sandy的卡片 解题报告
		P2463 [SDOI2008]Sandy的卡片 题意 给\(n(\le 1000)\)串,定义两个串相等为"长度相同,且一个串每个数加某个数与另一个串完全相同",求所有串的最长公 ... 
- 洛谷 P2774 方格取数问题 解题报告
		P2774 方格取数问题 题目背景 none! 题目描述 在一个有 \(m*n\) 个方格的棋盘中,每个方格中有一个正整数.现要从方格中取数,使任意 2 个数所在方格没有公共边,且取出的数的总和最大. ... 
- 洛谷 画栅栏Painting the Fence 解题报告
		P2205 画栅栏Painting the Fence 题目描述 \(Farmer\) \(John\) 想出了一个给牛棚旁的长围墙涂色的好方法.(为了简单起见,我们把围墙看做一维的数轴,每一个单位长 ... 
随机推荐
- jQuery的基本使用
			一.jQuery简介 jQuery是一个快速.简洁的JavaScript框架,它封装了JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优化HTML文档操作.事件处理.动 ... 
- 将eclipse上的web项目部署到Tomcat服务器上经验总结
			1. 将Tomcat插件添加到eclipse上 Window --> Preferences --> Server --> Runtime Environment --> A ... 
- MathExam6317
			自己取一个大气又可爱的标题 小学二年级的还没来得及写,大部分时间还是花在巩固和查阅新旧知识上了,通过看学习视频,查资料,看博客园的博客...下次完善好了交上. 一.预估与实际 PSP2.1 Perso ... 
- C++:内存分区
			前言:最近正在学习有关static的知识,发觉对C++的内存分区不是很了解,上网查了很多资料,遂将这几天的学习笔记进行了简单整理,发表在这里 • 栈区(stack):主要用来存放函数的参数以及局部变量 ... 
- 【每日scrum】第一次冲刺day1
			冲刺第一天,明确了自己的任务,数据分析与数据字典. 
- 冲刺One之站立会议7     /2015-5-20
			2015-5-20 在登陆成功之后要实现的是聊天界面的交互过程,不同的IP进行信息和数据的传递,这方面我们上学期Java实验里面有过相关的内容,我们把它拿过来改了一下格式,试着看能不能成功,目前还没实 ... 
- Hibernate left join
			6.4.5 左外连接 左外连接(Left Outer Join)查询出左表对应的复合条件的所有记录,如查询李晓梅同学的选课信息.下面是类HQLLeftOuterJoinQuery的源代码. 其实关联 ... 
- Journal entry of the thirteenth chapter to chapter seventeenth(第十三章和十七章阅读与疑问)
			第十三章: 软件测试的意义在于: a. 发现软件错误: b. 有效定义和实现软件成分由低层到高层的组装过程: c. 验证软件是否满足任务书和系统定义文档所规定的技术要求: d. ... 
- Week 2
			第1章:概论1.原文“这些软件企业的商业模式有些事合情合理也合法:有些看似合情合理,但不怎么合法:有些做法不合 理,但是还没有出台相关的法律.在相关法律完善之前,软件行业还有一个行规,即应该有职业道德 ... 
- iOS完整学习路线图-对知识的回顾/整理
			第一阶段:语言基础 Mac系统使用.常用UNIX指令.C语言.Objective-C语言.Foundation框架. 第二阶段:iOS基础 AppDelegate & UIApplicatio ... 
