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


PROBLEM SETTER: JANE ALAM JAN
  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)的更多相关文章

  1. lightOJ 1132 Summing up Powers(矩阵 二分)

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意:给出n和m.求sum(i^m)%2^32.(1<=i<=n) ...

  2. lightoj1132—Summing up Powers (取膜技巧&&组合数应用)

    题目链接:https://vjudge.net/problem/LightOJ-1132 题目意思:(1K + 2K + 3K + ... + NK) % 232 矩阵快速幂的题目一般都很短,这道题也 ...

  3. LightOJ 1132 Summing up Powers:矩阵快速幂 + 二项式定理

    题目链接:http://lightoj.com/volume_showproblem.php?problem=1132 题意: 给定n.k,求(1K + 2K + 3K + ... + NK) % 2 ...

  4. LightOJ - 1132 Summing up Powers 矩阵高速幂

    题目大意:求(1^K + 2^K + 3K + - + N^K) % 2^32 解题思路: 借用别人的图 能够先打表,求出Cnm,用杨辉三角能够高速得到 #include<cstdio> ...

  5. [伯努利数] poj 1707 Sum of powers

    题目链接: http://poj.org/problem?id=1707 Language: Default Sum of powers Time Limit: 1000MS   Memory Lim ...

  6. 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 ...

  7. 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 ...

  8. 函数式Android编程(II):Kotlin语言的集合操作

    原文标题:Functional Android (II): Collection operations in Kotlin 原文链接:http://antonioleiva.com/collectio ...

  9. 统计分析中Type I Error与Type II Error的区别

    统计分析中Type I Error与Type II Error的区别 在统计分析中,经常提到Type I Error和Type II Error.他们的基本概念是什么?有什么区别? 下面的表格显示 b ...

随机推荐

  1. gg=G

    1.代码格式化对齐 2.直接按下ESE模式下就可以来执行了

  2. day20 系统优化

    day20 系统优化 yum源的优化 yum源的优化: 自建yum仓库 使用一个较为稳定的仓库 # 安装华为的Base源 或者使用清华的源也可以 wget -O /etc/yum.repos.d/Ce ...

  3. day07 Linux配置修改

    day07 Linux配置修改 昨日回顾 1.系统目录 /etc :系统配置目录 /bin-> /usr/bin :保存常用命令的目录 /root :超级管理员目录 /home :普通管理员目录 ...

  4. Spark(八)【广播变量和累加器】

    目录 一. 广播变量 使用 二. 累加器 使用 使用场景 自定义累加器 在spark程序中,当一个传递给Spark操作(例如map和reduce)的函数在远程节点上面运行时,Spark操作实际上操作的 ...

  5. npm下载错误解决办法

    解决办法:删除npmrc文件. 使用镜像 镜像使用方法(三种办法任意一种都能解决问题,建议使用第三种,将配置写死,下次用的时候配置还在):1.通过config命令12npm config set re ...

  6. E面波导和H面波导的问题

    我感觉与窄壁平行是E面,反之为H面.通常E面(窄面)是指与电场方向平行的方向图切面(窄面):H面(宽面)是指与磁场方向平行的方向图切面(宽面).E面的意思是... ElevationH面的意思是... ...

  7. Shell学习(五)—— awk命令详解

    一.awk简介   awk是一个非常好用的数据处理工具,相对于sed常常作用于一整个行的处理,awk则比较倾向于一行当中分成数个[字段]处理,因此,awk相当适合处理小型的数据数据处理.awk是一种报 ...

  8. Linux学习 - 挂载命令

    一.mount 1 功能 将外设手工挂载到目标挂载点 2 语法 mount  [-t 文件系统]  [设备文件名]  [挂载点] 3 范例 mkdir  /mnt/cdrom 在/mnt下创建一个cd ...

  9. RAC中常见的高级用法-组合

    组合: concat组合:           按一定顺序执行皇上与皇太子关系 concat底层实现:     1.当拼接信号被订阅,就会调用拼接信号的didSubscribe     2.didSu ...

  10. linux 配置本地yum

    1.挂载光盘 #挂载光盘 mount /dev/cdrom /mnt/cdrom 2.修改yum.conf, 运行 vi /etc/yum.conf,文件替换成如下内容 [main] cachedir ...