HDU_4965 Fast Matrix Calculation 2014多校9 矩阵快速幂+机智的矩阵结合律

news/2023/6/8 6:58:40

一开始看这个题目以为是个裸的矩阵快速幂的题目,

后来发现会超时,超就超在  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;}

  

转载于:https://www.cnblogs.com/kkrisen/p/3933025.html


https://dhexx.cn/news/show-17276.html

相关文章

sentinel 控制台讲解-流控规则--流控效果:排队等待

匀速排队&#xff08;RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER&#xff09;方式会严格控制请求通过的间隔时间&#xff0c;也即是让请求以均匀的速度通过&#xff0c;对应的是漏桶算法。阈值必须设置为QPS。 这种方式主要用于处理间隔性突发的流量&#xff0c;例如消息队列…

highcharts插件(HighCharts支持的图表类型有曲线图、区域图、柱状图、饼状图、散状点图和综合图表。)...

1.兼容性&#xff1a;HighCharts采用纯JavaScript编写&#xff0c;兼容当今大部分的浏览器&#xff0c;包括Safari、IE和火狐等等&#xff1b; HighCharts的几种基本的官方图表示例(6张)2.图表类型&#xff1a;HighCharts支持图表类型&#xff0c;包括曲线图、区域图、柱状图、…

sentinel 控制台讲解-降级规则-降级策略:RT

上图表示 需要1秒持续进入至少5个请求&#xff0c;并且 程序的平均响应时间大于 设定的阈值&#xff0c;就会触发降级&#xff0c;打开断路器&#xff0c;等时间窗口结束&#xff08;秒&#xff09;&#xff0c;就会关闭降级 注意 Sentinel 默认统计的 RT 上限是 4900 毫秒&…

HTML表格基础详解

在现在 div 大行其道的时代&#xff0c;table 这个标签似乎很少被人提及&#xff0c;到处都是 divcss 布局的书以及博客文章&#xff0c;但其实 table 以及连带的其他表格标签依然在网页中占很重要的地位&#xff0c;特别是后台展示数据的时候表格运用是否熟练就显得很重要&…

sentinel 控制台讲解-降级规则-降级策略:异常比例

上图表示 1秒持续进入QPS>5 且 异常比例超过阈值&#xff0c;触发降级&#xff0c;打开断路器&#xff0c;等时间窗口结束 &#xff08;秒&#xff09;&#xff0c;再关闭降级异常比率的阈值范围是 [0.0 至 1.0]&#xff0c;代表 0% - 100%主要讲控制台规则的使用&#xff0…

图形学-基础数学

opengl只接受凸多边形 凸多边形: 指多边形任意非相邻的两点的连线位于多边形的内部。 计算漫反射颜色的方法&#xff1a; Cdiff max{N • L, 0} * Cmat * Cli 其中N代表顶点的单位法线&#xff0c; L代表从顶点指向光源的单位向量。Cmat 是表面的材料颜色&#xff0c; Cli是光…

sentinel 控制台讲解-降级规则-降级策略:异常数

异常数 (DEGRADE_GRADE_EXCEPTION_COUNT)&#xff1a;当资源近 1 分钟的异常数目超过阈值之后会进行熔断。注意 由于统计时间窗口是分钟级别的&#xff0c;若 timeWindow 小于 60s&#xff0c;则结束熔断状态后仍可能再进入熔断状态。 异常数是按分钟来统计的&#xff0c;所以…

sentinel - @SentinelResource注解使用-1 blockHandler ,fallback参数使用

SentinelResource属性介绍 Value&#xff1a;资源名称&#xff0c;必需项&#xff08;不能为空&#xff09;blockHandler&#xff1a;处理BlockException的函数名称&#xff08;可以理解对Sentinel的配置进行方法兜底&#xff09;。函数要求&#xff1a; 必须是public修饰返回…

主机找不到vmnet1和vmnet8

今天跑程序时&#xff0c;突然发现虚拟机ping不通主机了&#xff0c;返过来可行&#xff0c;防火墙什么的都设置好了&#xff0c;仍然不行&#xff0c;后来发现&#xff0c;在网络和共享中心已经看不到vmnet1和vmnet8了&#xff0c;更改适配器设置也只有本地连接和宽带连接&…

sentinel 控制台讲解- 热点规则

何为热点&#xff1f;热点即经常访问的数据。很多时候我们希望统计某个热点数据中访问频次最高的 Top K 数据&#xff0c;并对其访问进行限制。比如&#xff1a; 商品 ID 为参数&#xff0c;统计一段时间内最常购买的商品 ID 并进行限制用户 ID 为参数&#xff0c;针对一段时间…