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

一种奇葩的写法,纪念一下当时的RE。

  1 #include <iostream>
  2 #include <cstdio>
  3 #include <cstring>
  4 #include <cstdlib>
  5 #include <cmath>
  6 #include <algorithm>
  7 #include <string>
  8 #include <queue>
  9 #include <stack>
 10 #include <vector>
 11 #include <map>
 12 #include <set>
 13 #include <functional>
 14 #include <cctype>
 15 #include <time.h>
 16 
 17 using namespace std;
 18 
 19 const int INF = 1<<30;
 20 const int MAXN = 1005;
 21 
 22 struct Matrix {
 23     int a[MAXN][MAXN];
 24     int col, row;
 25 };
 26 
 27 Matrix tMu;
 28 
 29 void multiplication(const Matrix &x, const Matrix &y) {
 30     tMu.row= x.row; tMu.col = y.col;
 31     for (int i = 0; i < tMu.row; i++)
 32         for (int j = 0; j < tMu.row; j++) {
 33             tMu.a[i][j] = 0;
 34             for (int k = 0; k < x.col; k++)
 35                 tMu.a[i][j] = (tMu.a[i][j]+x.a[i][k]*y.a[k][j])%6;
 36         }
 37 }
 38 
 39 Matrix a, b, ONE;
 40 Matrix t;
 41 Matrix tmp, res;
 42 
 43 int n, k;
 44 
 45 void pow(const Matrix &x, int d) {
 46     res = ONE; res.col = res.row = x.col;
 47     tmp = x;
 48     while (d>0) {
 49         if (d&1) {
 50             multiplication(res, tmp);
 51             res = tMu;
 52         }
 53         multiplication(tmp, tmp);
 54         tmp = tMu;
 55         d >>= 1;
 56     }
 57 }
 58 
 59 void solve() {
 60     multiplication(b, a);
 61     t = tMu;
 62     pow(t, n*n-1);
 63     t = res;
 64     multiplication(a, t);
 65     t = tMu;
 66     multiplication(t, b);
 67     t = tMu;
 68     int ans = 0;
 69     for (int i = 0; i < n; i++) {
 70         for (int j = 0; j < n; j++)
 71             ans += t.a[i][j];
 72     }
 73     printf("%d\n", ans);
 74 }
 75 
 76 int main() {
 77     #ifdef Phantom01
 78         freopen("HDU4965.txt", "r", stdin);
 79     #endif //Phantom01
 80 
 81     for (int i = 0; i < MAXN; i++) {
 82         for (int j = 0; j < MAXN; j++)
 83             ONE.a[i][j] = 0;
 84         ONE.a[i][i] = 1;
 85     }
 86 
 87     while (scanf("%d%d", &n, &k)!=EOF && !(n==0&&k==0)) {
 88         a.row = b.col = n;
 89         a.col = b.row = k;
 90         for (int i = 0; i < n; i++)
 91             for (int j = 0; j < k; j++)
 92                 scanf("%d", &a.a[i][j]);
 93         for (int i = 0; i < k; i++)
 94             for (int j = 0; j < n; j++)
 95                 scanf("%d", &b.a[i][j]);
 96         solve();
 97     }
 98 
 99     return 0;
100 }
View Code

 

转载于:https://www.cnblogs.com/Phantom01/p/4085343.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1)为了实现不同健康信息系统之间的数据共享和互通,国外研究者更多开始关注健康数据规范化和标准化以及可以共享的问题,通过将各个机构的数据进行规范和标准化处理,那么这样就不存在各机构间为了利益而牺牲用户的利益的情况产生。具体的例子便是美国的健康信息技术标准委员会制定了一系列健康信息技术标准,如HL7、CDA、FHIR等,以促进健康信息系统之间的数据共享和互通。 2)随着健康数据的数字化和网络化,个人健康信息管理系统的隐私和安全问题也日益凸显,加上国外对于信息的保护法案更为完善和严格,很多新exit应用欧美研究者都会对其进行信息安全的研究,需要确保自己的个人信息不回被泄露和被非法获取去黑市牟利。具体的例子便是欧洲的法国和丹麦等国家都制定了十分严格和惩罚力度很大的信息保护法条,如欧盟通用数据保护条例和欧洲电子健康记录标准,以保障个人健康信息的隐私和安全。 3)目前人工智能和机器学习是计算机领域的热点技术,在这方面国外研究者开始的尝试就比较早,例如苹果公司重金聘请了较多大学的人类健康研究中心的知名研究者和运动科学的研究者打造了他们的智能手表,其中那些结果的展示便是根据最新的人工智能技术进行算法的结果预测,从而进行可视化的展示,目前苹果公司将人工智能和机器学习等技术应用于个人健康信息管理系统中,以实现健康数据的智能化分析和利用。根据一些媒体的爆料信息,未来苹果公司的手表还会搭载机器学习技术分析患者的电子病历数据,预测患者是否存在抑郁症状。 4)为了促进健康数据的共享和开放,国外一些研究者提出了开放数据平台和API接口等技术,以方便个人健康信息的共享和利用。具体的例子是美国的数据标准化项目就利用开放API接口实现了患者电子病历数据的共享和利用,减少了因为不同州和其他地区的数据标准不一造成的用户要支付的额外成本和精力,尽最大的可能做到以用户的健康为第一要素。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值