[HDOJ1575]Tr A
2015-06-14 21:27
357 查看
Tr A
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3409 Accepted Submission(s): 2542
[align=left]Problem Description[/align]
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
很露骨的矩阵快速幂,代码如下:
#include <iostream> #include <cstring> #include <cstdio> #include <cmath> using namespace std; #define MOD 9973 #define MAXN 15 typedef struct MAT { int d[MAXN][MAXN]; int r, c; MAT() { r = c = 0; memset(d, 0, sizeof(d)); } }MAT; MAT mul(MAT m1, MAT m2, int mod) { MAT ans = MAT(); ans.r = m1.r; ans.c = m2.c; for(int i = 1; i <= m1.r; i++) { for(int j = 1; j <= m2.r; j++) { if(m1.d[i][j]) { for(int k = 1; k <= m2.c; k++) { ans.d[i][k] = (ans.d[i][k] + m1.d[i][j] * m2.d[j][k]) % mod; } } } } return ans; } MAT quickmul(MAT m, int n, int mod) { MAT ans = MAT(); for(int i = 1; i <= m.r; i++) { ans.d[i][i] = 1; } ans.r = m.r; ans.c = m.c; while(n) { if(n & 1) { ans = mul(m, ans, mod); } m = mul(m, m, mod); n >>= 1; } return ans; } int main() { int T; scanf("%d", &T); while(T--) { int n, k; scanf("%d %d", &n, &k); MAT A = MAT(); A.r = n, A.c = n; for(int i = 1; i <= n; i++) { for(int j = 1; j <= n; j++) { scanf("%d", &A.d[i][j]); } } A = quickmul(A, k, MOD); int ans = 0; for(int i = 1; i <= n; i++) { ans += A.d[i][i]; } printf("%d\n", ans % MOD); } return 0; }
View Code
相关文章推荐
- [HDOJ1061]Rightmost Digit
- opencv创建序列cvCreateSeq与插入元素cvSeqPush的运用
- JS获取地址栏参数
- 为什么不要重载 && 和 || 操作符!!!
- 为什么不要重载 && 和 || 操作符!!!
- 函数调用时程序堆栈的变化
- 敏捷开发(整合版)_Phoenix-晶
- 收藏点webservice接口
- NGINX + TOMCAT7 + MEMCACHED 实现SESSION 共享
- hibernate 实体的继承
- C#遍历硬盘所有目录 事件发布模式
- C#网络编程 tcpclient (阻塞异步)
- SPFA算法
- 低版本的Nginx支持PATHINFO的方法
- 令Code::Blocks支持C++11特性
- 一条SQL语句查询两表中两个字段
- Ubuntu下有道词典的安装
- 认识自己——我本来就善于为别人着想
- Android开发之SparseArray简介
- 随机生成身份证号和年龄