0分求助!!
查看原帖
0分求助!!
478755
Karis楼主2021/8/27 09:00
#include<iostream>
#include<cstdio>
#include<cstring>
#define ll long long
using namespace std;

const ll mod = 1000000007;

inline long long read()
{
	long long x = 0, f = 1;
	char ch = getchar();
	while(ch > '9' || ch < '0')
	{
		if(ch == '-')
        	f = -1;
        ch = getchar();
	}
	while(ch >= '0' && ch <= '9')
	{
		x = x * 10 + ch - '0';
		ch = getchar();
	}
	return x * f;
}

ll n, k, a[1001][1001], b[1001][1001];

void mul()
{
	ll c[1001][1001];
	memset(c,0,sizeof(c));
	for(ll i = 1; i <= n; ++i)
		for(ll j = 1; j <= n; ++j)
			for(ll k = 1; k <= n; ++k)
				c[i][j] = (c[i][j]+(a[i][k]*b[k][j])%mod)%mod;
	memcpy(a,c,sizeof(c));
}

void mulself()
{
	ll c[1001][1001];
	memset(c,0,sizeof(c));
	for(ll i = 1; i <= n; ++i)
		for(ll j = 1; j <= n; ++j)
			for(ll k = 1; k <= n; ++k)
				c[i][j] = (c[i][j]+(a[i][k]*a[k][j])%mod)%mod;
	memcpy(a,c,sizeof(c));
}

int  main()
{
	n = read();
	k = read();
	
	for(ll i =1; i <= n; ++i)
		for(ll j = 1; j <= n; ++j)
			a[i][j] = read();
	memcpy(b,a,sizeof(a));
	for(;k!=1; k >>= 1)
	{
		if(k&1)
			mul();
		mulself();
	}
	for(ll i =1; i <= n; ++i)
	{
		for(ll j = 1; j <= n; ++j)
			cout << a[i][j] << ' ';
		cout << endl ;
	}
	return 0;
}
2021/8/27 09:00
加载中...