将$I$转置,设$G=OI$,则$ans=G^0+G^1+...+G^d$. 注意到$G^d=O(IO)^{d-1}I$,而$IO$是大小为$k\times k$的矩阵,可以通过倍增在$O(k^3\log d)$的时间内求出,然后依次与$O$和$I$的一行一列相乘即可. 时间复杂度$O(nk^2+mk^3\log d)$. #include<cstdio> const int N=1000,K=20,L=31,P=1000000007; int n,m,q,i,j,k,x,y,z,ans,O[…