将$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[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\n",(ans+(x==y))%P);}return 0;
}

  

BZOJ3583 : 杰杰的女性朋友相关推荐

  1. [BZOJ3583]杰杰的女性朋友(矩阵快速幂)

    杰杰的女性朋友 时间限制:10s      空间限制:256MB 题目描述 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几 ...

  2. Bzoj3583 杰杰的女性朋友

    Time Limit: 10 Sec  Memory Limit: 256 MB Submit: 190  Solved: 98 Description 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的 ...

  3. 刷题集--杰杰的女性朋友

    题意:杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几年时间,就已经成为世界公认的实力最强的魔法选手之一.更让人惊叹的是,他 ...

  4. jzoj3545. 【清华集训2014】杰杰的女性朋友

    Description 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几年时间,就已经成为世界公认的实力最强的魔法选手之一. ...

  5. 欢迎进入杰杰的博客导航一站式搜索(所有博客的汇总帖)

    网络的好朋友,你好,我是杰杰!如果我的博客有什么不足的地方,欢迎向我反馈:如果我的博客对你有帮助,那是我的荣幸!如果觉得文章很好,欢迎动动小手指,点个赞或者转发 -----杰杰. 欢迎关注我个人微信公 ...

  6. 为什么女性朋友容易患上拇外翻?

    在生活中,我们常常可以看到不少女性朋友受到拇外翻的困扰.很多女性都是由于长期穿高跟鞋最终导致患上拇外翻的发生,患上拇外翻多数都是女性,这种疾病不仅影响美观,对健康也会产生严重的影响.那么为什么女性朋友 ...

  7. 适合给女性朋友过生日时发的祝福短信

    朋友生日的日子你还记得吗?在自己的朋友生日到来的时候我们需要送上祝福,送上生日祝福能够让朋友充满幸福感.怎么写给朋友的生日祝福语呢?欢迎大家阅读小编为大家收集整理的<给女性朋友的生日祝福短信&g ...

  8. Seeker的奇妙求职冒险(杰杰的字节笔试)

    替换后的最长重复字符 力扣原题424:https://leetcode-cn.com/problems/longest-repeating-character-replacement/ 题目大意: 给 ...

  9. 杰杰带你解读【机智云】环形缓冲区源码

    前言 大家晚上好,我是杰杰,上个星期,研究了一下机智云的源码,也不能说是研究吧,就是看了看,人家既然能拿来做商业用,还是有很厉害的地方的,如果还不知道什么叫环形缓冲区(环形队列)的同学,请看--STM ...

  10. 【马春杰杰】使用FPGA实现任意分频、二分频

    博客已迁至[马春杰杰]http://www.machunjie.com/hardware/82.html 请移步新博客,谢谢.!

最新文章

  1. java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware
  2. Elasticsearch 的一些关键概念
  3. c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc
  4. 周华健,歌声伴我成长(三)
  5. RAID-4与模2和
  6. 全网首发:LINUX上编译ARM(AARCH)版本的OpenJDK8
  7. linkedin爬虫_这些框架帮助LinkedIn大规模构建了机器学习
  8. Python基本图形绘制:turtle库
  9. JVM(四)—一道面试题搞懂JVM类加载机制
  10. 快速排序(快排)——C语言实现
  11. HCIP-Routing Switching V2.5考试大纲
  12. viterbi算法词性标注_使用Viterbi算法深入研究词性标记
  13. 西瓜怎么切才能方便去掉西瓜籽
  14. (10.1.4) Material Design设计规范
  15. 某人力资源Saas软件公司面试经历
  16. 刘强东的“强式”回归
  17. Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法
  18. 变量的作用域和生命周期
  19. java计算机毕业设计共享汽车管理系统源码+mysql数据库+系统+lw文档+部署
  20. 高级商业数字营销师题库

热门文章

  1. 20210416 东南大学校庆论文格式 笔记
  2. 利用SLM+可调液晶光栅,北航大尺寸全息3D显示系统解析
  3. Blender——苹果的建模
  4. pixar动画短片集
  5. Typora 一款优秀的markdown编辑软件
  6. 会声会影教你如何使用运动追踪
  7. 利用VS2019:基于MFC对话框编写多功能计算器:0基础教程(应该是CSDN中代码最全的教程了)
  8. php调用jssdk转发_微信分享调用jssdk实例
  9. 分享5个免费的Python学习网站,新手小白赶紧收藏起来吧!
  10. 信息学奥赛一本通:2069:【例2.12 】糖果游戏