ksm爆零求助
查看原帖
ksm爆零求助
372299
超级玛丽王子楼主2020/8/24 17:42

RT,代码如下

#include <bits/stdc++.h>
#define MAXN 105
using namespace std;
const int MOD=1e9+7;
inline int read(){
	char ch=getchar();
	int x=0,f=1;
	while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9') x=x*10+(ch^48),ch=getchar();
	return x*f;
}
struct matrix
{
	int n,m;
	long long a[MAXN][MAXN];
	
	inline matrix(){n=m=0;memset(a,0,sizeof(a));}
	
	inline void init(int n)
	{
		this->n=n;this->m=n;
		for (int i=1;i<=n;i++) a[i][i]=1;
	}
	
	inline struct matrix operator * (struct matrix tmp)
	{
		struct matrix ans;
		ans.n=n;ans.m=tmp.m;
		for (int i=1;i<=ans.n;i++)
			for (int j=1;j<=ans.m;j++)
				for (int k=1;k<=tmp.n;k++)
					ans.a[i][j]=(ans.a[i][j]+a[i][k]*tmp.a[k][j]%MOD)%MOD;
		return ans;
	}
} f;
inline struct matrix qpow(struct matrix a,long long b)
{
	struct matrix res;res.init(a.n);
	while (b)
	{
		if (b&1) res=res*a;
		a=a*a;b>>=1;
	}
	return res;
}
int main(void) {
    long long n,k;
    scanf("%lld%lld",&n,&k);
    f.init(n);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) f.a[i][j]=read();
    qpow(f,k);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=n;j++) printf("%lld ",f.a[i][j]);
}

蒟蒻真的不明白为什么会爆零,谢谢

由于各处搜集模板,除main外均不是本人马蜂……qwq

2020/8/24 17:42
加载中...