九度 题目1443:Tr A
来源:互联网 发布:iptables 开放端口段 编辑:程序博客网 时间:2024/06/03 12:42
九度 题目1443:Tr A
原题OJ链接:http://ac.jobdu.com/problem.php?pid=1443
题目描述:
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。
样例输入:
22 21 00 13 999999991 2 34 5 67 8 9
样例输出:
22686
解题思路:
矩阵快速幂,与二分求幂原理相同。
源代码:
#include<iostream>#include<cstring>using namespace std;long long int A[15][15],B[15][15],C[15][15];int T,n,k;int main(){ while(cin>>T){ for(int t=1;t<=T;t++){ cin>>n>>k; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ cin>>A[i][j]; B[i][j]=0; if(i==j) B[i][j]=1;//B矩阵初始化为单位矩阵 } } long long int ans=0; while(k!=0){ if(k%2==1){ for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ ans=0; for(int m=1;m<=n;m++){ ans=ans+A[i][m]*B[m][j]%9973; } C[i][j]=ans%9973; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ B[i][j]=C[i][j]; } } } k=k/2; for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ ans=0; for(int m=1;m<=n;m++){ ans=ans+A[i][m]*A[m][j]%9973; } C[i][j]=ans%9973; } } for(int i=1;i<=n;i++){ for(int j=1;j<=n;j++){ A[i][j]=C[i][j]; } } } ans=0; for(int i=1;i<=n;i++){ ans=ans+B[i][i]%9973; } cout<<ans%9973<<endl; } } return 0;}
阅读全文
0 0
- 九度 题目1443:Tr A
- 九度oj 题目1443:Tr A
- 九度OJ题目1443:Tr A
- 九度 题目1443:Tr A
- 九度 题目1443:Tr A
- 题目1443:Tr A
- 题目1443:Tr A
- 【学习笔记】〖九度OJ〗题目1443:Tr A
- 九度OJ-1443:Tr A
- 59-题目1443:Tr A
- 九度oj1443 Tr(A^k)
- 题目59:Tr A
- a+b (九度oj 题目60)
- 九度OJ 题目1010:A + B
- 【九度】题目1000:计算a+b
- 【九度】题目1003:A+B
- 九度OJ 题目1003:A+B
- 九度OJ题目1003:A+B
- 多台服务器日志查看
- CVE-2017-9805:Struts2 REST插件远程执行命令漏洞(S2-052) 分析报告
- Antenna Magus Professional
- linux 清空文件常用方法
- 439
- 九度 题目1443:Tr A
- C# 解决{System.Data.OleDb.OleDbException (0x80004005): 提示由于将在索引,主关键字或关系中创建重复的值,请求对表的改变没有成功
- python里取消一个未曾执行的任务
- python中文正则匹配初步使用
- Untiy3d实现Ulua热更新
- 树链剖分
- 生成二维码并直接上传到七牛上
- secure boot-dm verify
- DRUID: 新增MiddleManager节点遇到的坑