洛谷P1939 矩阵快速幂模板

洛谷 P1939 【模板】矩阵加速(数列):优化递推式的方法——矩阵快速幂 在大多数情况下,O(n)的效率都是值得骄傲的,然而,有时候并不是,比如如何在一秒钟内算出一个递推式的第1e9项,很明显O(n)不行了。 然而常数级又不太现实,除非你的数学非常好,这题又比较简单,你推了一个特征方程的通项公式…… 所以考虑log的做法:矩阵快速幂 如果你还不知道矩阵快速幂是什么,请走这边:传送门 对于这道题,嗯,模板嘛,已经告诉你了式子,就只需要考虑矩阵了,对于整个过程,我们 阅读详情

矩阵快速幂解线性递推式:

an=an−1+an−3 a_{n}=a_{n-1}+a_{n-3} an​=an−1​+an−3​

Solution:

一般构造矩阵的时候都构造一个连续的矩阵,且这个矩阵元素下标都+1+1+1后两个矩阵恰好覆盖了递推式所涉及的所有项,设递推式跨越的下标长度为lenlenlen,这个长度一般是len−1len-1len−1,譬如当前构造矩阵
[an,an−1,an−2] [a_{n},a_{n-1},a_{n-2}] [an​,an−1​,an−2​]
我们需要构造出一个矩阵,使得这个上式矩阵乘构造矩阵后得到
[an+1,an,an−1] [a_{n+1},a_{n},a_{n-1}] [an+1​,an​,an−1​]

矩阵乘法:

对于两个矩阵a,ba,ba,b相乘,结果矩阵的iii行jjj列为
∑k=1nai,kbk,j \sum_{k=1}^{n}a_{i,k}b_{k,j} k=1∑n​ai,k​bk,j​
即aaa的iii行与bbb的jjj列的所有元素对应相乘相加

单位矩阵:

是主对角线元素为111,其余元素为000的矩阵,即满足下式的矩阵
ai,j={0i≠j1i=j a_{i,j}=\begin{cases} 0 & i\neq j\\ 1 & i=j \end{cases} ai,j​={01​i​=ji=j​

根据矩阵乘法的规则构造矩阵为
[110001100] \left[ \begin{matrix} 1 & 1 & 0\\ 0 & 0 & 1\\ 1 & 0 & 0 \end{matrix} \right] ⎣⎡​101​100​010​⎦⎤​
对此矩阵快速幂即可

需要注意的是,单位矩阵是主对角线元素为111的矩阵,其他元素为000;而不是都是111的矩阵

// #include<bits/stdc++.h>
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
#include<vector>
#include<bitset>
#include<map>
using namespace std;

using ll=long long;
const int N=1e6+5,inf=0x3fffffff;
const long long INF=0x3fffffffffffffff,mod=1e9+7;

struct matrix
{
    ll a[3][3];
    void initial(){memset(a,0,sizeof(a));}
    void build()
    {
        initial();
        for(int i=0;i<3;i++) a[i][i]=1;
    }
    ll* operator[](int i) const {
        return (ll*)&a[i][0];
    }
    matrix operator*(const matrix& x) const
    {
        matrix ret; ret.initial();
        for(int i=0;i<3;i++)
            for(int j=0;j<3;j++)
                for(int k=0;k<3;k++) ret[i][j]=(ret[i][j]+a[i][k]*x[k][j]%mod)%mod;
        return ret;
    }
};

matrix qpow(matrix a,ll b)
{
    matrix ret,base=a; ret.build();
    while(b)
    {
        if(b&1) ret=ret*base;
        base=base*base;
        b>>=1;
    }
    return ret;
}

int main()
{
    matrix tmp={{
        {1,1,0},
        {0,0,1},
        {1,0,0}
    }},ans={{
        {1,1,1},
        {0,0,0},
        {0,0,0}
    }};
    int t; cin>>t;
    while(t--)
    {
        ll n; cin>>n;
        if(n<=3) cout<<1<<'\n';
        else cout<<(ans*qpow(tmp,n-3)).a[0][0]<<'\n';
    }
    return 0;  
}
Word2vec核心模型精讲:CBOW与Skip-gram Word2vec是Google提出的词向量模型,通过CBOW和Skip-gram两种神经网络架构将词汇映射到低维向量空间。CBOW通过上下文预测中心词,训练速度快但高频词表现更好;Skip-gram则相反,通过中心词预测上下文,适合处理生僻词。为解决softmax计算效率问题,Word2vec引入基于哈夫曼树的Hierarchical Softmax优化技术,将复杂度从O(V)降至O(logV)。文章详细解析了两种模型的原理差异,并演示了哈夫曼树的构造过程及其在词向量训练中的关键作用,这种结合词频的优 阅读详情

相关推荐

Cisco Packet Tracer 9.0 工业网络模拟:3步配置OT协议与Purdue模型实战

本文详细介绍了如何使用Cisco Packet Tracer 9.0进行工业网络模拟,包括Purdue模型构建、三大OT协议(Modbus TCP/IP、CIP、PROFINET IO)配置及工业网络安全防护。通过实战演练,读者可掌握工业网络设计、配置与安全防护的核心技能,适用于智能制造和能源管理等场景。

weixin_28691741的博客 351

洛谷 - P1939[模板]矩阵加速(数列)(矩阵快速幂)

题目链接:https://www.luogu.org/problemnew/show/P1939时空限制1000ms / 128MB 题目描述 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。 输出格式 ...

ityanger的技术栈 3233

vsomeip3 双机通信文件配置

验证环境 vsomeip地址Android运行命令,红色的地方需要和配置文件一样Linux运行命令,红色的地方需要和配置文件一样Linux service配置文件 ,红色的地方需要更改Android client配置文件,红色的地方需要更改,蓝色的地方可不要 ...

m0_37132481的博客 5222

洛谷p1939矩阵加速(数列)(矩阵快速幂模板题)

洛谷P1939(矩阵快速幂模板题) 题目链接 题目描述 已知一个数列 aa,它满足: 求 a数列的第 n 项对 109+7 取余的值。 思路: 数据范围很大,直接递推肯定TLE,由递推想到矩阵快速幂,解题的关键在于得到目标矩阵和构造初始矩阵。一定要注意矩阵的左乘和和右乘! code #include <algorithm> #include <cmath> #include <cstdio> #include <cstring> #include <i

qq_46667619的博客 332

STM32 FDCAN热插拔恢复机制与自动重发功能优化

本文深入分析了STM32 FDCAN在热插拔场景下触发bus-off状态导致通讯中断的根本原因,指出自动重发功能是问题关键。通过禁用自动重发、配置硬件自动恢复机制及优化总线参数,实现了FDCAN热插拔后的100%稳定恢复,为工业应用提供了可靠的CAN总线解决方案。

ice55的博客 685

实战指南!基于STM32的智能环境监测系统(代码+硬件设计+云端控制)

本文详细介绍了基于STM32的智能环境监测系统的设计与实现,包括硬件选型、电路设计、软件架构和云端控制。系统通过DHT11温湿度传感器和MQ-2烟雾传感器实时监测环境数据,STM32F103C8T6主控芯片处理数据并通过ESP8266上传至中国移动物联网平台,支持手机APP远程监控。项目成本低、稳定性高,适合智能家居和环境监测应用。

weixin_29194817的博客 433

洛谷 P1939 【模板】矩阵加速(数列)——————矩阵快速幂(水题)

P1939 【模板】矩阵加速(数列) 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x&gt;3) 求a数列的第n项对1000000007(10^9+7)取余的值。 输入输出格式 输入格式: 第一行一个整数T,表示询问个数。 以下T行,每行一个正整数n。 输出格式: 每行输出一个非负整数表示答案。 输入输出样例 输入样例#1: 3 6 8 10 输出样例#1:...

鸿杰 的博客 344

FFT去除频率分量的完整流程与数学分析

重叠与窗口:确保块间无缝过渡,避免幅度跳变;实时缓冲:处理速度需快于数据输入速度,避免断流;DAC的平滑角色:通过数模转换和滤波,将离散样点还原为连续波形。通过这种分段处理+重叠拼接的方法,即使FFT本身处理的是离散数据块,最终DAC输出仍能保持信号的时间连续性。以下是完整的数学分析过程和代码逻辑,演示如何通过FFT去除特定频率成分,并通过去窗技术恢复信号。信号加窗。

林愿留的博客 1607

数字孪生驱动的城市地下管网智能运维与应急处置决策支持系统

上海市城市数字化中心的数据实践显示,通过关联分析管网材质与故障率的关系,将铸铁管更换周期从15年优化至8年(李敏,2021)。环境效益方面,上海市通过优化管网运行参数,年减少碳排放1.8万吨,相当于种植36万棵乔木。数字孪生与物理设备的双向交互采用OPC UA协议实现,某次天津管网渗漏事件中,系统通过实时数据反馈,指导现场人员调整注浆方案,将修复时间从48小时压缩至16小时。虚拟指挥沙盘支持多视角协同,深圳水务系统的实践表明,通过AR可视化技术,跨部门会议效率提升60%,方案决策时间缩短40%。

2501_92431686的博客 1424

美团mtgsig 3.1.0算法还原:从加密入口到d1生成的完整链路拆解

本文详细拆解了美团mtgsig 3.1.0签名算法的完整逆向过程。通过定位加密入口函数eH,理清a6、a5、a8到d1的生成依赖链,并运用插桩技术,在JSVMP混淆环境下逐步还原了核心参数的生成逻辑,为逆向工程实践提供了清晰的纯算还原方法论。

oo7890的博客 776

矩阵优化dp

链接:https://www.luogu.org/problemnew/show/P1939 题解: 矩阵优化dp模板题 搞清楚矩阵是怎么乘的构造一下矩阵就很简单了 代码: #include <bits/stdc++.h> using namespace std; #define ll long long #define mo 1000000007 ll t,x;...

weixin_30271335的博客 107

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

快速幂和矩阵快速幂详解+模板

1.快速幂 一般的,我们都知道求只需要连续乘3次2就能得到,那么等于多少呢?其实这个一很简单,不就是13个2相乘吗,连续乘13次2就行了。那么,呢? 是不是要连续乘100次、1000次,我们将这类问题归结为求。那么当b很大的时候,是很浪费时间的,往往会造成超时,那有没有更快的计算方法呢?当然了,接下来就是这篇文章的重点:快速幂。 我们以b=13为例,将b表示为二进制:那么:那么我们观察只要b的...

ityanger的技术栈 1万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

洛谷p1939矩阵加速(矩阵快速幂)

洛谷p1939矩阵加速 链接:https://www.luogu.org/problemnew/show/P1939 题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x&gt;3) 求a数列的第n项对1000000007(10^9+7)取余的值。 输入输出格式 输入格式: 第一行一个整数T,表示询问个数。 以下T行,每行一个正整数n。 输出格式: 每行输出一个非...

八百标兵奔北坡的博客 424

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

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

洛谷 P1939 【模板】矩阵加速(数列) Description a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x>3) 求a数列的第n项对1000000007(10^9+7)取余的值。 Input 第一行一个整数T,表示询问个数。 以下T行,每行一个正整数n。 Output 每行输出一个非负整数表示答案。 Sample Input 3 ...

aochongbi5356的博客 181

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

https://www.luogu.com.cn/problem/P1939 题目描述 已知一个数列 aaa,它满足: ax={1x∈{1,2,3}ax−1+ax−3x≥4a_x= \begin{cases} 1 & x \in\{1,2,3\}\\ a_{x-1}+a_{x-3} & x \geq 4 \end{cases} ax​={1ax−1​+ax−3​​x∈{1,2,3}x≥4​ 求 aaa 数列的第 nnn 项对 109+710^9+7109+7 取余的值。 输入格式

Drogal_dracarys的博客 298

【luogu P1939 【模板】矩阵加速(数列)】 题解

题目链接:https://www.luogu.org/problemnew/show/P1939 对于矩阵推序列的式子: 由题意知: f[x+1] =1f[x] + 0f[x-1] + 1f[x-2] f[x] = 1f[x] + 0f[x-1] + 0f[x-2] f[x-1] = 0f[x] + 1f[x-1] + 0*f[x-2] 所以矩阵初项的系数: 1 1 0 0 0 1 1 ...

210

洛谷(p1939 矩阵快速幂)

题目描述 a[1]=a[2]=a[3]=1 a[x]=a[x-3]+a[x-1] (x&gt;3) 求a数列的第n项对1000000007(10^9+7)取余的值。 输入输出格式 输入格式: 第一行一个整数T,表示询问个数。 以下T行,每行一个正整数n。 输出格式: 每行输出一个非负整数表示答案。 输入输出样例 输入样例#1:复制 3 6 8 1...

ccsu_deer 632

我的算法不可能这么简单—矩阵快速幂|取模

文章目录学前准备矩阵乘法矩阵快速幂例题洛谷P1962 [斐波那契数列](https://www.luogu.com.cn/problem/P1962)洛谷P1939 [【模板】矩阵加速(数列)](https://www.luogu.com.cn/problem/P1939)洛谷P1306 [斐波那契公约数](https://www.luogu.com.cn/problem/P1306) 学前准备 学习本算法前,请务必确保已经掌握 快速幂 | 快速幂取模 内容! 请先AC本题:洛谷P1226 【模板】快速幂

终曲 2688

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

矩阵加速的板子题

bcr_233的博客 466

[洛谷P1939]【模板】矩阵加速(数列)

题目大意:给你一个数列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...

188

【洛谷P1939】[模板]矩阵加速(数列)【矩阵乘法】

题目描述 linklinklink 已知一个数列 a,它满足: ax=1(x<=1,2,3)a_x=1(x<=1,2,3)ax​=1(x<=1,2,3) ax=ax−1+ax−3(x>=4)a_x=a_{x-1}+a_{x-3}(x>=4)ax​=ax−1​+ax−3​(x>=4) 求 aaa 数列的第 nnn 项对109+710^9+7109+7取余的值。 输入格式 第一行一个整数 TTT,表示询问个数。 以下 TTT 行,每行一个正整数 nnn。 输出格式 每行输出一

绫 340

线性代数——矩阵快速幂的应用

矩阵运算,矩阵乘法,矩阵快速幂和矩阵加速

m0_73693552的博客 866
上一篇: 牛客练习赛#84 F 莫比乌斯反演+杜教筛+技巧+斐波那契数列和gcd的结论+矩阵快速幂
下一篇: 洛谷P4549 裴蜀定理模板
stdforces
博客等级 码龄4年 9粉丝 136原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值