• BZOJ3583 : 杰杰的女性朋友


    将$I$转置,设$G=OI$,则$ans=G^0+G^1+...+G^d$。

    注意到$G^d=O(IO)^{d-1}I$,而$IO$是大小为$k imes k$的矩阵,可以通过倍增在$O(k^3log d)$的时间内求出,然后依次与$O$和$I$的一行一列相乘即可。

    时间复杂度$O(nk^2+mk^3log 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[N][K],I[N][K],f[N];
    int S[K][K],G[K][K],A[L][K][K],B[L][K][K],C[K][K];
    inline void up(int&a,int b){a+=b;if(a>=P)a-=P;}
    inline void mul(int A[][K],int B[][K]){
      int i,j,k;
      for(i=0;i<m;i++)for(j=0;j<m;j++){
        int t=0;
        for(k=0;k<m;k++)t=(1LL*A[i][k]*B[k][j]+t)%P;
        C[i][j]=t;
      }
    }
    void cal(int n){
      for(i=0;i<m;i++)for(j=0;j<m;j++)S[i][j]=0;
      if(n<0)return;
      for(i=0;i<m;i++)for(j=0;j<m;j++)G[i][j]=0;
      for(i=0;i<m;i++)S[i][i]=G[i][i]=1;
      for(i=0;i<L;i++)if(n>>i&1){
        for(mul(B[i],G),j=0;j<m;j++)for(k=0;k<m;k++)up(S[j][k],C[j][k]);
        for(mul(G,A[i]),j=0;j<m;j++)for(k=0;k<m;k++)G[j][k]=C[j][k];
      }
    }
    int main(){
      for(scanf("%d%d",&n,&m);i<n;i++){
        for(j=0;j<m;j++)scanf("%d",&O[i][j]);
        for(j=0;j<m;j++)scanf("%d",&I[i][j]);
      }
      for(k=0;k<n;k++)for(i=0;i<m;i++)for(j=0;j<m;j++)A[0][i][j]=(1LL*I[k][i]*O[k][j]+A[0][i][j])%P;
      for(i=0;i<m;i++)for(j=0;j<m;j++)B[0][i][j]=A[0][i][j];
      for(i=0;i<L-1;i++){
        for(mul(A[i],A[i]),j=0;j<m;j++)for(k=0;k<m;k++)A[i+1][j][k]=C[j][k];
        for(j=0;j<m;j++)up(A[i][j][j],1);
        for(mul(B[i],A[i]),j=0;j<m;j++)for(k=0;k<m;k++)B[i+1][j][k]=C[j][k];
        for(j=0;j<m;j++)up(A[i][j][j],P-1);
      }
      scanf("%d",&q);
      while(q--){
        scanf("%d%d%d",&x,&y,&z);x--;y--;
        cal(z-1);
        for(i=0;i<m;i++)for(f[i]=j=0;j<m;j++)f[i]=(1LL*O[x][j]*S[j][i]+f[i])%P;
        for(ans=i=0;i<m;i++)ans=(1LL*f[i]*I[y][i]+ans)%P;
        printf("%d
    ",(ans+(x==y))%P);
      }
      return 0;
    }
    

      

  • 相关阅读:
    MVC之Ajax异步操作
    MVCHtmlHelper使用
    Xamarin.Forms初始
    .NET CORE2.0后台管理系统(一)配置API
    DDD领域驱动之干货(四)补充篇!
    基于官方驱动封装mongodb
    webApi签名验证
    在.Net下使用redis基于StackExchange.Redis
    DDD领域驱动之干货(三)完结篇!
    DDD领域驱动之干货(二)
  • 原文地址:https://www.cnblogs.com/clrs97/p/5223984.html
Copyright © 2020-2023  润新知