acdream 1060 递推数 (找循环节,矩阵乘法)
来源:互联网 发布:淘宝网平板电脑的架子 编辑:程序博客网 时间:2024/06/05 23:08
题意:
已知A(0) = 0 , A(1) = 1 , A(n) = 3 * A(n-1) + A(n-2) (n ≥ 2)
求 A(A(A(A(N)))) Mod (1e9 + 7)
题解:
因为任何数取摸到最后都会形成循环节,于是只要找到每层中循环节的大小,热按后用摸上循环节的结果作为标号不断迭代。找到循环节后,就是赤裸裸的矩阵乘法。
#include<stdio.h>#include<iostream>#include<math.h>#include<algorithm>#include<string.h>using namespace std;typedef long long ll;const ll MOD1 = 1000000007;const ll MOD2 = 222222224;const ll MOD3 = 183120;const ll MOD4 = 240;ll MOD;struct Marix{ll maze[2][2];Marix(){ memset(maze,0,sizeof maze); }};Marix mutil(const Marix &a,const Marix &b){ Marix c; for(int i=0;i<2;i++){ for(int j=0;j<2;j++){ for(int k=0;k<2;k++) c.maze[i][j]+=(a.maze[i][k]*b.maze[k][j])%MOD; c.maze[i][j]%=MOD; } } return c;}Marix marix_pow(Marix a,ll k){Marix res;res.maze[0][0]=res.maze[1][1]=1;while(k){if(k&1) res=mutil(a,res);a=mutil(a,a);k>>=1;}return res;}int main(){ //freopen("E:\\read.txt","r",stdin);int T;ll n;scanf("%d",&T);while(T--){scanf("%lld",&n);Marix ans,p;p.maze[0][0]=3;p.maze[0][1]=1;p.maze[1][0]=1;p.maze[1][1]=0;MOD=MOD4;ans=marix_pow(p,n);MOD=MOD3;ans=marix_pow(p,ans.maze[1][0]);MOD=MOD2;ans=marix_pow(p,ans.maze[1][0]);MOD=MOD1;ans=marix_pow(p,ans.maze[1][0]);cout<<ans.maze[1][0]<<endl;}return 0;}
0 0
- acdream 1060 递推数 (找循环节,矩阵乘法)
- ACdream 1060 递推数 (矩阵快速幂+找循环节)
- acdream 1060 递推数 (矩阵快速幂+循环节)
- ACdream 1213 Matrix Multiplication(矩阵乘法)
- Acdream 1214 Nice Patterns Strike Back (矩阵乘法 + 状态压缩)
- hdu 5084 HeHe (矩阵乘法 找规律)
- hdu5451 矩阵乘法+斐波那契 + 循环节
- hdu 4291 矩阵快速幂+找循环节
- 程序碎片- 矩阵乘法优化(dp,循环)
- 汇编—多重循环—矩阵乘法
- 三重循环矩阵乘法运行时间比较
- poj3150 && LA3704 Cellular Automaton 矩阵乘法 + 循环矩阵性质
- 【bzoj2510】弱题 概率dp+循环矩阵矩阵乘法
- BZOJ 2510 弱题 概率 矩阵乘法 循环矩阵
- poj_3150 Cellular Automaton(循环矩阵+矩阵乘法)
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- POJ_3150_矩阵快速幂+循环矩阵的乘法
- hdu 6198 dfs枚举找规律+矩阵乘法
- 分布式事务——【新生入学系统】
- PV操作——软考探究(五)
- Maven 依赖本地jar包
- IOS TableView&ScrollView
- 【Java TCP/IP Socket】TCP Socket(含代码)
- acdream 1060 递推数 (找循环节,矩阵乘法)
- js 下拉二级菜单
- ubuntu下映射服务器目录
- Ubuntu系统下使用windows软件及串口工具
- 大道至简,至易
- OC 静态库.a引用第三方框架冲突解决问题
- HDU 1009 FatMouse' Trade
- openCV 计算连通区域的形状描述符之距的概念和计算
- ubuntu下通过VMware安装windows 7