博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 4965 Fast Matrix Calculation
阅读量:6946 次
发布时间:2019-06-27

本文共 2344 字,大约阅读时间需要 7 分钟。

按题意的步骤来显然是不行的。算一次最坏需要o(1000*1000*6)复杂度,需要算log(n*n)次,显然超时。

需要转换一下公式,考虑到K只有6,所以可以考虑转换成BA来做。

#include
#include
#include
#include
#include
using namespace std;int N, M;const long long m = 6;struct Matrix{ long long A[10][10]; int R, C; Matrix operator*(Matrix b);};Matrix X, Y;long long A[1000 + 10][1000 + 10];long long B[1000 + 10][1000 + 10];long long ANS1[1000 + 10][1000 + 10];long long ANS2[1000 + 10][1000 + 10];Matrix Matrix::operator*(Matrix b){ Matrix c; int i, j, k; for (i = 1; i <= R; i++) for (j = 1; j <= b.C; j++){ c.A[i][j] = 0; for (k = 1; k <= C; k++) c.A[i][j] = (c.A[i][j] + (A[i][k] * b.A[k][j]) % m) % m; } c.R = R; c.C = b.C; return c;}void init(){ memset(Y.A, 0, sizeof Y.A); for (int i = 1; i <= M; i++) Y.A[i][i] = 1; Y.R = M; Y.C = M; X.R = M; X.C = M; for (int i = 1; i <= M; i++) { for (int j = 1; j <= M; j++) { X.A[i][j] = 0; for (int k = 1; k <= N; k++) X.A[i][j] = (X.A[i][j] + (B[i][k] * A[k][j]) % m) % m; } }}void work(){ int tmp = N*N - 1; while (tmp) { if (tmp % 2 == 1) Y = Y*X; tmp = tmp >> 1; X = X*X; } for (int i = 1; i <= N; i++) { for (int j = 1; j <= M; j++) { ANS1[i][j] = 0; for (int k = 1; k <= M; k++) ANS1[i][j] = (ANS1[i][j] + (A[i][k] * Y.A[k][j]) % m) % m; } } for (int i = 1; i <= N; i++) { for (int j = 1; j <= N; j++) { ANS2[i][j] = 0; for (int k = 1; k <= M; k++) ANS2[i][j] = (ANS2[i][j] + (ANS1[i][k] * B[k][j]) % m) % m; } } long long sum = 0; for (int i = 1; i <= N; i++) for (int j = 1; j <= N; j++) sum = sum + ANS2[i][j]; printf("%lld\n", sum);}void read(){ for (int i = 1; i <= N; i++) for (int j = 1; j <= M; j++) scanf("%d", &A[i][j]); for (int i = 1; i <= M; i++) for (int j = 1; j <= N; j++) scanf("%d", &B[i][j]);}int main(){ while (~scanf("%d%d", &N, &M)) { if (N == 0 && M == 0) break; read(); init(); work(); } return 0;}

 

转载于:https://www.cnblogs.com/zufezzt/p/5242404.html

你可能感兴趣的文章
C#~异步编程再续~await与async引起的w3wp.exe崩溃
查看>>
c3p0数据库连接池死锁问题
查看>>
SVN版本冲突解决
查看>>
java多线程知识点汇总(四)多线程知识点脉络图
查看>>
nginx的upstream目前支持5种方式的分配
查看>>
android图像处理(3) 底片效果
查看>>
stl 之set图解
查看>>
HDU 3569 Imaginary Date 简单期望
查看>>
怎么清除火狐浏览器的cookie?
查看>>
连麦介绍
查看>>
MQTT 客户端源码分析
查看>>
IT思想类智力题
查看>>
php设计模式-单例模式
查看>>
php扩展php-redis安装与使用
查看>>
python一天一题(2)
查看>>
Win10下安装Ubuntu16.04虚拟机并搭建TensorFlow1.3环境
查看>>
leetcode 108. Convert Sorted Array to Binary Search Tree
查看>>
【商城购物车】购物车逻辑
查看>>
PCIE协议解析 synopsys IP loopback 读书笔记(1)
查看>>
创建maven工程的时候卡死的解决办法
查看>>