HDU 4965 Fast Matrix Calculation

题目链接

矩阵相乘为AxBxAxB...乘nn次。能够变成Ax(BxAxBxA...)xB,中间乘n
n - 1次,这样中间的矩阵一个仅仅有6x6。就能够用矩阵高速幂搞了

代码:

#include <cstdio>
#include <cstring> const int N = 1005;
const int M = 10;
int n, m; int A[N][M], B[M][N], C[M][M], CC[N][N];
int ans[M][M]; void tra() {
memset(CC, 0, sizeof(CC));
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
CC[i][j] = 0;
for (int k = 0; k < m; k++) {
CC[i][j] = (CC[i][j] + C[i][k] * C[k][j]) % 6;
}
}
}
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++)
C[i][j] = CC[i][j];
} void mul() {
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
CC[i][j] = 0;
for (int k = 0; k < m; k++) {
CC[i][j] = (CC[i][j] + ans[i][k] * C[k][j]) % 6;
}
}
}
for (int i = 0; i < m; i++)
for (int j = 0; j < m; j++)
ans[i][j] = CC[i][j];
} void pow_mod(int k) {
memset(ans, 0, sizeof(ans));
for (int i = 0; i < m; i++)
ans[i][i] = 1;
while (k) {
if (k&1) mul();
tra();
k >>= 1;
}
} void init() {
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
scanf("%d", &A[i][j]);
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
scanf("%d", &B[i][j]);
} int solve() {
for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
C[i][j] = 0;
for (int k = 0; k < n; k++) {
C[i][j] = (C[i][j] + B[i][k] * A[k][j]) % 6;
}
}
} pow_mod(n * n - 1); for (int i = 0; i < m; i++) {
for (int j = 0; j < m; j++) {
C[i][j] = ans[i][j];
}
} for (int i = 0; i < n; i++) {
for (int j = 0; j < m; j++) {
CC[i][j] = 0;
for (int k = 0; k < m; k++) {
CC[i][j] = (CC[i][j] + A[i][k] * C[k][j]) % 6;
}
}
}
for (int i = 0; i < n; i++)
for (int j = 0; j < m; j++)
A[i][j] = CC[i][j];
int ans = 0;
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
int sum = 0;
for (int k = 0; k < m; k++) {
sum = (sum + A[i][k] * B[k][j]) % 6;
}
ans += sum;
}
}
return ans;
} int main() {
while (~scanf("%d%d", &n, &m) && n || m) {
init();
printf("%d\n", solve());
}
return 0;
}

HDU 4965 Fast Matrix Calculation(矩阵高速幂)的更多相关文章

  1. hdu 4965 Fast Matrix Calculation(矩阵高速幂)

    题目链接.hdu 4965 Fast Matrix Calculation 题目大意:给定两个矩阵A,B,分别为N*K和K*N. 矩阵C = A*B 矩阵M=CN∗N 将矩阵M中的全部元素取模6,得到 ...

  2. HDU 4965 Fast Matrix Calculation 矩阵快速幂

    题意: 给出一个\(n \times k\)的矩阵\(A\)和一个\(k \times n\)的矩阵\(B\),其中\(4 \leq N \leq 1000, \, 2 \leq K \leq 6\) ...

  3. HDU 4965 Fast Matrix Calculation 矩阵乘法 乘法结合律

    一种奇葩的写法,纪念一下当时的RE. #include <iostream> #include <cstdio> #include <cstring> #inclu ...

  4. 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 ...

  5. hdu 4965 Fast Matrix Calculation

    题目链接:hdu 4965,题目大意:给你一个 n*k 的矩阵 A 和一个 k*n 的矩阵 B,定义矩阵 C= A*B,然后矩阵 M= C^(n*n),矩阵中一切元素皆 mod 6,最后求出 M 中所 ...

  6. 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 ...

  7. hdu 5015 233 Matrix (矩阵高速幂)

    233 Matrix Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others) Tota ...

  8. Fast Matrix Calculation 矩阵快速幂

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

  9. HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)

    HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意:  g(i)=k*i+b;i为变量.  给出 ...

随机推荐

  1. 浅谈密码加SALT原理

    我们知道,如果直接对密码进行散列,那么黑客可以对通过获得这个密码散列值,然后通过查散列值字典(例如MD5密码破解网站),得到某用户的密码.  加Salt可以一定程度上解决这一问题.所谓加Salt方法, ...

  2. java JSON 和 Object 相互转换

    1.导入 jackson jar <dependency> <groupId>com.fasterxml.jackson.core</groupId> <ar ...

  3. java有参无参构造器的的执行顺序

    这里拿了用数组构造栈的一段代码说明一下 public class StackArray<E> { private Object[] data = null; private int max ...

  4. npm API文档

    npm API文档 https://docs.npmjs.com/

  5. leetcode第一刷_Reverse Linked List II

    翻转链表绝对是终点项目,应该掌握的,这道题要求的是翻转一个区间内的节点.做法事实上非常相似,仅仅只是要注意判定開始是头的特殊情况,这样head要更新的,还有就是要把翻转之后的尾部下一个节点保存好,要么 ...

  6. Systemd启动图形界面过程

    1 启动命令 systemctl isolate graphical.target 2 启动过程: 文件:/etc/systemd/system/graphical.target 来自:systemd ...

  7. spring中bean标签factory-method和factory-bean)详解工厂方法(factory-method和factory-bean)

    转自:http://blog.sina.com.cn/s/blog_6d3c1ec601019f3j.html A.factory-method The name of a factory metho ...

  8. ubuntu下创建文件夹快捷方式

    title: ubuntu下创建文件夹快捷方式 toc: false date: 2018-09-01 17:22:28 categories: methods tags: ubuntu 快捷方式 s ...

  9. JavaScript原型链:prototype与__proto__

    title: 'JavaScript原型链:prototype与__proto__' toc: false date: 2018-09-04 11:16:54 主要看了这一篇,讲解的很清晰,最主要的一 ...

  10. 固定执行计划-SQL PROFILE手工绑定

    固定(稳定)执行计划 你的应用的功能时快时慢,变化比较大,功能的性能能够保持一种稳定的状态,ORACLE 固定执行计划,采用以下这几种方式 oracle 9i使用 Outline oracle 10g ...