#10后面的点都T了!!!
查看原帖
#10后面的点都T了!!!
1015323
封禁用户楼主2023/6/5 18:25

有没有大佬帮忙优化一下qwq

#include<bits/stdc++.h>
using namespace std;
const int mod=1e9; 
long long n;
struct jz{
	long long z[17][17];
	void to_0(){
		memset(z,0,sizeof(z));
	}
	void a_cs(){
		z[1][1]=24;
        z[1][2]=480;
        z[1][3]=7680;
        z[1][4]=107520;
	}
	void b_cs(){
		z[2][1]=1;
		z[3][2]=1;
		z[4][3]=1;
		z[1][4]=1536;
		z[2][4]=mod-320;
		z[3][4]=mod-80;
		z[4][4]=20;
	}
};
jz mul(jz a,jz b){
	jz ans;
	ans.to_0();
	for(int i=1;i<=4;i++){
		for(int j=1;j<=4;j++){
			for(int k=1;k<=4;k++){
				ans.z[i][k]=(ans.z[i][k]+a.z[i][j]*b.z[j][k])%mod;
			}
		}
	}
	return ans;
}
jz ksm(jz a,long long k){
	jz ans;
	ans.to_0();
	for(int i=1;i<=4;i++)ans.z[i][i]=1;
	while(k){
		if(k%2)ans=mul(ans,a);
		k/=2;a=mul(a,a);
	}
	return ans;
}
int main(){
	while(scanf("%lld",&n)!=EOF&&n){
		if(n<4){
			printf("0\n");
			continue;
		}
		jz a,b;
		a.to_0();b.to_0();
		a.a_cs();b.b_cs();
		a=mul(a,ksm(b,n-4));
       
		printf("%lld\n",a.z[1][1]%mod);
    }
}
2023/6/5 18:25
加载中...