hdu 1575 Tr A(矩阵快速幂乘法优化算法)
2015-12-12 16:23
531 查看
[align=left]Problem Description[/align]
[align=left]Input[/align]
[align=left]Output[/align]
[align=left]Sample Input[/align]
[align=left]Sample Output[/align]
[align=left]Author[/align]
xhd
[align=left]Source[/align]
HDU 2007-1 Programming Contest
View Code
A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。
[align=left]Input[/align]
数据的第一行是一个T,表示有T组数据。 每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
[align=left]Output[/align]
对应每组数据,输出Tr(A^k)%9973。
[align=left]Sample Input[/align]
2 2 2 1 0 0 1 3 99999999 1 2 3 4 5 6 7 8 9
[align=left]Sample Output[/align]
2 2686
[align=left]Author[/align]
xhd
[align=left]Source[/align]
HDU 2007-1 Programming Contest
#include<iostream> #include<cstdio> #include<cstring> using namespace std; #define N 10 #define MOD 9973 int n,k; struct Matrix { int mp ; }matrix; Matrix Mul(Matrix a,Matrix b) { Matrix res; int i,j,k; for(i=0;i<n;i++) { for(j=0;j<n;j++) { res.mp[i][j] = 0; for(k=0;k<n;k++) res.mp[i][j] = (res.mp[i][j]+(a.mp[i][k]*b.mp[k][j]))%MOD; } } return res; } Matrix fastm(Matrix a,int b) { Matrix res; memset(res.mp,0,sizeof(res.mp)); for(int i=0;i<n;i++) res.mp[i][i] = 1; while(b) { if(b&1) res = Mul(res,a); a = Mul(a,a); b >>= 1; } return res; } int main() { int t; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=0;i<n;i++) { for(int j=0;j<n;j++) { scanf("%d",&matrix.mp[i][j]); } } Matrix tmp=fastm(matrix,k); int ans=0; for(int i=0;i<n;i++) { ans=(ans+tmp.mp[i][i])%MOD; } printf("%d\n",ans); } return 0; }
View Code
相关文章推荐
- avalov+require实现tab栏
- innodb_kill_idle_transaction(kill长久未提交的事务)
- 数据结构之快速排序
- POJ-3096
- 关于尼康黄的原因
- 【html】【16】高级篇--毛玻璃效果[模糊]
- 字符串反转(C语言)
- iOS学习笔记:app不满屏
- 主题模型LDA
- 打印字符串次数,采用简单递归
- android中如何切换EditText是否可编辑
- TF-IDF算法
- linux SO文件
- javascript性能优化之DOM交互操作实例分析
- python用pip安装whl后缀的模块文件
- HDU 1039 字符串判断(水题)
- 希尔排序(ShellSort)
- Windows系统下将Qt生成的应用程序打包成可以安装的文件setup***.exe
- nexus命令
- mysql字符问题