1142 - Summing up Powers (II)
| Time Limit: 2 second(s) | Memory Limit: 32 MB |
Shanto is learning how to power up numbers and he found an efficient way to find kth power of a matrix. He was quite happy with his discovery. Suddenly his sister Natasha came to him and asked him to find the summation of the powers. To be specific his sister gave the following problem.
Let A be an n x n matrix. We define Ak = A * A * ... * A (k times). Here, * denotes the usual matrix multiplication. You are to write a program that computes the matrix A + A2 + A3 + ... + Ak.
Shanto smiled and thought that it would be an easy one. But after a while he found that it's tough for him. Can you help him?
Input
Input starts with an integer T (≤ 20), denoting the number of test cases.
Each case starts with two integers n (1 ≤ n ≤ 30) and k (1 ≤ k ≤ 109). Each of the next n lines will contain n non-negative integers (not greater than 10).
Output
For each case, print the case number and the result matrix. For each cell, just print the last digit. See the samples for more details.
Sample Input |
Output for Sample Input |
|
2 3 2 1 4 6 6 5 2 1 2 3 3 10 1 4 6 6 5 2 1 2 3 |
Case 1: 208 484 722 Case 2: 868 620 546 |

1 #include<stdio.h>
2 #include<algorithm>
3 #include<iostream>
4 #include<stdlib.h>
5 #include<string.h>
6 #include<math.h>
7 #include<queue>
8 using namespace std;
9 typedef long long LL;
10 typedef struct node
11 {
12 int m[70][70];
13 node()
14 {
15 memset(m,0,sizeof(m));
16 }
17 } maxtr;
18 int ans[70][70];
19 void E(node *nn,int n);
20 maxtr ju(int n);
21 maxtr quick(node ju,int n,int m);
22 int main(void)
23 {
24 int i,j,k;
25 int n,m;
26 int s;
27 cin>>k;
28 for(s=1; s<=k; s++)
29 {
30 scanf("%d %d",&n,&m);
31 for(i=0; i<n; i++)
32 {
33 for(j=0; j<n; j++)
34 {
35 scanf("%d",&ans[i][j]);
36 ans[i][j]%=10;
37 }
38 }node aa;aa=ju(n);
39 aa=quick(aa,n,m);printf("Case %d:\n",s);
40 for(i=0;i<n;i++)
41 {
42 for(j=n;j<2*n;j++)
43 {
44 printf("%d",aa.m[i][j]);
45 }printf("\n");
46 }
47 }return 0;
48 }
49 void E(node *nn,int n)
50 {
51 int i,j,k;
52 for(i=0; i<n; i++)
53 {
54 for(j=0; j<n; j++)
55 {
56 if(i==j)
57 nn->m[i][j]=1;
58 else nn->m[i][j]=0;
59 }
60 }
61 }
62 maxtr ju(int n)
63 {
64 int i,j,k;
65 maxtr nn;
66 for(i=0; i<n; i++)
67 {
68 for(j=0; j<n; j++)
69 {
70 nn.m[i][j]=ans[i][j];
71 }
72 }
73 for(i=0; i<n; i++)
74 {
75 for(j=n; j<2*n; j++)
76 {
77 nn.m[i][j]=ans[i][j-n];
78 }
79 }
80 node cc;
81 E(&cc,n);
82 for(i=n; i<2*n; i++)
83 {
84 for(j=n; j<2*n; j++)
85 {
86 nn.m[i][j]=cc.m[i-n][j-n];
87 }
88 }return nn;
89 }
90 maxtr quick(node ju,int n,int m)
91 { node ee;
92
93 E(&ee,2*n);
94 int i,j,k;
95 int s;
96 while(m)
97 {
98 if(m&1)
99 {
100 node cc;
101 for(i=0; i<2*n; i++)
102 {
103 for(j=0; j<2*n; j++)
104 {
105 for(s=0; s<2*n; s++)
106 {
107 cc.m[i][j]=(ju.m[i][s]*ee.m[s][j]+cc.m[i][j])%10;
108 }
109 }
110 }
111 ee=cc;
112 }
113 node cc;
114 for(i=0; i<2*n; i++)
115 {
116 for(j=0; j<2*n; j++)
117 {
118 for(s=0; s<2*n; s++)
119 {
120 cc.m[i][j]=(ju.m[i][s]*ju.m[s][j]+cc.m[i][j])%10;
121 }
122 }
123 }
124 ju=cc;
125 m/=2;
126 }
127 return ee;
128 }
1142 - Summing up Powers (II)的更多相关文章
- lightOJ 1132 Summing up Powers(矩阵 二分)
题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意:给出n和m.求sum(i^m)%2^32.(1<=i<=n) ...
- lightoj1132—Summing up Powers (取膜技巧&&组合数应用)
题目链接:https://vjudge.net/problem/LightOJ-1132 题目意思:(1K + 2K + 3K + ... + NK) % 232 矩阵快速幂的题目一般都很短,这道题也 ...
- LightOJ 1132 Summing up Powers:矩阵快速幂 + 二项式定理
题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意: 给定n.k,求(1K + 2K + 3K + ... + NK) % 2 ...
- LightOJ - 1132 Summing up Powers 矩阵高速幂
题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...
- [伯努利数] poj 1707 Sum of powers
题目链接: http://poj.org/problem?id=1707 Language: Default Sum of powers Time Limit: 1000MS Memory Lim ...
- Leetcode 笔记 113 - Path Sum II
题目链接:Path Sum II | LeetCode OJ Given a binary tree and a sum, find all root-to-leaf paths where each ...
- Leetcode 笔记 117 - Populating Next Right Pointers in Each Node II
题目链接:Populating Next Right Pointers in Each Node II | LeetCode OJ Follow up for problem "Popula ...
- 函数式Android编程(II):Kotlin语言的集合操作
原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...
- 统计分析中Type I Error与Type II Error的区别
统计分析中Type I Error与Type II Error的区别 在统计分析中,经常提到Type I Error和Type II Error.他们的基本概念是什么?有什么区别? 下面的表格显示 b ...
随机推荐
- 学习java的第十一天
一.今日收获 1.学习java完全学习手册2.9.3循环结构的内容并验证例题 2.观看哔哩哔哩上的教学视频 二.今日问题 1.基本没有 三.明日目标 1.继续完成2.9.3循环结构的例题 2.哔哩哔哩 ...
- SimpleNVR如何把安防监控画面推流到微信公众号直播
背景需求 进入移动互联网时代以来,微信已成为许多企业除官网以外必备的宣传渠道,当3.2亿直播用户与九亿微信用户的势能增加,在微信上开启直播已成为越来越多企业的不二选择. 需求分析 微信公众号作为平台来 ...
- day11 系统安全
day11 系统安全 复习总结 文件 1.创建 格式:touch [路径] [root@localhost ~]# touch 1.txt # 当前路径创建 [root@localhost ~]# t ...
- Flink基础
一.抽象层次 Flink提供不同级别的抽象来开发流/批处理应用程序. 最低级抽象只提供有状态流.它 通过Process Function嵌入到DataStream API中.它允许用户自由处理来自 ...
- HDFS【Java API操作】
通过java的api对hdfs的资源进行操作 代码:上传.下载.删除.移动/修改.文件详情.判断目录or文件.IO流操作上传/下载 package com.atguigu.hdfsdemo; impo ...
- swift设置导航栏item颜色和状态栏颜色
//swift设置导航栏item颜色和状态栏颜色 let dict:Dictionary =[NSForegroundColorAttributeName:UIColor.hrgb("333 ...
- PhoneGap本地将html打包成安卓App
PhoneGap的在线打包有大小限制,超过30M的包无法在线打包.当然,可以把包里面的图片.声音文件去掉,然后打包.下载以后,解包,重新打包并签名.蛮麻烦的. 本地打包的简单方法如下: 下载安装Jav ...
- Data Calendar
1.Date对象 Date类在java.util包中.使用Date类的无参数构造方法创建的对象可以获取本地当前时间. 用Date的构造方法Date(long time)创建的Date对象表 示相对19 ...
- Redis集群的三种模式
一.主从模式 通过持久化功能,Redis保证了即使在服务器重启的情况下也不会损失(或少量损失)数据,因为持久化会把内存中数据保存到硬盘上,重启会从硬盘上加载数据. 但是由于数据是存储在一台服务器上的, ...
- 使用frp进行内网穿透,实现ssh远程访问Linux服务器
搭建一个完整的frp服务链需要: VPS一台(也可以是具有公网IP的实体机) 访问目标设备(就是你最终要访问的设备) 简单的Linux基础(如果基于Linux配置的话) 我这里使用了腾讯云服务器作为服 ...