P1939 【模板】矩阵加速(数列)
来源:互联网 发布:midaspro3离线编辑软件 编辑:程序博客网 时间:2024/06/05 22:05
传送门
根据题目的意思,还有瞎jb凑,凑出来这个矩阵
|f[n],f[n-1],f[n-2]|=|f[n-1],f[n-2],f[n-3]|*|1,0,1,|
|1,0,0|
|0,1,0|
还是老套路矩阵快速幂就可以AC辣
#include <cstdio>#include <iostream> #include <cstring>#define ll long long using namespace std;const int p=1e9+7;ll ans[2][4];ll x[4][4];ll dx[4][4];void init(){ memset(ans,0,sizeof(ans)); memset(x,0,sizeof(x)); ans[1][1]=1,ans[1][2]=1,ans[1][3]=1; x[1][1]=1,x[1][3]=1,x[2][1]=1,x[3][2]=1;}void ans_cf(){ for(int i=1;i<=3;i++) dx[1][i]=ans[1][i],ans[1][i]=0; for(int i=1;i<=1;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) ans[i][j]=(ans[i][j]+(dx[i][k]*x[k][j])%p)%p;}void x_cf(){ for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) dx[i][j]=x[i][j],x[i][j]=0; for(int i=1;i<=3;i++) for(int j=1;j<=3;j++) for(int k=1;k<=3;k++) x[i][j]=(x[i][j]+(dx[i][k]*dx[k][j])%p)%p;}void fast_pow(int k){ while(k) { if(k%2) ans_cf(); k/=2; x_cf(); }}int main(){ ll n; scanf("%lld",&n); while(n--) { init(); ll w; scanf("%lld",&w); if(w<=3) { printf("1\n"); continue; } fast_pow(w-3); printf("%lld\n",ans[1][1]%p); } return 0;}
阅读全文
1 0
- P1939 【模板】矩阵加速(数列)
- P1939 【模板】矩阵加速(数列)
- 洛谷 P1939 【模板】矩阵加速(数列):优化递推式的方法——矩阵快速幂
- 洛谷 1939 【模板】矩阵加速(数列)
- 矩阵幂加速 模板
- [模板]矩阵加速
- 斐波那契数列(数论+矩阵加速)
- 斐波拉契数列矩阵连乘(模板)
- *矩阵快速幂(斐波那契数列模板)
- [NOI2011]兔农(斐波那契数列+乘法逆+矩阵加速)
- hdu1757(矩阵加速)
- hdu1005(矩阵加速)
- 矩阵连乘求斐波那契数列模板
- 多校第十场 HDU 3936 FIB Query(fibonacci 数列的性质 ,及Ologn 矩阵加速乘算法)
- POJ 3744 Scout YYF I (概率DP初涉+矩阵快速幂加速)【模板】
- HDU5863(dp,矩阵加速)
- 求斐波那契数列的多种方法(有矩阵(附好模板))
- 斐波那契数列的第N项(矩阵快速幂模板)
- 手风琴相册制作的代码(不使用任何js)
- 中国有嘻哈:网易云、虾米音乐歌词爬虫项目分享
- ZOJ 1085 Alien Security(SPFA+dfs)
- A Bug's Life-----分类并查集
- 【Java进阶-Java动态代理与AOP】04 实现InvocationHandler的invoke方法
- P1939 【模板】矩阵加速(数列)
- MyBatis 入门开发
- 单片机中断详讲
- hdu 5532 Almost Sorted Array(LIS)
- HDU-1079 Calendar Game(找规律,博弈)
- Activity
- Struts2创建项目1
- uva 1608(分治 + 中途相遇法)
- E