HDU1575-二分法-矩阵相乘
来源:互联网 发布:网络脆弱性扫描 编辑:程序博客网 时间:2024/06/06 00:49
推荐下 Matrix67 大神的神作:十个利用矩阵乘法解决的经典题目
#include <iostream>using namespace std;const int MAXN = 15;const int MOD = 9973;typedef struct{ int matrix[MAXN][MAXN];}Matrix;Matrix init;//初始化矩阵Matrix unit;//单位矩阵int n;Matrix mul(Matrix a,Matrix b)//矩阵相乘{ int i,j,k; Matrix c; for( i = 0 ; i < n ; i ++ ) for( j = 0 ; j < n ; j ++ ) { c.matrix[i][j] = 0; for( k = 0 ; k < n ; k ++ ) c.matrix[i][j] += a.matrix[i][k] * b.matrix[k][j]; c.matrix[i][j] = c.matrix[i][j] % MOD; } return c;}Matrix solve(int k)//采用二分法求{ Matrix p = unit; Matrix q = init; while( k > 1 ) { if( k % 2 == 1 )//为奇数,不满足二分 { k --; p = mul(p,q);//乘于单位矩阵,奇数部分一直累乘到p中 } else { k = k / 2; q = mul(q,q);//两边累乘 } } p = mul(p,q);//最终把多出的部分乘上偶数部分 return p;}int main(){ int t,k,i,j,sum; Matrix ans; //freopen("1575.txt","r",stdin); scanf("%d",&t); while( t-- ) { scanf("%d %d",&n,&k); for( i = 0 ; i < n ; i ++ ) for( j = 0 ; j < n ; j ++ ) { scanf("%d",&init.matrix[i][j]); unit.matrix[i][j] = (i==j); } ans = solve(k); sum = 0; for( i = 0 ; i < n ; i ++ ) sum = (sum + ans.matrix[i][i]) % MOD; printf("%d\n",sum); } return 0;}
- HDU1575-二分法-矩阵相乘
- HDU1005矩阵相乘二分法
- Tr A hdu 1575 二分法矩阵相乘的高次幂
- hdu1575 矩阵乘法
- HDU1575矩阵快速幂裸题
- 快速矩阵幂HDU1575
- 矩阵快速幂 HDU1575
- HDU1575 Tr A 矩阵应用
- hdu1575 二分+矩阵求幂
- HDU1575[矩阵快速幂]模板
- HDU1575 矩阵快速幂入门
- hdu1575 TrA 矩阵快速幂
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- 矩阵相乘
- HOOK API
- bash中判断查找的字符串是否存在
- ADPCM与PCM的区别 以及wave文件的压缩与解压缩
- SourceInsight添加.S汇编语言
- CHARINDEX查询类似500*500相差20的数据
- HDU1575-二分法-矩阵相乘
- JSTL标签库学习笔记 四、核心标签库的循环标签
- JS控制阿拉伯数字转为中文大写
- 关于AIX小型机 Sybase ASE 12.5数据库的惊险瞬间
- collection接口之Arraylist,vector,Linkedlist
- Bundler
- Linux Commands for Beginners-- Echo And Creating Variables
- adpcm的压缩和解压缩实现
- memory_free--test