HDU 1575 Tr A( 简单矩阵快速幂 )
2024-10-21 06:33:46
链接:传送门
思路:简单矩阵快速幂,算完 A^k 后再求一遍主对角线上的和取个模
/*************************************************************************
> File Name: hdu1575.cpp
> Author: WArobot
> Blog: http://www.cnblogs.com/WArobot/
> Created Time: 2017年05月02日 星期二 20时42分37秒
************************************************************************/
#include<bits/stdc++.h>
using namespace std;
#define MOD 9973
#define mod(x) ((x)%MOD)
#define ll long long
const int maxn = 10;
struct mat{
int m[maxn][maxn];
}unit;
int n;
ll k;
mat operator * (mat a,mat b){
mat ret;
ll x;
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
x = 0;
for(int k=0;k<n;k++)
x += mod( (ll)a.m[i][k]*b.m[k][j] );
ret.m[i][j] = x;
}
}
return ret;
}
void init_unit(){
for(int i=0;i<maxn;i++) unit.m[i][i] = 1;
return;
}
mat pow_mat(mat a,ll x){
mat ret = unit;
while(x){
if(x&1) ret = ret*a;
a = a*a;
x >>= 1;
}
return ret;
}
int main(){
int t;
init_unit();
scanf("%d",&t);
while(t--){
scanf("%d%lld",&n,&k);
mat a;
for(int i=0;i<n;i++)
for(int j=0;j<n;j++)
scanf("%d",&a.m[i][j]);
mat ans = pow_mat(a,k);
ll sum = 0;
for(int i=0;i<n;i++)
sum += ans.m[i][i];
printf("%lld\n",sum%MOD);
}
return 0;
}
最新文章
- Centos系统下Lamp环境的快速搭建(超详细,转)
- 【cl】Json学习
- log4j2配置
- Spring-涉及到的设计模式汇总
- ASP.NET WebForm中用async/await实现异步出人意料的简单
- 2012开源项目计划-WPF企业级应用整合平台
- 【转】Masonry介绍与使用实践(快速上手Autolayout)
- POJ 2455 Secret Milking Machine (二分+无向图最大流)
- [C语言(VC)] 打造自己的键盘记录器 (zaroty)
- iOS图片压缩
- iOS tableView的图片缓存异步载入
- Java Calendar获取年、月、日、时间
- js 一些工具函数
- 2017-12-20python全栈9期第五天第一节之昨日内容回顾和作业讲解之字母变大写
- sqlite比较时间秒
- 双击jar文件运行程序
- vue系列之项目打包
- CCF计算机职业资格认证考试题解
- 图形对象函数figure() 及 子图创建函数subplot()
- Codeforces 1136E Nastya Hasn&#39;t Written a Legend (线段树教做人系列)