MLE+WA100pts 求条

,

这里
借鉴了题解(没错只是借鉴)
样例过不了
求条
(上面是我之前写的矩阵类,不用管它)

#define Code using
#define by namespace
#define stringdp100005 std
#include<bits/stdc++.h>
#define int long long
Code by stringdp100005;
const int mod=1e9+7,modd=1e9+6;
class Matrix{
	private:
		int row,col;
		int **val;
	public:
		Matrix(int x,int y){
			row=x,col=y;
			val=new int*[row];
			for(int i=0;i<row;i++)
				val[i]=new int[col];
		}
		void clear(){
			for(int i=0;i<row;i++){
				for(int j=0;j<col;j++){
					val[i][j]=0;
				}
			}
		}
		void setIdentity(){
			if(row!=col){
				cerr<<"[Error]The rows and columns of this matrix are not equal";
				return ;
			}
			clear();
			for(int i=0;i<row;i++){
				val[i][i]=1;
			}
		}
		int getVal(int x,int y){
			return val[x][y];
		}
		void changeVal(int x,int y,int v){
			val[x][y]=v;
		}
		istream& inputVal(istream& in,int x,int y){
			in>>val[x][y];
			return in;
		}
		friend Matrix operator +(Matrix n,Matrix m){
			if(n.row!=m.row||n.col!=m.col){
				cerr<<"[Error]The rows and columns of these two matrixes are not equal.";
			}
			Matrix res=Matrix(n.row,n.col);
			for(int i=0;i<res.row;i++){
				for(int j=0;j<res.col;j++){
					res.val[i][j]=n.val[i][j]+m.val[i][j];
				}
			}
			return res;
		}
		friend Matrix plusMod(Matrix n,Matrix m){
			if(n.row!=m.row||n.col!=m.col){
				cerr<<"[Error]The rows and columns of these two matrixes are not equal.";
			}
			Matrix res=Matrix(n.row,n.col);
			for(int i=0;i<res.row;i++){
				for(int j=0;j<res.col;j++){
					res.val[i][j]=(n.val[i][j]+m.val[i][j])%mod;
				}
			}
			return res;			
		}
		friend Matrix operator *(int n,Matrix m){
			Matrix res=Matrix(m.row,m.col);
			for(int i=0;i<res.row;i++){
				for(int j=0;j<res.col;j++){
					res.val[i][j]=n*m.val[i][j];
				}
			}
			return res;
		}
		friend Matrix numMod(int n,Matrix m){
			Matrix res=Matrix(m.row,m.col);
			for(int i=0;i<res.row;i++){
				for(int j=0;j<res.col;j++){
					res.val[i][j]=n*m.val[i][j]%mod;
				}
			}
			return res;
		}
		friend Matrix operator *(Matrix n,Matrix m){
			if(n.col!=m.row){
				cerr<<"[Error]The columns of the matrix N are not equal to the rows of the matrix M.";
			}
			Matrix res=Matrix(n.row,m.col);
			res.clear();
			for(int i=0;i<n.row;i++){
				for(int j=0;j<m.col;j++){
					for(int k=0;k<n.col;k++){
						res.val[i][j]+=n.val[i][k]*m.val[k][j];
					}
				}
			}
			return res;
		}
		friend Matrix mulMod(Matrix n,Matrix m){
			if(n.col!=m.row){
				cerr<<"[Error]The columns of the matrix N are not equal to the rows of the matrix M.";
			}
			Matrix res=Matrix(n.row,m.col);
			res.clear();
			for(int i=0;i<n.row;i++){
				for(int j=0;j<m.col;j++){
					for(int k=0;k<n.col;k++){
						res.val[i][j]=(res.val[i][j]+n.val[i][k]*m.val[k][j]%mod)%mod;
					}
				}
			}
			return res;
		}
		friend Matrix operator ^(Matrix n,int m){
			Matrix res=Matrix(n.row,n.row);
			res.setIdentity();
			while(m){
				if(m&1) res=res*n;
				n=n*n;
				m>>=1;
			}
			return res;
		}
		friend Matrix powMod(Matrix n,int m){
			Matrix res=Matrix(n.row,n.row);
			res.setIdentity();
			while(m){
				if(m&1) res=mulMod(res,n);
				n=mulMod(n,n);
				m>>=1;
			}
			return res;
		}
		friend istream& operator >>(istream& in,Matrix m){
			for(int i=0;i<m.row;i++){
				for(int j=0;j<m.col;j++){
					in>>m.val[i][j];
				}
			}
			return in;
		}
		friend ostream& operator <<(ostream& out,Matrix m){
			for(int i=0;i<m.row;i++){
				for(int j=0;j<m.col;j++){
					out<<m.val[i][j]<<" ";
				}
				out<<endl;
			}
			return out;
		}
};
Matrix ANS1(2,2),ANS2(2,2);
int n,m,a,b,c,d;
string sn,sm;
void init(){
	ANS1.clear(),ANS2.clear();
	ANS1.changeVal(0,0,a),ANS1.changeVal(1,0,b),ANS1.changeVal(1,1,1);
	ANS2.changeVal(0,0,c),ANS2.changeVal(1,0,d),ANS2.changeVal(1,1,1);
}
signed main(){
	cin>>sn>>sm>>a>>b>>c>>d;
	int lenn=sn.size(),lenm=sm.size();
	for(int i=0;i<lenn;i++){
		if(a==1) n=(n*10+sn[i]-'0')%mod;
		else n=(n*10+sn[i]-'0')%modd;
	}
	for(int i=0;i<lenm;i++){
		if(c==1) m=(m*10+sm[i]-'0')%mod;
		else m=(m*10+sm[i]-'0')%modd;
	}
	init();
	ANS1=mulMod(powMod(mulMod(powMod(ANS1,m-1),ANS2),n-1),powMod(ANS1,m-1));
	cout<<(ANS1.getVal(0,0)+ANS1.getVal(1,0))%mod;
	return 0;
}

我就搞不懂 O(1) 的空间复杂度为什么会 MLE,难道是因为 string

满分多少?
(怀疑你在玩我

记录详情 - 洛谷 | 计算机科学教育新生态

你觉得我敢发 AC 代码?

题解不会被 hack 了吧,我不想写高精啊