洛谷 3390 矩阵快速幂

来源:互联网 发布:乐视tv电视直播软件 编辑:程序博客网 时间:2024/04/29 06:26

题目背景

矩阵快速幂

题目描述

给定n*n的矩阵A,求A^k

输入输出格式

输入格式:
第一行,n,k

第2至n+1行,每行n个数,第i+1行第j个数表示矩阵第i行第j列的元素

输出格式:
输出A^k

共n行,每行n个数,第i行第j个数表示矩阵第i行第j列的元素,每个元素模10^9+7

输入输出样例

输入样例#1:
2 1
1 1
1 1
输出样例#1:
1 1
1 1
说明

n<=100, k<=10^12, |矩阵元素|<=1000

算法:矩阵快速幂

type point=array[1..100,1..100] of int64;
var
y,k:int64;
n,i,j:longint;
a,ans,c:point;
procedure cheng(var a,b:point);
var i,j,k:longint;
begin
for i:=1 to n do
for j:=1 to n do
begin
c[i,j]:=a[i,1]*b[1,j] mod 1000000007;
for k:=2 to n do
c[i,j]:=(c[i,j]+a[i,k]*b[k,j]) mod 1000000007;
end;
for i:=1 to n do
for j:=1 to n do
a[i,j]:=c[i,j];
end;
begin
readln(n,k);
for i:=1 to n do
for j:=1 to n do
read(a[i,j]);
ans:=a;
dec(k);
while k>0 do
begin
if k and 1=1 then cheng(ans,a);
cheng(a,a);
k:=k>>1;
end;
for i:=1 to n do
begin
for j:=1 to n do
write(ans[i,j],’ ‘);
writeln;
end;
end.

0 0
原创粉丝点击