对O2优化的疑问
查看原帖
对O2优化的疑问
983702
lrj3247楼主2024/8/12 20:47

加了O2WA爆0,不加O2,AC了,求问为什么

#include <bits/stdc++.h>
using namespace std;
const int N=50;
int T,n;
const int MOD=1e9+7;
struct Mat{
	int x,y;
	long long a[N][N];
}ans,z;
Mat mul(Mat b1,Mat b2){
	int n=b1.x,m=b2.y;
	Mat ret;
	ret.x=n,ret.y=m;
	for(int i = 1 ; i<=n ; i++){
		for(int j = 1 ; j<=m ; j++){
			ret.a[i][j]=0;
			for(int k = 1 ; k<=b1.y ; k++){
				ret.a[i][j]+=b1.a[i][k]*b2.a[k][j];
				ret.a[i][j]%=MOD;
			}
		}
	}
	return ret;
}
int main(){
	cin>>T;
	while(T--){
		memset(z.a,0,sizeof(z.a));
		memset(ans.a,0,sizeof(ans));
		cin>>n;
		ans.x=3,ans.y=1,z.x=z.y=3;
		--n;
		z.a[1][1]=z.a[1][3]=z.a[2][1]=z.a[3][2]=1;
		for(int i = 1 ; i<=3 ; i++) ans.a[i][1]=1;
		while(n){
			if(n&1) ans=mul(ans,z);
			z=mul(z,z);
			n>>=1;
		}
		cout<<ans.a[3][1]<<endl;
	}
	return 0;
}
2024/8/12 20:47
加载中...