我寻思这也没问题啊 (样例过了全WA的屑)
查看原帖
我寻思这也没问题啊 (样例过了全WA的屑)
370001
Belmaxi楼主2020/11/5 09:45

我就是个屑 这点小问题都要求助 样例都过了却还是全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;
}
2020/11/5 09:45
加载中...