Why Wa on #1
查看原帖
Why Wa on #1
1162628
Lanpinye_Only楼主2024/8/1 11:23
#include<bits/stdc++.h>
#define ll unsigned long long
const ll mod=1e9+7;
using namespace std;
struct Matrix{
	ll p[3][3];
	inline void clear(){
		for(int i=1;i<=2;i++){
			for(int j=1;j<=2;j++){
				p[i][j]=0;
			}
		}
	}
	inline void init(){
		clear();
		for(int i=1;i<=2;i++){
			p[i][i]=1;
		}
	}
}base,ans,mul;
Matrix operator*(Matrix &a,Matrix &b){
	Matrix ans;
	ans.clear();
	for(int i=1;i<=2;i++){
		for(int j=1;j<=2;j++){
			for(int k=1;k<=2;k++){
				ans.p[i][j]+=a.p[i][k]*b.p[k][j]%mod;
				ans.p[i][j]%=mod;
			}
		}
	}
	return ans;
}
ll n;
inline ll read(){
	ll x=0;
	bool f=0;
	char c=getchar();
	while(!isdigit(c)){if(c=='-')f=1;c=getchar();}
	while(isdigit(c))x=(x<<3)+(x<<1)+(c^48),c=getchar();
	return f?-x:x;
}
int main(){
	n=read();
	base.clear();
	mul.clear();
	ans.init();
	base.p[1][1]=base.p[2][1]=1;
	mul.p[1][1]=mul.p[1][2]=mul.p[2][1]=1;
	n-=2;
	while(n){
		if(n&1){
			ans=ans*mul;
		}
		mul=mul*mul;
		n>>=1;
	}
	ans=ans*base;
	cout<<ans.p[1][1]%mod;
}

求调

2024/8/1 11:23
加载中...