求助,矩阵快速幂,玄关
  • 板块灌水区
  • 楼主封禁用户
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/1/25 21:29
  • 上次更新2024/1/25 21:39:17
查看原帖
求助,矩阵快速幂,玄关
750292
封禁用户楼主2024/1/25 21:29

P1939 代码如下

#include<bits/stdc++.h>
using namespace std;
const int mo=100000007;
int t;
struct matrix{
	long long a[4][4];
	matrix(){
		memset(a,0,sizeof(a));
	}
};
matrix shulie;
matrix juzhen;
matrix operator*(matrix A,matrix B){
	matrix 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]+=(A.a[i][k]*B.a[k][j])%mo;
				C.a[i][j]%=mo;
			}
		}
	}
	return C;
}
inline void fuzhi(){
	shulie.a[1][1]=shulie.a[1][2]=shulie.a[1][3]=1;
	juzhen.a[1][1]=juzhen.a[1][2]=juzhen.a[2][3]=juzhen.a[3][1]=1;
}
inline void binpow(int b){
	while(b>0){
		if(b&1)shulie=shulie*juzhen;
		juzhen=juzhen*juzhen;
		b>>=1;
	}
}
int main(){
	cin>>t;
	for(int i=1;i<=t;i++){
		int n;
		cin>>n;
		if(n<=3) printf("1\n");
		else{
			fuzhi();
			binpow(n-3);
			printf("%lld\n",shulie.a[1][1]%mo);
		}
	}
	return 0;
}

检查不出哪里有误,请各位大佬帮忙看下

2024/1/25 21:29
加载中...