1. 程式人生 > 其它 >P3390 矩陣快速冪 模板

P3390 矩陣快速冪 模板

矩陣意義上的快速冪

P3390 【模板】矩陣快速冪

只是模板而已。

但是沒注意到輸入都要開long long,還是WA+T了幾次。以後還是在不MLE的情況下全開long long,省的亂七八糟的事。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int N=105;
const int Mod=1000000007;
int n;
long long t;
struct martix {
	long long fac[N][N];
	martix() {
		memset(fac,0,sizeof(fac));
	}
	void build() {
		for (int i=1; i<=n; i++)
			fac[i][i]=1;
	}
} Ans,Base;
martix operator *(const martix &A,const martix &B) {
	martix temp;
	for (int k=1; k<=n; k++)
		for (int i=1; i<=n; i++)
			for (int j=1; j<=n; j++)
				temp.fac[i][j]=(temp.fac[i][j]+A.fac[i][k]*B.fac[k][j]%Mod)%Mod;
	return temp;
}
int main() {
	ios::sync_with_stdio(false);
	cin>>n>>t;
	Ans.build();
	for (int i=1; i<=n; i++)
		for (int j=1; j<=n; j++)
			cin>>Base.fac[i][j];
	while (t>0) {
		if (t&1)
			Ans=Ans*Base;
		Base=Base*Base;
		t>>=1;
	}
	for (int i=1; i<=n; i++) {
		for (int j=1; j<=n; j++)
			cout<<Ans.fac[i][j]<<" ";
		cout<<endl;
	}
}

本文來自部落格園,作者:Kinuhata,轉載請註明原文連結:https://www.cnblogs.com/KinuhataSaiai/p/15540946.html