HDU 4965 Fast Matrix Calculation(矩阵高速幂)
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(矩阵高速幂)的更多相关文章
- 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 矩阵快速幂
题意: 给出一个\(n \times k\)的矩阵\(A\)和一个\(k \times n\)的矩阵\(B\),其中\(4 \leq N \leq 1000, \, 2 \leq K \leq 6\) ...
- HDU 4965 Fast Matrix Calculation 矩阵乘法 乘法结合律
一种奇葩的写法,纪念一下当时的RE. #include <iostream> #include <cstdio> #include <cstring> #inclu ...
- 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 4965 Fast Matrix Calculation
题目链接:hdu 4965,题目大意:给你一个 n*k 的矩阵 A 和一个 k*n 的矩阵 B,定义矩阵 C= A*B,然后矩阵 M= C^(n*n),矩阵中一切元素皆 mod 6,最后求出 M 中所 ...
- 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 5015 233 Matrix (矩阵高速幂)
233 Matrix Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others) Tota ...
- 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 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和)
HDU 1588 Gauss Fibonacci(矩阵高速幂+二分等比序列求和) ACM 题目地址:HDU 1588 Gauss Fibonacci 题意: g(i)=k*i+b;i为变量. 给出 ...
随机推荐
- 2019-03-15 使用Request POST获取CNABS网站上JSON格式的表格数据,并解析出来用xlwt写到Excel中
import requests import xlwt url = 'https://v1.cn-abs.com/ajax/ChartMarketHandler.ashx' headers={ 'Us ...
- Sublime 插件Pylinter could not automatically determined the path to lint.py
本系列文章由 @yhl_leo 出品,转载请注明出处. 文章链接: http://blog.csdn.net/yhl_leo/article/details/50618630 安装Sublime Te ...
- ASP.NET-HttpPostedFileBase file为null的问题
MVC使用Ajax.BeginForm上传图片时HttpPostedFileBase file为null,Request.Files获取不到文件,问题分析是页面中存在jquery.unobtrusiv ...
- POJ——T2186 Popular Cows || 洛谷——P2341 [HAOI2006]受欢迎的牛
http://poj.org/problem?id=2186 || https://www.luogu.org/problem/show?pid=2341 Time Limit: 2000MS M ...
- HDU 4302 Contest 1
维护两个优先队列即可.要注意,当出现蛋糕的位置刚好在狗的位置时,存在右边. 注意输出大小写... #include <iostream> #include <queue> #i ...
- Android ToolBar 的简单封装
使用过 ToolBar 的朋友肯定对其使用方法不陌生,由于其使用方法非常easy.假设对 ActionBar 使用比較熟练的人来说.ToolBar 就更easy了!只是,相信大家在使用的过程中都遇到过 ...
- Activity嵌套多个Fragment实现横竖屏切换
一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...
- 【Oracle学习笔记】
内容主要包括: (1)三种循环及其简化 (2)游标的使用 (3)异常处理 (4)存储过程 (5)存储函数 (6)触发器 (7)其它pl/sql操作 ---------------loop循环定义变量- ...
- 基于sparksql调用shell脚本运行SQL
[Author]: kwu 基于sparksql调用shell脚本运行SQL,sparksql提供了类似hive中的 -e , -f ,-i的选项 1.定时调用脚本 #!/bin/sh # uplo ...
- poj3071之概率DP
Football Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 2667 Accepted: 1361 Descript ...