80pts求调
查看原帖
80pts求调
580202
Siegerkranz_2735楼主2023/2/1 09:16

WA on #2 #10

#include<bits/stdc++.h>
#define rep(i,x,y) for(int i=x;i<=y;++i)
using namespace std;
const int maxn=5,mod=1e9+7;
struct M{
	int n,m,a[maxn][maxn];
	M(){memset(a,0,sizeof a);} 
}A,B,C,D,E;
M operator*(M &x,M &y){
	M ans;ans.n=x.n;ans.m=y.m;
	rep(i,1,ans.n)rep(j,1,ans.m)rep(k,1,x.m) ans.a[i][j]=(ans.a[i][j]+1ll*x.a[i][k]*y.a[k][j])%mod;
	return ans;
}
M ksm(M &x,int y){
	if(y==0) return B;
	C=ksm(x,y/2);C=C*C;
	return y&1?C*x:C;
}
int main(){
	A.n=A.m=2;
	A.a[1][1]=A.a[1][2]=A.a[2][1]=1;
	B.n=B.m=2;
	B.a[1][1]=B.a[2][2]=1;
	E.n=2,E.m=1;
	E.a[1][1]=E.a[2][1]=1;
	int n;
	cin>>n;
	if(n<=2)cout<<1,exit(0);
	D=ksm(A,n-2);
	D=D*E;
	cout<<D.a[1][1];
	return 0; 
}
2023/2/1 09:16
加载中...