博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4686 Arc of Dream 矩阵快速幂
阅读量:5966 次
发布时间:2019-06-19

本文共 1411 字,大约阅读时间需要 4 分钟。

输入的数据会大于mod,当n=0时输出0.

ContractedBlock.gif
ExpandedBlockStart.gif
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long ll;const ll mod = 1000000007;struct Matrix{ ll da[5][5]; Matrix (){memset(da,0,sizeof(da));} Matrix operator *(const Matrix &a) { Matrix res; for(int i=0;i<5;i++) { for(int j=0;j<5;j++) { res.da[i][j]=0; for(int k=0;k<5;k++) res.da[i][j]=(res.da[i][j]+da[i][k]*a.da[k][j])%mod; } } return res; }}base,I;Matrix f(ll n){ if(n==0)return I; if(n%2==0) { Matrix res=f(n/2); return res*res; }else { Matrix res=f(n/2); return res*res*base; }}ll n,AX,AY,BX,BY,A0,B0;int main(){ while(scanf("%I64d",&n)!=EOF) { scanf("%I64d%I64d%I64d%I64d%I64d%I64d",&A0,&AX,&AY,&B0,&BX,&BY); if(n==0){printf("0\n");continue;} base.da[0][0]=AX*BX%mod; base.da[0][1]=AX*BY%mod; base.da[0][2]=BX*AY%mod; base.da[0][3]=AY*BY%mod; base.da[0][4]=A0*B0%mod; base.da[1][1]=AX%mod; base.da[1][3]=AY%mod; base.da[1][4]=A0%mod; base.da[2][2]=BX%mod; base.da[2][3]=BY%mod; base.da[2][4]=B0%mod; base.da[3][3]=base.da[4][4]=base.da[3][4]=1; for(int i=0;i<5;i++) I.da[i][i]=1; Matrix res=f(n-1); printf("%I64d\n",((((res.da[0][0]*A0)%mod)*B0)%mod+res.da[0][1]*A0+res.da[0][2]*B0+res.da[0][3]+res.da[0][4])%mod); } return 0;}
View Code

转载于:https://www.cnblogs.com/BMan/p/3380441.html

你可能感兴趣的文章
设计模式之策略模式
查看>>
JVM介绍
查看>>
Qt中使用QToolBox实现抽屉效果
查看>>
双活数据中心建设之光大实践
查看>>
张军-大数据的理解与分布式进化计算方法
查看>>
dubbo remoting(2)
查看>>
maya pyside 多个窗口实例 报错 解决
查看>>
关于文件上传请求第一次为post,后面为get的问题
查看>>
【Qt笔记】QDialog--模态和非模态
查看>>
nginx 0.8.54/1.0.0 在cygwin环境下的编译(包括 nginx_mod_h264
查看>>
PowerDesigner生成Excel版本的数据库文件
查看>>
Oracle 查找常见耗性能的语句
查看>>
thinkphp 开启页面的Trace信息
查看>>
mysql 链接数满了的错误 ERROR 1040 (HY000): Too many connections
查看>>
android textview字体加下划线
查看>>
springMVC 定时任务
查看>>
Mint8(ubuntu16.04) 搭建微信Web开发工具
查看>>
PostgreSQL数据类型-数据类型简介和布尔类型
查看>>
PostgreSQL数据类型-二进制数据和字符串数据类型与字符串函数
查看>>
shell 基础
查看>>