博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 1575 Tr A(矩阵快速幂)
阅读量:6882 次
发布时间:2019-06-27

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

  今天做的第二道矩阵快速幂题,因为是初次接触,各种奇葩错误整整调试了一下午。废话不说,入正题。该题应该属于矩阵快速幂的裸题了吧,知道快速幂原理(二进制迭代法,非递归版)后,剩下的只是处理矩阵乘法的功夫了,我直接用个结构体来表示矩阵,确实能省去不少功夫(这里一定要注意用单位矩阵来初次相乘,但不要把它放进构造函数中,我就是在这里卡了好久哭)。下面附上代码:

1 #include
2 #include
3 const int Mod= 9973; 4 5 struct matrix{ 6 int a[12][12], n; 7 matrix(int _n){ 8 n =_n; 9 memset(a,0,sizeof(a));10 }11 void identity(){12 for(int i=1; i<=n; ++i) //单位矩阵的初始化,切记! 13 a[i][i]= 1; //如果没有这个的话就不能直接相乘了14 }15 matrix operator *(const matrix m2){16 matrix mul(this->n);17 for(int i=1; i<=n; ++i)18 for(int j=1; j<=n; ++j)19 for(int k=1; k<=n; ++k)20 mul.a[i][j]= (mul.a[i][j]+ this->a[i][k]*m2.a[k][j]%Mod)% Mod;21 return mul;22 }23 };24 25 matrix quick_mod(matrix &m, int p)26 {27 matrix ans(m.n);28 ans.identity(); // ans一定要为单位矩阵的! 29 while(p){30 if(p&1) ans= ans*m;31 m= m*m;32 p>>=1;33 }34 return ans;35 }36 37 int main()38 {39 int t,n,k,i,j;40 scanf("%d",&t);41 while(t--){42 scanf("%d%d",&n,&k);43 matrix m(n);44 for(i=1; i<=n; ++i)45 for(j=1; j<=n; ++j)46 scanf("%d",&m.a[i][j]);47 matrix ans(n);48 ans= quick_mod(m,k);49 int sum= 0; 50 for(i=1; i<=n; ++i)51 sum= (sum+ ans.a[i][i])%Mod;52 printf("%d\n",sum);53 }54 return 0;55 }

 

转载于:https://www.cnblogs.com/Newdawn/p/4033247.html

你可能感兴趣的文章
thinkCMF----列表页跳转
查看>>
VIM编辑器和VI编辑器的区别
查看>>
Python 学习笔记 - 线程(线程锁,信标,事件和条件)
查看>>
Remote Desktop Organizer – 管理组织远程桌面 - 小众软件
查看>>
把图片保存到数据库里
查看>>
【CUDA学习】全局存储器
查看>>
Reward HDU
查看>>
ISSkin 使用技巧,WinXP 下的窗口阴影
查看>>
HttpClient传递Cookie
查看>>
Rxlifecycle(三):坑
查看>>
C++与Java语法上的不同
查看>>
Ceph集群块设备使用-创建和使用OSD
查看>>
大数据||hadoop分布式集群安装
查看>>
华为设备默认console密码
查看>>
wxWidgets第四课 EVT_LEFT_UP关联鼠标弹起事件不生效
查看>>
【故障解决】ORA-06502错误解决
查看>>
昂纳科技2016年营收15.98亿港元 数据中心业务大增409%
查看>>
为何还处于概念阶段的智能家居被3.15点名批评
查看>>
大数据技术服务商个推获4亿人民币D轮融资
查看>>
Git的详细使用教程
查看>>