将$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. Redis监控技巧总结
  2. 长隆大马戏机器人_惊艳亮相广州长隆,智伴儿童机器人1X成行业焦点
  3. hdu 2026 首字母变大写
  4. mysql表数据提取工具,Jailer数据提取
  5. SQLSTATE[HY000]: General error: 1030 Got error 28 from storage engine
  6. ivona tts语音合成引擎_高端玩家!树莓派 + Node.js 实现语音机器人
  7. java中位运算传参_java基础之位运算讲解于实战
  8. Android service 和 client的进程通信和消息回调--AIDL
  9. 使用Rss框架PHP开发流程
  10. Vue el-input实现动态显示type为textarea的文字数量、剩余字数
  11. 如何在Android上创建透明活动?
  12. KVM详解(五)——KVM虚拟机镜像格式
  13. Think PHP(TP)框架基础知识
  14. ntko php,NTKO 附件管理控件_
  15. tif(tiff)图片格式批量转换JPG图片格式转换器
  16. 使用 OpenSSL 创建ssl证书
  17. 两直线平行交叉相乘_十字交叉法解析
  18. LAMP 技术简介(2)
  19. rabbitmq的web管理界面-密码管理
  20. 鸽巢原理(初识)(纯算法)

热门文章

  1. [C语言]使用指针将输入的多个字符串按大小升序排序
  2. 采购与供应链职业人的8大天敌,你占几个
  3. 生物信息学研究的问题1-转录组分析和调控网络
  4. java计算机毕业设计校园一卡通服务平台源码+mysql数据库+lw文档+系统+调试部署
  5. 使用CNN-XGboost模型进行恶意软件分类
  6. Linux安装JDK(全版本)
  7. Python小游戏:外星人入侵!!!终于完成了!!!
  8. 没有ADB Interface,只有感叹号HDB,如何安装Android Composite ADB Interface
  9. SQLServer时间相关 - SQL日期,时间比较
  10. 【JavaWeb开发】使用java实现简单的Excel文件的导入与导出(POI)