九度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 ...
随机推荐
- Jenkins中启动从节点时,出现问题如何解决,问题:No Known Hosts...
Jenkins中,启动从节点时,出现如下问题如何解决:/root/.ssh/known_hosts [SSH] No Known Hosts file was found at /root/.ssh/ ...
- Windows环境中,通过Charles工具,抓取安卓手机、苹果手机中APP应用的http、https请求包信息
Windows环境中,通过Charles工具,抓取安卓手机.苹果手机中APP应用的http.https请求包信息1.抓取安卓手机中APP应用的http请求包信息1)在电脑上操作,查看Windows机器 ...
- CodeForces 77C Beavermuncher-0xFF (树形dp)
不错的树形dp.一个结点能走多次,树形的最大特点是到达后继的路径是唯一的,那个如果一个结点无法往子结点走,那么子结点就不用考虑了. 有的结点不能走完它的子结点,而有的可能走完他的子节点以后还会剩下一些 ...
- 第011课_串口(UART)的使用
from: 第011课_串口(UART)的使用 第001节_辅线1_硬件知识_UART硬件介绍 1. 串口的硬件介绍 UART的全称是 Universal Asynchronous Receiver ...
- Linux Ptrace 详解
转 https://blog.csdn.net/u012417380/article/details/60470075 Linux Ptrace 详解 2017年03月05日 18:59:58 阅读数 ...
- Voyager的安装及配置文件
使用代理服务器安装laravel http_proxy=http://localhost:1080 composer create-project --prefer-dist laravel/lara ...
- DeepFaceLab小白入门(4):提取人脸图片!
通过上面级片文章,你应该基本知道了换脸的流出,也能换出一个视频来.此时,你可能会产生好多疑问,比如每个环节点点到底是什么意思,那些黑漆漆屏幕输出的又是什么内容,我换脸效果这么差,该如何提升?等等,好奇 ...
- nrf51822微信开发入门学习笔记1:开始前的准备
参考:(id:love--baby)https://blog.csdn.net/hunhun1122/article/details/68922493 微信硬件平台:https://iot.weixi ...
- static 的三个作用
1).用于声明函数体内的变量为静态局部变量,存储在静态数据存储区,在函数被调用过程中维持其值保持不变 2).在文件内(函数体外)被声明为静态的变量,可以被文件内的所有函数访问,但不能被其他文件的函数访 ...
- POJ:2632-Crashing Robots
Crashing Robots Time Limit: 1000MS Memory Limit: 65536K Description In a modernized warehouse, robot ...