HDU - 1575 Tr A
来源:互联网 发布:新媒体与网络传播 编辑:程序博客网 时间:2024/06/06 15:41
题目:
Description
A为一个方阵,则Tr A表示A的迹(就是主对角线上各项的和),现要求Tr(A^k)%9973。
Input
数据的第一行是一个T,表示有T组数据。
每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
Output
对应每组数据,输出Tr(A^k)%9973。
Sample Input
22 21 00 13 999999991 2 34 5 67 8 9
Sample Output
22686
直接把(A^k)%9973求出来,然后求它的迹,最后取模即可。
很容易证明,Tr(A^k)%9973=Tr((A^k)%9973)%9973
代码:
#include<iostream>using namespace std;int n, k;int in[10][10];int list[10][10];int temp[10][10];void pro(int l1[][10], int l2[][10], int t[][10])//t=l1*l2{for (int i = 0; i < n; i++)for (int j = 0; j < n; j++){t[i][j] = 0;for (int k = 0; k < n; k++)t[i][j] = (t[i][j] + l1[i][k] * l2[k][j]) % 9973;}}void f(int num)//让list是in的num次方{if (num == 0){for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)list[i][j] = (i == j);return;}f(num / 2);pro(list, list, temp);if (num % 2)pro(temp, in, list);else for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)list[i][j] = temp[i][j];}int get_tr(){int sum = 0;for (int i = 0; i < n; i++)sum += list[i][i];return sum;}int main(){int cas;cin >> cas;while (cas--){cin >> n >> k;for (int i = 0; i < n; i++)for (int j = 0; j < n; j++)cin >> in[i][j];f(k);cout << get_tr() % 9973 << endl;}return 0;}
2 0
- Tr A hdu 1575
- hdu 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- hdu 1575 Tr A
- hdu 1575 Tr A
- hdu 1575 Tr A
- HDU 1575 Tr A
- HDU - 1575 Tr A
- hdu 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- HDU 1575 Tr A
- hdu 1575 Tr A
- hdu 1575 Tr A
- HDU 1575 Tr A
- MySQL视图
- POJ 3468 A Simple Problem with Integers (线段树【区间更新】)
- Zookeeper的功能以及工作原理
- 【poj 2127】Greatest Common Increasing Subsequence 最长公共上升子序列lics+路径打印
- GIS-OpenLayer3探索:2 .添加客制化地图
- HDU - 1575 Tr A
- Android:透明状态栏、透明导航栏效果展示,美过IOS
- 问题 J: 网络寻路
- [Codeforces 689D] Friends and Subsequences (二分+稀疏表)
- 问题 I 操作格子
- 什么是用户体验
- Android应用程序(APK)的编译打包过程
- 数据储存---SQLtie
- 问题 H 查找整数