hdu1575 Tr A(矩阵快速幂)
来源:互联网 发布:淘宝宝贝关联阿里巴巴 编辑:程序博客网 时间:2024/06/10 07:55
题目:
Tr A
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 3689 Accepted Submission(s): 2754
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
题意:给一个矩阵,求出A^k的迹。
思路:裸的矩阵快速幂。
代码:
题意:给一个矩阵,求出A^k的迹。
思路:裸的矩阵快速幂。
代码:
#include <cstdlib>#include <cctype>#include <cstring>#include <cstdio>#include <cmath>#include<climits>#include <algorithm>#include <vector>#include <string>#include <iostream>#include <sstream>#include <map>#include <set>#include <queue>#include <stack>#include <fstream>#include <numeric>#include <iomanip>#include <bitset>#include <list>#include <stdexcept>#include <functional>#include <utility>#include <ctime>using namespace std;#define PB push_back#define MP make_pair#define REP(i,x,n) for(int i=x;i<(n);++i)#define FOR(i,l,h) for(int i=(l);i<=(h);++i)#define FORD(i,h,l) for(int i=(h);i>=(l);--i)#define SZ(X) ((int)(X).size())#define ALL(X) (X).begin(), (X).end()#define RI(X) scanf("%d", &(X))#define RII(X, Y) scanf("%d%d", &(X), &(Y))#define RIII(X, Y, Z) scanf("%d%d%d", &(X), &(Y), &(Z))#define DRI(X) int (X); scanf("%d", &X)#define DRII(X, Y) int X, Y; scanf("%d%d", &X, &Y)#define DRIII(X, Y, Z) int X, Y, Z; scanf("%d%d%d", &X, &Y, &Z)#define OI(X) printf("%d",X);#define RS(X) scanf("%s", (X))#define MS0(X) memset((X), 0, sizeof((X)))#define MS1(X) memset((X), -1, sizeof((X)))#define LEN(X) strlen(X)#define F first#define S second#define Swap(a, b) (a ^= b, b ^= a, a ^= b)#define Dpoint strcut node{int x,y}#define cmpd int cmp(const int &a,const int &b){return a>b;} /*#ifdef HOME freopen("in.txt","r",stdin); #endif*/const int MOD = 1e9+7;typedef vector<int> VI;typedef vector<string> VS;typedef vector<double> VD;typedef long long LL;typedef pair<int,int> PII;//#define HOMEint Scan(){int res = 0, ch, flag = 0;if((ch = getchar()) == '-')//判断正负flag = 1;else if(ch >= '0' && ch <= '9')//得到完整的数res = ch - '0';while((ch = getchar()) >= '0' && ch <= '9' )res = res * 10 + ch - '0';return flag ? -res : res;}/*----------------PLEASE-----DO-----NOT-----HACK-----ME--------------------*/int a[15][15];int n,k;void multi(int a[][15],int b[][15],int ans[][15]){ int c[15][15]; MS0(c); for(int i=0;i<n;i++) for(int j=0;j<n;j++) for(int k=0;k<n;k++) { c[i][j]=(c[i][j]+a[i][k]*b[k][j])%9973; } for(int i=0;i<n;i++) for(int j=0;j<n;j++) ans[i][j]=c[i][j];}void mypow(int a[][15],int k,int ans[][15]){ int temp[15][15]; for(int i=0;i<n;i++) for(int j=0;j<n;j++) temp[i][j]=a[i][j]; while(k) { if(k&1) multi(ans,temp,ans); multi(temp,temp,temp); k>>=1; }}int ans[15][15];int main(){int T;RI(T);while(T--){ RII(n,k); for(int i=0;i<n;i++) for(int j=0;j<n;j++) RI(a[i][j]); MS0(ans); for(int i=0;i<n;i++) ans[i][i]=1; mypow(a,k,ans); int res=0; for(int i=0;i<n;i++) res=(res+ans[i][i])%9973; printf("%d\n",res);} return 0;}
0 0
- hdu1575 Tr A(矩阵快速幂)
- HDU1575 Tr A(矩阵快速幂)
- hdu1575 Tr A(矩阵快速幂)
- hdu1575 Tr A (矩阵快速幂)
- hdu1575 Tr A(矩阵快速幂)
- (矩阵快速幂)hdu1575 Tr A
- hdu1575 Tr A (矩阵快速幂)
- Hdu1575 - Tr A - 矩阵快速幂
- HDU1575-Tr A(矩阵快速幂)
- HDU1575 Tr A 【矩阵快速幂】
- hdu1575 Tr A 矩阵快速幂
- [矩阵快速幂]hdu1575 Tr A
- HDU1575 Tr A【矩阵快速幂】
- hdu1575 Tr A(矩阵快速幂模板题)
- hdu1575 Tr A(矩阵快速幂模板题)
- HDU1575--Tr A(矩阵快速幂模板)
- hdu1575 Tr A(矩阵快速幂)题解
- [HDU1575]Tr A(矩阵乘法)
- New THUer | 如何提高科研效率
- Dns的概念
- lintcode 有效的括号序列
- Lua 5.3 参考手册 (1)
- ToolBar、TabLayout加角标无从下手?且看一看我的解决方法!
- hdu1575 Tr A(矩阵快速幂)
- 设计模式--状态模式
- tomcat启动startup.bat一闪而过
- 时间复杂度和空间复杂度详解
- Qt On Android开发环境安装、配置
- 京东注册页面
- hdu1588 Gauss Fibonacci(矩阵快速幂+二分求矩阵等比和)
- 从零开始学 iOS 开发的15条建议
- javaScript的设计模式之单例模式