矩阵模板,蒟蒻求助,TLE0pts
查看原帖
矩阵模板,蒟蒻求助,TLE0pts
784117
chentianyi0109楼主2023/9/24 23:12
#include<bits/stdc++.h>
#define int long long  
using namespace std;
const int mod = 1e9 + 7;
struct mat {
	int a[5][5];
	mat () {memset (a, 0, sizeof(a));}
	mat operator * (const mat &B) const {
		mat C;
		for (int i = 1; i <= 3; i ++) {
			for (int j = 1; j <= 3; j ++) {
				for (int k = 1; k <= 3; k ++) {
					C.a[i][j] = (C.a[i][j] + a[i][k] * B.a[k][j]) % mod;
					C.a[i][j] %= mod;
				}
			}
		}
		return C;
	}
}ans, base;
void init () {
	memset (base.a, 0, sizeof (base.a));
	memset (ans.a, 0, sizeof (ans.a));
	base.a[2][1] = base.a[1][3] = base.a[3][2] = base.a[3][3] = 1;
	ans.a[1][1] = ans.a[1][2] = ans.a[1][3] = 1;
}
int qpow (int b) {
	while (b) {
		if (b & 1) ans = ans * base;
		base = base * base;
		b >>= 1; 
	}
}
signed main () {
	ios :: sync_with_stdio (false);
	cin.tie(0);
	cout.tie(0);
	int T;
	cin >> T;
	while (T--) {
		int n;
		cin >> n;
		if (n <= 3) {
			cout << 1 << endl;
			continue;
		} 
		init ();
		qpow (n - 3);
		cout << (ans.a[1][3] + ans.a[2][3] + ans.a[3][3]) % mod << endl;
	}
} 
/*
a[i-3] a[i-2] a[i-1] 
0 0 1
1 0 0
0 1 1
a[i-2] a[i-1] a[i] 
*/

RT,样例都过了

2023/9/24 23:12
加载中...