这题不能直接按常规做啊,因为数组根本就开不下,转换思维A(B*A)^(n*n-1)B

这样的话数组B*A就是10*10了,然后快速幂就行了

刚开始数组都开小了,tle,还找了半天bug。。。还有就是定义三个struct真累。。。

#include<map>
#include<set>
#include<cmath>
#include<queue>
#include<stack>
#include<vector>
#include<cstdio>
#include<iomanip>
#include<cstdlib>
#include<cstring>
#include<iostream>
#include<algorithm>
#define pi acos(-1)
#define ll long long
#define mod 1000000007
#define ls l,m,rt<<1
#define rs m+1,r,rt<<1|1
#pragma comment(linker, "/STACK:1024000000,1024000000") using namespace std; const double g=10.0,eps=1e-;
const int N=+,maxn=<<+,inf=0x3f3f3f3f; struct NodeA{
ll row,col;
ll a[N][];
};
struct NodeB{
ll row,col;
ll a[][N];
};
struct Node{
ll row,col;
ll a[][];
};
Node mul(Node x,Node y)
{
Node ans;
ans.row=x.row,ans.col=y.col;
memset(ans.a,,sizeof ans.a);
for(ll i=;i<x.row;i++)
for(ll j=;j<x.col;j++)
for(ll k=;k<y.col;k++)
ans.a[i][k]=(ans.a[i][k]+x.a[i][j]*y.a[j][k])%;
return ans;
}
Node quick_mul(Node x,ll n)
{
Node ans;
ans.row=x.row,ans.col=x.col;
memset(ans.a,,sizeof ans.a);
for(ll i=;i<ans.col;i++)ans.a[i][i]=;
while(n){
if(n&)ans=mul(ans,x);
x=mul(x,x);
n>>=;
}
return ans;
}
int main()
{ ios::sync_with_stdio(false);
cin.tie();
// cout<<setiosflags(ios::fixed)<<setprecision(2);
ll n,m;
while(cin>>n>>m,n&&m){
NodeA A;
A.row=n,A.col=m;
for(ll i=;i<A.row;i++)
for(ll j=;j<A.col;j++)
cin>>A.a[i][j];
NodeB B;
B.row=m,B.col=n;
for(ll i=;i<B.row;i++)
for(ll j=;j<B.col;j++)
cin>>B.a[i][j];
Node C;
C.row=m,C.col=m;
memset(C.a,,sizeof C.a);
for(ll i=;i<B.row;i++)
for(ll j=;j<B.col;j++)
for(ll k=;k<A.col;k++)
C.a[i][k]=(C.a[i][k]+B.a[i][j]*A.a[j][k])%;
C=quick_mul(C,n*n-);
NodeA P;
P.row=n,P.col=m;
memset(P.a,,sizeof P.a);
for(ll i=;i<A.row;i++)
for(ll j=;j<A.col;j++)
for(ll k=;k<C.col;k++)
P.a[i][k]=(P.a[i][k]+A.a[i][j]*C.a[j][k])%;
ll ans=,s[N];
for(ll i=;i<P.row;i++)
{
memset(s,,sizeof s);
for(ll j=;j<P.col;j++)
for(ll k=;k<B.col;k++)
{
s[k]=(s[k]+P.a[i][j]*B.a[j][k])%;
if(j==P.col-)ans+=s[k];
}
}
cout<<ans<<endl;
}
return ;
}

hdu4965矩阵快速幂的更多相关文章

  1. hdu4965 Fast Matrix Calculation (矩阵快速幂 结合律

    http://acm.hdu.edu.cn/showproblem.php?pid=4965 2014 Multi-University Training Contest 9 1006 Fast Ma ...

  2. hdu4965 Fast Matrix Calculation 矩阵快速幂

    One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learni ...

  3. 矩阵快速幂 HDU 4565 So Easy!(简单?才怪!)

    题目链接 题意: 思路: 直接拿别人的图,自己写太麻烦了~ 然后就可以用矩阵快速幂套模板求递推式啦~ 另外: 这题想不到或者不会矩阵快速幂,根本没法做,还是2013年长沙邀请赛水题,也是2008年Go ...

  4. 51nod 算法马拉松18 B 非010串 矩阵快速幂

    非010串 基准时间限制:1 秒 空间限制:131072 KB 分值: 80 如果一个01字符串满足不存在010这样的子串,那么称它为非010串. 求长度为n的非010串的个数.(对1e9+7取模) ...

  5. 51nod 1113 矩阵快速幂

    题目链接:51nod 1113 矩阵快速幂 模板题,学习下. #include<cstdio> #include<cmath> #include<cstring> ...

  6. 【66测试20161115】【树】【DP_LIS】【SPFA】【同余最短路】【递推】【矩阵快速幂】

    还有3天,今天考试又崩了.状态还没有调整过来... 第一题:小L的二叉树 勤奋又善于思考的小L接触了信息学竞赛,开始的学习十分顺利.但是,小L对数据结构的掌握实在十分渣渣.所以,小L当时卡在了二叉树. ...

  7. HDU5950(矩阵快速幂)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5950 题意:f(n) = f(n-1) + 2*f(n-2) + n^4,f(1) = a , f(2 ...

  8. 51nod 1126 矩阵快速幂 水

    有一个序列是这样定义的:f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7. 给出A,B和N,求f(n)的值. Input 输 ...

  9. hdu2604(递推,矩阵快速幂)

    题目链接:hdu2604 这题重要的递推公式,找到公式就很easy了(这道题和hdu1757(题解)类似,只是这道题需要自己推公式) 可以直接找规律,推出递推公式,也有另一种找递推公式的方法:(PS: ...

随机推荐

  1. mysql-sql高级应用

    sql语言进阶 典型操作 order by - select * from play_list order by createtime; - select * from play_list order ...

  2. 精通linux设备驱动开发 笔记

      3.2.7 错误处理   #include <linux/err.h> char * collect_data(char *userbuffer) { char *buffer; /* ...

  3. Java的平台无关性如何体现出来的

    传统的编程中,源代码编译为可执行的代码后,只能针对特定的平台(操作系统),换句话说,针对Windows编写和编译的代码,只能在Windows上运行... java程序则编译为字节码.字节码本身不能运行 ...

  4. Linux环境下proc的配置c/c++操作数据库简单示例

    在虚拟机上装了oracle11g数据库,原本想利用c/c++学习操作数据库.结果感觉摊上了一个大坑.从安装好oracle数据库到配置好proc的编译选项整整花了二天.但让我意识到自己自己几点薄弱:1. ...

  5. python调用API

    相信做过自动化运维的同学都用过API接口来完成某些动作.API是一套成熟系统所必需的接口,可以被其他系统或脚本来调用,这也是自动化运维的必修课. 本文主要介绍Python中调用API的几种方式,下面是 ...

  6. spring自定义事务同步器(二):借助redisson实现自己的同步器

    1. 借助redis的java客户端redisson实现自己的事物同步器 @Override public void lockWithinCurrentTransaction(Object key) ...

  7. mysql 数据操作 多表查询 子查询 带比较运算符的子查询

    带比较运算符的子查询 #比较运算符:=.!=.>.>=.<.<=.<> #查询大于所有人平均年龄的员工名与年龄 思路 先拿到所有人的平均年龄然后 再用另外一条sql ...

  8. python os模块 os.chmod

    os.chmod() 方法用于更改文件或目录的权限. os.chmod(path, mode) 参数 path -- 文件名路径或目录路径. flags -- 可用以下选项按位或操作生成, 目录的读权 ...

  9. centos linux 系统日常管理4 scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法 第十七节课

    centos linux 系统日常管理4  scp,rsync,md5sum,sha1sum,strace ,find Rsync 常见错误及解决方法  第十七节课 rsync可以增量同步,scp不行 ...

  10. Hyperledger Fabric 开发环境搭建 centos7系统

    一.安装GO语言 下载最新版的go 打开Terminal,输入命令(以下命令都是以root管理员的角色进行的) su 输入密码:***** wget https://storage.googleapi ...