HDU 1575 Tr A(矩阵快速幂)
2018-06-17 22:02:13来源:未知 阅读 ()
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 5537 Accepted Submission(s):
4161
每组数据的第一行有n(2 <= n <= 10)和k(2 <= k < 10^9)两个数据。接下来有n行,每行有n个数据,每个数据的范围是[0,9],表示方阵A的内容。
1 #include<cstdio> 2 #include<cstring> 3 using namespace std; 4 const int MAXN=101; 5 inline void read(int &n){char c='+';bool flag=0;n=0; 6 while(c<'0'||c>'9') c=='-'?flag=1,c=getchar():c=getchar(); 7 while(c>='0'&&c<='9') n=n*10+c-48,c=getchar();flag==1?n=-n:n=n;} 8 struct matrix 9 { 10 int m[11][11];matrix(){memset(m,0,sizeof(m));} 11 }; 12 matrix ma; 13 int limit; 14 const int mod=9973; 15 matrix mul(matrix a,matrix b) 16 { 17 matrix c; 18 for(int k=0;k<limit;k++) 19 for(int i=0;i<limit;i++) 20 for(int j=0;j<limit;j++) 21 c.m[i][j]=(c.m[i][j]+(a.m[i][k]*b.m[k][j]))%mod; 22 return c; 23 } 24 matrix fast_martix_pow(matrix ma,int p) 25 { 26 matrix bg; 27 for(int i=0;i<limit;i++) 28 for(int j=0;j<limit;j++) 29 bg.m[i][j]=(i==j); 30 while(p) 31 { 32 if(p&1) bg=mul(bg,ma); 33 ma=mul(ma,ma); 34 p>>=1; 35 } 36 return bg; 37 } 38 int main() 39 { 40 int T;read(T); 41 while(T--) 42 { 43 read(limit);int n;read(n); 44 for(int i=0;i<limit;i++) 45 for(int j=0;j<limit;j++) 46 read(ma.m[i][j]); 47 matrix ans=fast_martix_pow(ma,n); 48 int out=0; 49 for(int i=0;i<limit;i++) 50 out+=ans.m[i][i]%mod; 51 printf("%d\n",out%mod); 52 } 53 return 0; 54 }
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
- 稀疏矩阵类 2020-06-09
- 重载矩阵加法运算 代码参考 2020-04-29
- 螺旋矩阵问题 2020-04-18
- 给定一个由 0 和 1 组成的矩阵,找出每个元素到最近的 0 的 2020-04-15
- HDU-2955-Robberies(0-1背包) 2020-03-30
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash