蒟蒻20分求助
查看原帖
蒟蒻20分求助
703115
d909RCA楼主2022/11/10 15:00

对了7,8数据点

#include <bits/stdc++.h>
using namespace std;
#define int long long
#define MOD 1000000007
int n,k;
struct node
{
	int m[109][109];
}a,t;
node times(node a,node b)
{
	node ans;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			for(int k=1;k<=n;k++)
			{
				ans.m[i][j]+=(a.m[i][k]*b.m[k][j]);
			}
		}
	}
	return ans;
}
node mod(node a)
{
	node ans;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			ans.m[i][j]=a.m[i][j]%MOD;
		}
	}
	return ans;
}
node qpow(node a,int n)
{
    if(n==0) return t;
    else if(n%2==1) return mod(times(qpow(a,n-1),a));
    else
    {
        node temp=mod(qpow(a,n/2));
        return mod(times(temp,temp));
    }
}
signed main()
{
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cin>>a.m[i][j];
		}
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			if(i==j) t.m[i][j]=1;
			else t.m[i][j]=0;
		}
	}
	node ans=qpow(a,k);
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			cout<<ans.m[i][j]<<" ";
		}
		cout<<endl; 
	}
	return 0;
}

2022/11/10 15:00
加载中...