九度oj 题目1443:Tr A
- 题目描述:
-
A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。
- 输入:
-
数据的第一行是一个T,表示有T组数据。
每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
- 输出:
-
对应每组数据,输出Tr(A^k)%9973。
- 样例输入:
-
2
2 2
1 0
0 1
3 99999999
1 2 3
4 5 6
7 8 9
- 样例输出:
-
2
2686 这个题考查矩阵相乘和幂的快速运算
对于幂的快速运算
考虑 m 的 n 次幂
n 可以写为 几个二的平方项的和
比如n 为 10, 二进制位 1010, 8 + 2
那么m 的 10 次幂 等于 m的8次幂 乘以 m的二次幂
通过不断的乘方运算,即可得出答案 代码如下#include <cstdio>
#include <cstdlib>
#include <cstring>
#define M 9973
int t, n, k;
int num[][];
int res[][]; void multi() {
int num2[][], num3[][];
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
num2[i][j] = num[i][j];
num3[i][j] = ;
}
}
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
for(int k = ; k < n; k++) {
num3[i][j] = (num3[i][j] + num[i][k] * num2[k][j])%M;
}
}
}
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
num[i][j] = num3[i][j];
}
}
} void multiR() {
int num3[][];
memset(num3, , sizeof(num3));
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
for(int k = ; k < n; k++) {
num3[i][j] = (num3[i][j] + num[i][k] * res[k][j])%M;
}
}
}
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
res[i][j] = num3[i][j];
}
}
} int main(int argc, char const *argv[])
{
int t;
scanf("%d",&t);
while(t--) {
scanf("%d %d",&n,&k);
for(int i = ; i < n; i++) {
for(int j = ; j < n; j++) {
scanf("%lld",&num[i][j]);
}
}
int p = k;
memset(res, , sizeof(res));
for(int i = ; i < n; i++) {
res[i][i] = ;
}
while(p > ) {
if(p&) {
multiR();
}
multi();
p >>=;
} int ans = ;
for(int i = ; i < n; i++) {
ans = (ans + res[i][i])%M;
}
printf("%d\n",ans);
}
return ;
}
九度oj 题目1443:Tr A的更多相关文章
- 九度OJ题目1443:Tr A (JAVA)
题目描述: A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973. 输入: 数据的第一行是一个T,表示有T组数据. 每组数据的第一行有n(2 <= n & ...
- 九度OJ 题目1384:二维数组中的查找
/********************************* * 日期:2013-10-11 * 作者:SJF0115 * 题号: 九度OJ 题目1384:二维数组中的查找 * 来源:http ...
- hdu 1284 关于钱币兑换的一系列问题 九度oj 题目1408:吃豆机器人
钱币兑换问题 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Sub ...
- 九度oj题目&吉大考研11年机试题全解
九度oj题目(吉大考研11年机试题全解) 吉大考研机试2011年题目: 题目一(jobdu1105:字符串的反码). http://ac.jobdu.com/problem.php?pid=11 ...
- 九度oj 题目1007:奥运排序问题
九度oj 题目1007:奥运排序问题 恢复 题目描述: 按要求,给国家进行排名. 输入: 有多组数据. 第一行给出国家数N,要求排名的国家数M,国家号 ...
- 九度oj 题目1087:约数的个数
题目链接:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次输出每个数的约数的个数 输入: 输入的第一行为N,即数组的个数(N<=1 ...
- 九度OJ题目1105:字符串的反码
tips:scanf,cin输入字符串遇到空格就停止,所以想输入一行字符并保留最后的"\0"还是用gets()函数比较好,九度OJ真操蛋,true?没有这个关键字,还是用1吧,还是 ...
- 九度oj题目1009:二叉搜索树
题目描述: 判断两序列是否为同一二叉搜索树序列 输入: 开始一个数n,(1<=n<=20) 表示有n个需要判断,n= 0 的时候输入结束. 接 ...
- 九度oj题目1002:Grading
//不是说C语言就是C++的子集么,为毛printf在九度OJ上不能通过编译,abs还不支持参数为整型的abs()重载 //C++比较正确的做法是#include<cmath.h>,cou ...
随机推荐
- HTTP错误码汇总(转)
响应码由三位十进制数字组成,它们出现在由HTTP服务器发送的响应的第一行.响应码分五种类型,由它们的第一位数字表示:1.1xx:信息,请求收到,继续处理2.2xx:成功,行为被成功地接受.理解和采纳3 ...
- 洛谷 P3143 [USACO16OPEN]钻石收藏家Diamond Collector
题目描述 Bessie the cow, always a fan of shiny objects, has taken up a hobby of mining diamonds in her s ...
- 有一个无效 SelectedValue,因为它不在项目列表中
“Drp_XX”有一个无效 SelectedValue,因为它不在项目列表中 出现以上异常的原因肯定是将DrowDownList控件的SelectedValue属性赋值为一个列表中不存在的值.那么我们 ...
- [Git]使用Git上传本地项目,并同步到Github上
第一步:先要在github.com中创建一个仓库(New Repository). 第二步,打开Git Bash ① git init [+仓库名]:初始化仓库,执行之后可以在指定的仓库存放地上面看到 ...
- java面试题(杨晓峰)---以面试题为切入点,有效提升你的java内功
java是一门历史悠久的编程语言,可以毫无争议的说,java是最主流的编程语言之一.全球有1200万以上的java程序猿以及海量的设备,还有无所不能的java生态圈. 我所知道的诸如阿里,京东,百度, ...
- BZOJ 4491: 我也不知道题目名字是什么 RMQ
4491: 我也不知道题目名字是什么 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 317 Solved: 174[Submit][Status][ ...
- thinkphp 的事务回滚处理 和 原始PHP的事务回滚实例
1. 要程序里面支持事务,首先连接的数据库和数据表必须支持事务 mysql 为例: 数据库InnoDB支持 transactions 数据表支持事务:InnoDB 支持transaction ...
- iOS快速开发框架--Bee Framework
Bee Framework是一款iOS快速开发框架,允许开发者使用Objective-C和XML/CSS来进行iPhone和iPad开发,由 Gavin Kwoe 和 QFish 开发并维护. 其早期 ...
- 自行实现一个简易RPC框架
10分钟写一个RPC框架 1.RpcFramework package com.alibaba.study.rpc.framework; import java.io.ObjectInputStrea ...
- UI调试神器 for ios:Reveal的使用与破解
aaarticlea/jpeg;base64,/9j/4AAQSkZJRgABAQEAkACQAAD/2wBDAAgGBgcGBQgHBwcJCQgKDBQNDAsLDBkSEw8UHRofHh0aH