nefu 457(矩阵连乘)
来源:互联网 发布:mysql 存储过程 函数 编辑:程序博客网 时间:2024/04/30 08:18
题目链接:http://acm.nefu.edu.cn/JudgeOnline/problemshow.php?problem_id=457
这类题目一般都有如下提示 n比较大 结果需要取模
解这类题目的思路就是找到转移方程 然后根据转移方程找到转移矩阵 然后套模板求解。
代码如下:
#include <iostream>#include <cstdio>using namespace std;typedef long long ll;const int mod = 1e7;struct matrix{ ll m[3][3];};matrix A;matrix I={ 1,0,0, 0,1,0, 0,0,1};matrix multi(matrix a,matrix b){ matrix c; for(int i=0;i<3;i++) for(int j=0;j<3;j++){ c.m[i][j]=0; for(int k=0;k<3;k++){ c.m[i][j]+=a.m[i][k]*b.m[k][j]%mod; } c.m[i][j]%=mod; } return c;}matrix power(matrix A,ll k){ matrix ans=I,p=A; while(k){ if(k&1){ ans=multi(ans,p); k--; } k>>=1; p=multi(p,p); } return ans;}int main(){ int t,a,b,p,q,s,e; scanf("%d",&t); while(t--){ scanf("%d%d%d%d%d%d",&a,&b,&p,&q,&s,&e); A.m[0][0]=1;A.m[0][1]=p;A.m[0][2]=q; A.m[1][0]=0;A.m[1][1]=p;A.m[1][2]=q; A.m[2][0]=0;A.m[2][1]=1;A.m[2][2]=0; s--; int s1,s2; if(s<0) s1=0; else if(s==0) s1=a; else{ matrix ans=power(A,s-1); s1=(ans.m[0][0]%mod*(a+b)%mod+ans.m[0][1]%mod*b%mod+ans.m[0][2]%mod*a%mod)%mod; } if(e==0) s2=a; else{ matrix ans=power(A,e-1); s2=(ans.m[0][0]%mod*(a+b)%mod+ans.m[0][1]%mod*b%mod+ans.m[0][2]%mod*a%mod)%mod; } ll l=((s2-s1)%mod+mod)%mod; cout<<l<<endl; } return 0;}
0 0
- NEFU 457 矩阵连乘
- nefu 457(矩阵连乘)
- NEFU 458 矩阵连乘
- nefu 459 矩阵连乘
- nefu Not Fibonacci 457 (矩阵连乘)
- nefu Another kind of Fibonacci 458 (矩阵连乘)
- nefu A Simple Math Problem 459 (矩阵连乘)
- 矩阵连乘
- Strassen矩阵连乘
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘
- 矩阵连乘
- 矩阵连乘
- 矩阵连乘
- 矩阵连乘问题
- 矩阵连乘问题
- 矩阵连乘问题
- JAVA的Date类与Calendar类【转】
- VC 打开批处理文件 可以看到dos窗口,但是执行后没有效果
- Android菜鸟的成长笔记(28)——Google官方对Andoird 2.x提供的ActionBar支持
- kernel learn
- 栈的简易应用,愚人节的礼物
- nefu 457(矩阵连乘)
- 实用级反主动防御rootkit设计思路
- LPC1768时钟配置
- android gridview setOnItemClickListener没有响应
- Android使用Zxing扫描二维码过程解决三星note1竖屏后花屏问题
- mysql 存储过程 模拟 php的explode 函数
- struts2表单验证里field-validator type值一共可以取哪些?都什么含义?
- Calendar和Date的常见用法
- break的fall through