大佬求调,程序主动爆栈
查看原帖
大佬求调,程序主动爆栈
1094441
封禁用户楼主2024/1/21 19:56
#include <iostream>
#define MAXN 1005
#define int long long
#define init int
#define MOD 1000000007
using namespace std;

int n , k;

struct matr
{	
	long long N , K;
	int a[MAXN][MAXN];
	void clear()
	{
		for(int i = 1;i <= N;++ i)
		{
			for(int j = 1;j <= N;++ j)
			{
				a[i][j] = 0;
			}
		}
	}
	void m_in()
	{
		for(int i = 1;i <= N;++ i)
		{
			for(int j = 1;j <= N;j ++)
			{
				cin >> a[i][j];
			}
		}
	} 
	void m_out()
	{
		for(int i = 1;i <= N;++ i)
		{
			for(int j = 1;j <= N;++ j)
			{
				cout << a[i][j] << " ";
			}
			cout << endl;
		}
	}
}answer;

matr operator * (matr A,matr X)
{
	matr ans = A;
	for (int i = 1;i <= X.N;++ i)
	{
		for (int l = 1;l <= X.N;++ l)
		{
			int t = A.a[i][l];
			for (int j = 1;j <= X.N;++ j)
			{
				ans.a[i][j] += (t * ans.a[l][j]) % MOD;
				ans.a[i][j] %= MOD;
			}
		}
	}
	return ans;
}

matr operator + (matr A,matr X)
{
	matr ans = A;
	for (int i = 1;i <= X.N;++ i)
	{
		for (int j = 1;j <= X.N;++ j)
		{
			ans.a[i][j] = (ans.a[i][j] + X.a[i][j]) % MOD;
		}
	}
	return ans;
}

void fastPower()
{
	matr ans = answer;
	ans.clear();
	for (int i = 1; i <= ans.N; ++ i)
		ans.a[i][i] = 1;
	do
	{
		if (answer.K & 1)
			ans = ans * answer;
		answer = answer * answer;
		answer.K >>= 1;  
	}while (answer.K)
	ans.m_out();
}

unsigned main()
{
	matr lyy;
	cin >> lyy.N >> lyy.K;
	lyy.m_in(); 
	fastPower();
	return 0;
}
2024/1/21 19:56
加载中...