代码求调
查看原帖
代码求调
759976
wflhx2011楼主2024/3/6 22:30

样例没过

#include<bits/stdc++.h>
using namespace std;
const int mod=1000000007;
int n;
struct nod
{
	long long bp[4][4],op[4][4];
	inline void build()
	{
		memset(bp,0,sizeof(bp));
		for(int i=1;i<=3;i++)
			bp[i][i]=1;
	}
}qa,ans;
nod operator *(const nod &a,const nod &b)
{
	nod res;
	for(int k=1;k<=3;k++)
		for(int i=1;i<=3;i++)
			for(int j=1;j<=3;j++)
				res.bp[i][j]=(res.bp[i][j]+a.bp[i][k]%mod*b.op[k][j]%mod)%mod;
	return res;
}
nod ksm(nod w,long long k)
{
	while(k)
	{
		if(k&1)
			ans=ans*w;
		w=w*w;
		k>>=1;
	}
	return ans;
}
int main()
{
 	int t;
	cin>>t;
	while(t--)
	{
		qa.op[1][1]=qa.op[1][3]=qa.op[2][1]=qa.op[3][2]=1;
		memset(ans.bp,0,sizeof(ans.bp));
		ans.build();
		cin>>n;
		if(n<=3)
		{
			cout<<1<<endl;
			continue;
		}
		ans=ksm(qa,n);
//		for(int i=1;i<=3;i++)
//			for(int j=1;j<=n;j++)
//				cout<<ans.bp[i][j]<<endl;
		cout<<ans.bp[2][1]<<endl;
	 } 
	return 0;
}
2024/3/6 22:30
加载中...