我就是个屑 这点小问题都要求助 样例都过了却还是全WA
#include <bits/stdc++.h>
using namespace std;
struct matrix
{
int n;
int m;
int z[101][101];
matrix()
{
n=0;
m=0;
memset(z,0,sizeof(z));
}
};
matrix operator*(const matrix &m1,const matrix &m2)
{
matrix m3;
m3.n=m1.n;
m3.m=m2.m;
for (int i = 1; i <= m3.n; i++)
for (int j = 1; j <= m3.m; j++)
for (int k = 1; k <= m1.m; k++)
{
m3.z[i][j]+=(m1.z[i][k]*m2.z[k][j])%int(1e9+7);
m3.z[i][j]%=int(1e9+7);
}
return m3;
}
int main()
{
int k;
cin>>k;
while(k)
{
matrix m1,m2,m3;
long long n;
cin>>n;
if (n<=1)
{
printf("%d\n",n);
goto label;
}
m1.n=1;
m1.m=3;
m1.z[1][1]=1;m1.z[1][2]=1;m1.z[1][3]=1;
m2.n=3;m2.m=3;
m2.z[1][1]=0;m2.z[1][2]=0;m2.z[1][3]=1;
m2.z[2][1]=1;m2.z[2][2]=0;m2.z[2][3]=0;
m2.z[3][1]=0;m2.z[3][2]=1;m2.z[3][3]=1;
n--;
while(n)
{
if(n&1) m1=m1*m2;
m2=m2*m2;
n>>=1;
}
//m2=pow_mod(m2,n-1);
//m3=m1*m2;
printf("%d\n",m1.z[1][1]%int(1e9+7));
label:
k--;
}
return 0;
}