HDU_4965 Fast Matrix Calculation 2014多校9 矩阵快速幂+机智的矩阵结合律
一开始看这个题目以为是个裸的矩阵快速幂的题目,
后来发现会超时,超就超在 M = C^(N*N). 这个操作,而C本身是个N*N的矩阵,N最大为1000。
但是这里有个巧妙的地方就是 C的来源其实 是= A*B, A为一个N*k的矩阵,B为一个k*N的矩阵,k最大为10,突破的就在这里,矩阵的结合律要用起来
即我先不把A*B结合,我先把B*A结合,这样M不是要C^N*N吗,就先把里面N*N个(B*A)算出来,就10*10再乘以logN*N即可。最后再两端乘一下A和B即可
也挺机智的,我没想到结合律。
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#define LL __int64
using namespace std;
LL matA[1010][10],matB[10][1010];
LL matC[1010][10];
LL MM[1010][1010];
int n,k;
struct Mat
{
LL mat[10][10];
}E;
Mat operator *(Mat a,Mat b)
{
Mat c;
for (int i=0;i<k;i++)
for (int j=0;j<k;j++){
c.mat[i][j]=0;
for (int w=0;w<k;w++){
c.mat[i][j]+=a.mat[i][w]*b.mat[w][j];
c.mat[i][j]%=6;
}
}
return c;
}
Mat operator ^(Mat a,int x)
{
Mat c=E;
for (int i=x;i;i>>=1){
if (i&1){
c=c*a;
}
a=a*a;
}
return c;
}
int main()
{
memset(E.mat,0,sizeof E.mat);
for (int i=0;i<10;i++) E.mat[i][i]=1;
while (scanf("%d%d",&n,&k)!=EOF)
{
if (n==0 && k==0) break;
for (int i=0;i<n;i++)
for (int j=0;j<k;j++) scanf("%I64d",&matA[i][j]);
for (int i=0;i<k;i++)
for (int j=0;j<n;j++) scanf("%I64d",&matB[i][j]);
Mat a;
for (int i=0;i<k;i++)
for (int j=0;j<k;j++){
a.mat[i][j]=0;
for (int w=0;w<n;w++){
a.mat[i][j]+=matB[i][w]*matA[w][j];
}
//cout<<i<<" aaa "<<j<<" "<<a.mat[i][j]<<endl;
} Mat M=a^(n*n-1); for (int i=0;i<n;i++)
for (int j=0;j<k;j++){
matC[i][j]=0;
for (int w=0;w<k;w++)
matC[i][j]+=matA[i][w]*M.mat[w][j];
// cout<<matC[i][j]<<" Matc "<<endl;
}
int ans=0;
for (int i=0;i<n;i++)
for (int j=0;j<n;j++){
MM[i][j]=0;
for (int w=0;w<k;w++){
MM[i][j]+=matC[i][w]*matB[w][j];
}
// cout<<MM[i][j]<<" qwe "<<endl;
ans+=MM[i][j]%6;
}
printf("%d\n",ans);
}
return 0; }
HDU_4965 Fast Matrix Calculation 2014多校9 矩阵快速幂+机智的矩阵结合律的更多相关文章
- hdu4965 Fast Matrix Calculation (矩阵快速幂 结合律
http://acm.hdu.edu.cn/showproblem.php?pid=4965 2014 Multi-University Training Contest 9 1006 Fast Ma ...
- HDU4965 Fast Matrix Calculation —— 矩阵乘法、快速幂
题目链接:https://vjudge.net/problem/HDU-4965 Fast Matrix Calculation Time Limit: 2000/1000 MS (Java/Othe ...
- hdu 4965 Fast Matrix Calculation(矩阵高速幂)
题目链接.hdu 4965 Fast Matrix Calculation 题目大意:给定两个矩阵A,B,分别为N*K和K*N. 矩阵C = A*B 矩阵M=CN∗N 将矩阵M中的全部元素取模6,得到 ...
- HDU 4965 Fast Matrix Calculation(矩阵高速幂)
HDU 4965 Fast Matrix Calculation 题目链接 矩阵相乘为AxBxAxB...乘nn次.能够变成Ax(BxAxBxA...)xB,中间乘n n - 1次,这样中间的矩阵一个 ...
- Fast Matrix Calculation HDU - 4965
One day, Alice and Bob felt bored again, Bob knows Alice is a girl who loves math and is just learni ...
- 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 ...
- hdu 4965 Fast Matrix Calculation
题目链接:hdu 4965,题目大意:给你一个 n*k 的矩阵 A 和一个 k*n 的矩阵 B,定义矩阵 C= A*B,然后矩阵 M= C^(n*n),矩阵中一切元素皆 mod 6,最后求出 M 中所 ...
- HDU - 4965 Fast Matrix Calculation 【矩阵快速幂】
题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=4965 题意 给出两个矩阵 一个A: n * k 一个B: k * n C = A * B M = (A ...
- HDU 5015 233 Matrix(网络赛1009) 矩阵快速幂
先贴四份矩阵快速幂的模板:http://www.cnblogs.com/shangyu/p/3620803.html http://www.cppblog.com/acronix/archive/20 ...
随机推荐
- VBS 脚本对象
Dictionary对象(1) 1. 属性: a) compareMode b) count c) key d) item 2. ...
- WebGL 渲染管线
WebGL 是以 OpenGL ES 2.0 为基础的 3D 编程应用接口. WebGL依赖GPU的图形渲染能力,即依赖硬件设备,所以其渲染流程和GPU内部的渲染管线是相符的.渲染管线的作用是将3D模 ...
- python学习 第一章 one day(补)
python入门 一.编写Hello,World 方法一. 进入解释器,实施输入并获取到执行结果 C:\Users\84535>python Python 3.7.4 (tags/v3.7.4: ...
- save the transient instance before flushing错误解决办法
错误原因: new了一个新对象,在未保存之前将它保存进了一个新new的对象(也即不是持久态). 解决办法: 在保存或更新之前把这个对象查出来(这样就是一个持久态) <set name=" ...
- 「NOIP2012」开车旅行
传送门 Luogu 解题思路 第一步预处理每个点后面的最近点和次近点,然后就是模拟题意. 但是如果就这么搞是 \(O(N^2)\) 的,不过可以过70分,考场上也已经比较可观了. 考虑优化. 预处理最 ...
- 095、Java中String类之不自动保存对象池操作
01.代码如下: package TIANPAN; /** * 此处为文档注释 * * @author 田攀 微信382477247 */ public class TestDemo { public ...
- java与MySQL数据库的连接
java与MySQL数据库的连接 1.数据库的安装和建立参见上一篇博客中的第1,2步骤.(http://blog.csdn.net/nuptboyzhb/article/details/8043091 ...
- Python中的*可变参数与**关键字参数
1.定义了一个需要两个参数的函数 def print_str(first, second): print first print second if __name__ == "__main_ ...
- crackme---攻防世界
首先下载附件之后,查壳 虽然什么也没有发现,但是看一下区段就知道,这个是北斗的壳.所以我们首先载入od开始把壳脱掉 这里面也可以看到pushfd和pushad是北斗壳的特征 这里面我使用是esp定律脱 ...
- Docker 学习之部署php + nginx(一)
博主电脑系统是window 10 专业版的,所以在此记录下docker的基本使用方法. 参考地址: https://www.runoob.com/docker/docker-install-php.h ...