BZOJ3583 : 杰杰的女性朋友
将$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 : 杰杰的女性朋友相关推荐
- [BZOJ3583]杰杰的女性朋友(矩阵快速幂)
杰杰的女性朋友 时间限制:10s 空间限制:256MB 题目描述 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几 ...
- Bzoj3583 杰杰的女性朋友
Time Limit: 10 Sec Memory Limit: 256 MB Submit: 190 Solved: 98 Description 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的 ...
- 刷题集--杰杰的女性朋友
题意:杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几年时间,就已经成为世界公认的实力最强的魔法选手之一.更让人惊叹的是,他 ...
- jzoj3545. 【清华集训2014】杰杰的女性朋友
Description 杰杰是魔法界的一名传奇人物.他对魔法具有深刻的洞察力,惊人的领悟力,以及令人叹为观止的创造力.自从他从事魔法竞赛以来,短短几年时间,就已经成为世界公认的实力最强的魔法选手之一. ...
- 欢迎进入杰杰的博客导航一站式搜索(所有博客的汇总帖)
网络的好朋友,你好,我是杰杰!如果我的博客有什么不足的地方,欢迎向我反馈:如果我的博客对你有帮助,那是我的荣幸!如果觉得文章很好,欢迎动动小手指,点个赞或者转发 -----杰杰. 欢迎关注我个人微信公 ...
- 为什么女性朋友容易患上拇外翻?
在生活中,我们常常可以看到不少女性朋友受到拇外翻的困扰.很多女性都是由于长期穿高跟鞋最终导致患上拇外翻的发生,患上拇外翻多数都是女性,这种疾病不仅影响美观,对健康也会产生严重的影响.那么为什么女性朋友 ...
- 适合给女性朋友过生日时发的祝福短信
朋友生日的日子你还记得吗?在自己的朋友生日到来的时候我们需要送上祝福,送上生日祝福能够让朋友充满幸福感.怎么写给朋友的生日祝福语呢?欢迎大家阅读小编为大家收集整理的<给女性朋友的生日祝福短信&g ...
- Seeker的奇妙求职冒险(杰杰的字节笔试)
替换后的最长重复字符 力扣原题424:https://leetcode-cn.com/problems/longest-repeating-character-replacement/ 题目大意: 给 ...
- 杰杰带你解读【机智云】环形缓冲区源码
前言 大家晚上好,我是杰杰,上个星期,研究了一下机智云的源码,也不能说是研究吧,就是看了看,人家既然能拿来做商业用,还是有很厉害的地方的,如果还不知道什么叫环形缓冲区(环形队列)的同学,请看--STM ...
- 【马春杰杰】使用FPGA实现任意分频、二分频
博客已迁至[马春杰杰]http://www.machunjie.com/hardware/82.html 请移步新博客,谢谢.!
最新文章
- java.lang.NoClassDefFoundError: org/springframework/context/ApplicationContextAware
- Elasticsearch 的一些关键概念
- c语言程序设计基础1千克,c语言学习知识编程经典编辑题汇总整编.doc
- 周华健,歌声伴我成长(三)
- RAID-4与模2和
- 全网首发:LINUX上编译ARM(AARCH)版本的OpenJDK8
- linkedin爬虫_这些框架帮助LinkedIn大规模构建了机器学习
- Python基本图形绘制:turtle库
- JVM(四)—一道面试题搞懂JVM类加载机制
- 快速排序(快排)——C语言实现
- HCIP-Routing Switching V2.5考试大纲
- viterbi算法词性标注_使用Viterbi算法深入研究词性标记
- 西瓜怎么切才能方便去掉西瓜籽
- (10.1.4) Material Design设计规范
- 某人力资源Saas软件公司面试经历
- 刘强东的“强式”回归
- Linux系统安装驱动过程中ko文件加载错误(Required key not available)的解决办法
- 变量的作用域和生命周期
- java计算机毕业设计共享汽车管理系统源码+mysql数据库+系统+lw文档+部署
- 高级商业数字营销师题库