80分!!!
查看原帖
80分!!!
550317
TainityAnle楼主2021/12/19 21:37

#2 WA,#10 TLE 求助!!;

#include<iostream>
#include<cstring>
using namespace std;
const int m=1000000007;
struct asd{
	long long u[4][4];
}e,f;
long long n;
asd che(asd a,asd b,int n){
	asd ans;
	memset(ans.u,0,sizeof(ans.u));
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			for(int k=1;k<=n;k++){
				ans.u[i][j]=((ans.u[i][j]%m)+((a.u[i][k]%m)*(b.u[k][j]%m)))%m;
			}
		}
	}
	return ans;
}
asd mi(asd a,int n){
	asd ans=e;
	while(n){
		if(n&1)
			ans=che(ans,a,2);
		a=che(a,a,2);
		n>>=1;
	}
	return ans;
}
int main(){
	cin>>n;
	e.u[1][1]=e.u[2][2]=1;e.u[1][2]=e.u[2][1]=0;
	f.u[1][1]=0;f.u[1][2]=f.u[2][1]=f.u[2][2]=1;
	asd ans=mi(f,n-1);
	cout<<ans.u[2][2]%m;
	return 0;
}
2021/12/19 21:37
加载中...