HDOJ 题目1575 Tr A(矩阵相乘,二分)
来源:互联网 发布:python爬虫 美国赚钱 编辑:程序博客网 时间:2024/04/27 16:37
Tr A
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 2789 Accepted Submission(s): 2075
Problem 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
Author
xhd
Source
HDU 2007-1 Programming Contest
Recommend
linle | We have carefully selected several similar problems for you: 1757 1588 2256 2604 2254
思路:http://blog.sina.com.cn/s/blog_9d29da7c0100xzb7.html
解析:我们在这里需要解决的不是一个一个把它乘出来就行了,更那样当n很大的时候会浪费很多时间,我们主要的工作就是如何将n分解。
这里我们采用二分的思想,比如n=27,我们可以依次表示如下:
n=27
=1+26
=1+13*2
=1+(1+12)*2
=1+(1+6*2)*2
=1+(1+(3*2)*2)*2
=1+(1+((1+2)*2)*2)*2
=1+(1+((1+2*1)*2)*2)*2;
也就相当于设一个a,b。a初始化为1,b初始化为0,用来分解n。
当n>1时
执行:如果n为奇数,则n--,b=b+a;
最后退出循环了,执行b=a+b。
这样最后的b=n。
ac代码#include<stdio.h>#include<string.h>int n,k;struct s{intmap[50][50];};struct s fun(struct s a,struct s b){struct s tmp;int i,j,k;for(i=0;i<n;i++){for(j=0;j<n;j++){tmp.map[i][j]=0;for(k=0;k<n;k++){tmp.map[i][j]+=a.map[i][k]*b.map[k][j];tmp.map[i][j]%=9973;}}}return tmp;}int main(){int t;scanf("%d",&t);while(t--){int i,j,sum=0;scanf("%d%d",&n,&k);struct s p,m;for(i=0;i<n;i++)for(j=0;j<n;j++){scanf("%d",&m.map[i][j]);if(i==j)p.map[i][j]=1;elsep.map[i][j]=0;}while(k>1){if(k%2){k--;p=fun(p,m);//如果k是奇数,那么就不能进行平均的二分,所以让p乘以一个单位矩阵,保证其不变,然后k--就可以进行二分了}else{k/=2;m=fun(m,m);}}m=fun(m,p);for(i=0;i<n;i++)sum+=m.map[i][i];printf("%d\n",sum%9973);}}
0 0
- HDOJ 题目1575 Tr A(矩阵相乘,二分)
- HDOJ 1575 Tr A (矩阵快速幂)
- hdoj 1575 Tr A(矩阵快速幂,模板题)
- hdoj 1575 Tr A 【矩阵快速幂】
- hdoj-1575-Tr A【矩阵快速幂】
- hdoj 1575 Tr A 【矩阵快速幂】
- hdoj 1575 Tr A 【矩阵快速幂】
- HDOJ-----1575---Tr A矩阵快速幂
- hdoj 1575 Tr A (矩阵快速幂)
- HDOJ 1575 Tr A 矩阵快速幂
- Tr A hdu 1575 二分法矩阵相乘的高次幂
- HDOJ 题目4920 Matrix multiplication(矩阵相乘,优化)
- HDOJ 1575 - Tr A
- hdoj-1575-Tr A
- HDOJ 1575:Tr A 矩阵的幂运算
- HUD - 1575 - Tr A ( 矩阵快速幂,简单题目 )
- Tr A(矩阵)
- hdu 1575 Tr A(矩阵乘法)
- poj_1789 Prim算法应用
- 解决centos无法挂载ntfs格式硬盘问题
- 出警告:warning c280:'a' :unreferenced local variable
- 小白装Ubuntu之问题记录与解决(win7下安装Ubuntu13.04)
- Longest Substring Without Repeating Characters
- HDOJ 题目1575 Tr A(矩阵相乘,二分)
- Codeforces Round #261 (Div. 2) C. Pashmak and Buses
- 杭电 1013 Digital Roots (字符串数组)
- TOJ 1923. Tanning Salon
- CONNECT BY LEVEL
- Monkey and Banana
- 【Android开发-8】生命周期,Activity中打开另外一个Activity
- 字符串算法回忆~
- UVA519