难度上。,,确实。。。不算难

问题是有个矩阵运算的优化

题目是说给个N*K的矩阵A给个K*N的矩阵B(1<=N<=1000 && 1=<K<=6),先把他们乘起来乘为C矩阵。然后算C^(N*N)

相当于

ABABABABABABAB...=(AB)^(N*N)

不如

A(BA)^(N*N-1)B

由于BA乘得K*K的矩阵,K是比較小的

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <iostream>
using namespace std;
int a[1111][1111];
int b[1111][1111];
int c[1111][1111];
int tmp[1111][1111];
int sum[1111][1111];
void TIMES(int K,int N,int M,int aa[][1111],int bb[][1111],int cc[][1111]){
memset(tmp,0,sizeof(tmp));
for(int i=1;i<=K;i++){
for(int j=1;j<=M;j++){
for(int k=1;k<=N;k++){
tmp[i][j]=(tmp[i][j]+aa[i][k]*bb[k][j]%6)%6;
}
}
}
for(int i=1;i<=K;i++)
for(int j=1;j<=M;j++)
cc[i][j]=tmp[i][j]%6;
}
void quick(int cc[][1111],int mi,int n){
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
if(i==j) sum[i][j]=1;
else sum[i][j]=0;
while(mi){
if(mi&1)
TIMES(n,n,n,cc,sum,sum);
TIMES(n,n,n,cc,cc,cc);
mi>>=1;
}
}
int main(){
#ifndef ONLINE_JUDGE
freopen("G:/in.txt","r",stdin);
//freopen("G:/myout.txt","w",stdout);
#endif
int N,K;
while(~scanf("%d%d",&N,&K)){
if(N==0 && K==0) return 0;
for(int i=1;i<=N;i++){
for(int j=1;j<=K;j++){
scanf("%d",&a[i][j]);
}
}
for(int i=1;i<=K;i++){
for(int j=1;j<=N;j++){
scanf("%d",&b[i][j]);
}
}
TIMES(K,N,K,b,a,c);
quick(c,N*N-1,K);
TIMES(N,K,K,a,sum,sum);
TIMES(N,K,N,sum,b,sum);
int ans=0;
for(int i=1;i<=N;i++)
for(int j=1;j<=N;j++)
ans+=sum[i][j];
cout<<ans<<endl;
}
}

HDU多校赛第9场 HDU 4965Fast Matrix Calculation【矩阵运算+数学小知识】的更多相关文章

  1. 【杂题总汇】HDU多校赛第十场 Videos

    [HDU2018多校赛第十场]Videos 最后一场比赛也结束了…… +HDU传送门+ ◇ 题目 <简要翻译> 有n个人以及m部电影,每个人都有一个快乐值.每场电影都有它的开始.结束时间和 ...

  2. 牛客网多校赛第9场 E-Music Game【概率期望】【逆元】

    链接:https://www.nowcoder.com/acm/contest/147/E 来源:牛客网 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 262144K,其他语言524 ...

  3. 2015 多校赛 第五场 1010 (hdu 5352)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5352 看题看得心好累. 题目大意: 给出 n 个点,依次执行 m 次操作:输入“1 x”时,表示将与 ...

  4. hdu 5373 The shortest problem(杭电多校赛第七场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5373 The shortest problem Time Limit: 3000/1500 MS (J ...

  5. hdu 5328 Problem Killer(杭电多校赛第四场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5328 题目大意:找到连续的最长的等差数列or等比数列. 解题思路:1.等差等比的性质有很多.其中比较重 ...

  6. hdu 5319 Painter(杭电多校赛第三场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5319 Painter Time Limit: 2000/1000 MS (Java/Others)   ...

  7. hdu 5326 Work(杭电多校赛第三场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5326 Work Time Limit: 2000/1000 MS (Java/Others)    M ...

  8. 2015 多校赛 第五场 1006 (hdu 5348)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5348 题目大意:给出一幅无向图,问是否存在一种方案,使得给每条边赋予方向后,每个点的入度与出度之差小于 ...

  9. 2015 多校赛 第三场 1002 (hdu 5317)

    Description Mr. Hdu is interested in Greatest Common Divisor (GCD). He wants to find more and more i ...

随机推荐

  1. 0420-mysql关键词/错误提示关键词

    操作关键词: 1.show //查看.展示 2.use //选择(库/表) 3.database/s //库/所有库 4.table/s //表/所有表 5.primary key //主键:不可重复 ...

  2. JavaScript在表格中模拟搜索多关键词搜索和筛选

    模拟搜索需要实现以下功能: 1.用户的模糊搜索不区分大小写,需要小写字母匹配同样可以匹配到该字母的大写单词. 2.多关键词模糊搜索,假设用户关键词以空格分隔,在关键词不完整的情况下仍然可以匹配到包含该 ...

  3. Oracle备份Scott

    @echo off echo ================================================ echo Windows环境下Oracle数据库的自动备份脚本 echo ...

  4. ubuntu 软件桌面图标创建

    sublime text 的安装目录是:/usr/local/sublimetext $cd 桌面 $vim Sublime\ Text.desktop 添加如下内容: [Desktop Entry] ...

  5. 有关css的选择器优先级以及父子选择器

    css,又称样式重叠表,如今的网页的样式基本是div+css写出来的,功能十分强大,要想在html文件中引入css文件需要在<head></head>标签内输入一行:<l ...

  6. Django中的bug总结

    1.插入数据库的时候,少写一个字段.ps:看准数据库的字段,是不是非空,是不是外键. 2.当同一个视图中需要连续操作两个数据表时,先看好两个表的外键之间的关系,再进行操作表.比如:一个订单表order ...

  7. Vue2-Editor 使用

    Vue-Editor底层采取的是quill.js,而quill.js采用的是html5的新属性classList,所以版本低于ie10会报错“无法获取未定义或 null 引用的属性‘confirm’” ...

  8. python--3、函数

    定义: 定义函数时,也相当于定义变量.会把函数体内的代码存入开辟的内存空间中.使用函数时,通过func() 声明是函数,其对应的值为代码.函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执 ...

  9. oracle-3种工具使用

    1:原命令行,dos 2:sqlplus,图形界面 3:isqlplus,网页版的.(假如自己机器无法安装oracle,可通过别人ip地址去使用oracle,http://ip:5560/isqlpl ...

  10. js-内置对象及相关语法

    1:如图(视频截取的) this指的是当前标签的对象. var ary=new Array("mark","jay","leslie"); ...