10pts 只对最后一个点,其他全wa玄关
查看原帖
10pts 只对最后一个点,其他全wa玄关
839183
i__ak_io楼主2024/8/5 15:40
#include <iostream>
#include <cstdio>

using namespace std;

#define inl long long
const int SP=1e2+5;
const int mod=1e9+7;

inl n,k;
inl a[SP][SP],ans[SP][SP]={0};

inline inl read (void) {
    inl x=0,f=1;
    char ch=getchar();
    while (ch=='-')
		f=f*(-1),ch=getchar();
    while (ch>=48&&ch<=57)
		x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
    return x*f;
}

signed main (void) {
	n=read(),k=read();
	for (int i=1;i<=n;++i)
		for (int j=1;j<=n;++j)
			a[i][j]=read();
	for (int i=1;i<=n;++i)
		ans[i][i]=1;
	while (k) {
		if (k&1) {
			inl c[105][105]={0};
			for (int k=1;k<=n;++k)
				for (int i=1;i<=n;++i)
					for (int j=1;j<=n;++j)
						c[i][j]=(c[i][j]+1ll*ans[i][k]*a[k][j]%mod)%mod;
			for (int i=1;i<=n;++i)
				for (int j=1;j<=n;++j)
					ans[i][j]=c[i][j];
		}
		inl c[105][105]={0};
		for (int k=1;k<=n;++k)
			for (int i=1;i<=n;++i)
				for (int j=1;j<=n;++j)
					c[i][j]=(c[i][j]+1ll*a[i][k]*a[k][j]%mod)%mod;
		for (int i=1;i<=n;++i)
			for (int j=1;j<=n;++j)
				a[i][j]=c[i][j];
		k>>=1;
	}
	for (int i=1;i<=n;++i) {
		for (int j=1;j<=n;++j)
			printf("%lld ",ans[i][j]%mod);
		printf("\n");
	}
	return 0;
}
2024/8/5 15:40
加载中...