Tr A--hdu1575(矩阵快速幂)
2016-03-15 20:33
351 查看
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1575
算是模板吧
View Code
算是模板吧
#include <iostream> #include <stdio.h> #include <string.h> #include <algorithm> #include <stdlib.h> #include <queue> #include <vector> #include <map> using namespace std; typedef long long LL; #define met(a, b) memset(a, b, sizeof(a)) #define INF 0x3f3f3f3f #define N 15 #define MOD 9973 struct node { int a ; }; int n, k; node mul(node p, node q) { node temp; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { temp.a[i][j] = 0; for(int k=0; k<n; k++) temp.a[i][j] = (temp.a[i][j]+p.a[i][k]*q.a[k][j])%MOD; } } return temp; } node Pow(node A, int m) { node temp; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { temp.a[i][j] = 0; } temp.a[i][i] = 1; } while(m) { if(m % 2) temp = mul(temp, A); m/=2; A = mul(A, A); } return temp; } int slove(node A) { node ans = Pow(A, k); int sum = 0; for(int i=0; i<n; i++) { for(int j=0; j<n; j++) { if(i==j) sum = (sum + ans.a[i][j]) % MOD; } } return sum; } int main() { int T; scanf("%d", &T); while(T--) { node A; scanf("%d %d", &n, &k); for(int i=0; i<n; i++) { for(int j=0; j<n; j++) scanf("%d", &A.a[i][j]); } int ans = slove(A); printf("%d\n", ans); } return 0; }
View Code
相关文章推荐
- Linux手动添加普通用户
- LOCAL_MODULE_TAGS 选项说明
- 某搜索公司的杀毒卫士引起的电脑故障
- unity视频笔记——ngui-技能冷却,注册,聊天
- 方法模式
- 计算机的启动过程
- 范数定义
- linux下使用tar命令
- vl_feat+ win 64 + vs 2012 配置
- 架构漫谈(一):什么是架构?(转)
- MySQL MYISAM引擎表锁和行锁详解
- oracle应用dblink交换数据
- 5.1数据验证技术
- 界面控制与事件(二、Puzzle界面)
- 简单工厂
- iOS下按钮同时实现圆角与阴影效果
- HDOJ 2159-FATE【完全背包】
- Java反射系列之——什么是反射?
- Java - 推断元音辅音
- Leetcode:203. Remove Linked List Elements(Java)