简单矩阵封装
const int sz=26;
struct mat{
ll m[sz+2][sz+2];
mat(){
memset(m,0,sizeof m);
rep(i,1,sz)m[i][i]=1;
}
mat friend operator*(const mat&a,const mat&b){
mat res;
rep(i,1,sz){
rep(j,1,sz){
rep(p,1,sz){
res.m[i][j] = (res.m[i][j]+a.m[i][p]*b.m[p][j])%mod;
}
}
}
return res;
}
mat friend operator+(const mat&a,const mat&b){
mat res;
rep(i,1,sz)rep(j,1,sz)res.m[i][j]=(a.m[i][j]+b.m[i][j]);
return res;
}
};
mat ksm(mat a,int b){
mat res;
while(b){
if(b&1)res=res*a;
a=a*a;
b>>=1;
}return res;
}

浙公网安备 33010602011771号