51Nod 1341 混合序列(矩阵快速幂)
来源:互联网 发布:java加密软件 编辑:程序博客网 时间:2024/06/11 15:47
思路:把f(n)展开有
再写出n-1
我们让f(n-1)*q得到
发现与f(n)项相差了
得到递推公式我们就可以写出矩阵了
有
递推就是
#include <iostream>#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 3#define mod 1000000007using namespace std;typedef struct {long long m[MAX][MAX];}Matrix;Matrix P={0};Matrix I={1,0,0,0,1,0,0,0,1};Matrix Matrixmul(Matrix a,Matrix b){ int i,j,k; Matrix c; for(i=0;i<MAX;i++) for(j=0;j<MAX;j++) { c.m[i][j]=0; for(k=0;k<MAX;k++) { c.m[i][j]+=(a.m[i][k]*b.m[k][j])%mod; } c.m[i][j]%=mod; } return c;}Matrix quickpow(long long n){ Matrix m=P,b=I; while(n>0) { if(n%2==1) b=Matrixmul(b,m); n=n/2; m=Matrixmul(m,m); } return b;}int main(){ long long p,q,r,n; while(scanf("%lld%lld%lld%lld",&p,&q,&r,&n)!=EOF) { P.m[0][0]=q; P.m[0][1]=3*p; P.m[0][2]=3; P.m[1][1]=p; P.m[1][2]=1; P.m[2][2]=1; Matrix a; a=quickpow(n-1); printf("%lld\n",(a.m[0][0]*3*r%mod+(a.m[0][1]+a.m[0][2])*r%mod)%mod); } return 0;}
阅读全文
0 0
- 51Nod 1341 混合序列(矩阵快速幂)
- 51nod 1341 混合序列 (矩阵快速幂)
- 51NOD 1341 混合序列(构造矩阵)
- 51nod 1341 混合序列
- 51Nod-1341-混合序列
- 矩阵快速幂 51nod
- 51nod 1126 求递推序列的第N项 (矩阵快速幂)
- 51 nod 1126 求递推序列的第N项(矩阵快速幂)
- 51nod 1126 求递推序列的第N项(矩阵快速幂、循环)
- 51nod 1126 求递推序列的第N项(矩阵快速幂)
- 51nod 1126 求递推序列的第N项 矩阵快速幂
- 51 nod 1126 求递推序列的第N项 矩阵快速幂
- 51nod 求递推序列的第N项(矩阵快速幂、模拟求循环长度)
- 51nod 1126 求递推序列的第N项【矩阵快速幂】
- 51Nod 1126 求递推序列的第N项 矩阵快速幂
- 51nod 1126(矩阵快速幂)
- 51nod 1113矩阵快速幂
- 51nod - 1573 分解 - 矩阵快速幂
- SAP ABAP转换特殊字符乱码
- session原理及实现共享
- 同时监控数据中心电力及制冷数据
- Spring常用注解
- SQL必知必会(6)——分组数据
- 51Nod 1341 混合序列(矩阵快速幂)
- BZOJ3252: 攻略
- [Usaco2009 Jan]Best Spot 最佳牧场
- echarts X轴内容过长解决办法
- spring的嵌套事务控制
- 删除Linux下jdk以及修改默认jdk
- CodeForces
- 非常规孔(槽孔)出gerber知识小结
- 简单易懂的Md5加密