两个样例都没过却A了,qz
查看原帖
两个样例都没过却A了,qz
577241
违规用户名577241楼主2024/7/21 22:00
#include <bits/stdc++.h>
#define MAXN 3
const int mod = 1000000007;
using namespace std;
long long n, L = 2;
struct Matrix {
	long long M[MAXN][MAXN];
	void clear() {
		memset(M, 0, sizeof(M));
	}
	Matrix friend operator *(const Matrix &A, const Matrix &B) {
		Matrix Ans;
		Ans.clear();
		for (int i = 0; i < L; i++) 
			for (int j = 0; j < L; j++)
				for (int k = 0; k < L; k++)
					Ans.M[i][j] = (Ans.M[i][j] + A.M[i][k] * B.M[k][j]) % mod;
		return Ans;
	}
} A;
Matrix expow(Matrix T, long long P) {
	Matrix Ans;
	Ans.M[0][0] = Ans.M[1][1] = 1;
	while (P) {
		if (P & 1)
			Ans = Ans * T;
		T = T * T;
		P >>= 1;
	}
	return Ans;
}
int main() {
	cin >> n;
	if (n <= 2) {
		cout << 1; return 0;
	}
	A.M[0][0] = 1; A.M[0][1] = 1; 
	A.M[1][0] = 1; A.M[1][1] = 0; 
	A = expow(A, n - 2);
	cout << (A.M[0][0] + A.M[0][1]) % mod;
	return 0;
}

评测记录

2024/7/21 22:00
加载中...