HDU更多的学校比赛9场 HDU 4965Fast Matrix Calculation【矩阵运算+数学技巧】
2015-06-23 10:53
344 查看
困难,。,真,,,不是太困难
的问题是,有一个矩阵运算优化
您有权发言权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是比較小的
的问题是,有一个矩阵运算优化
您有权发言权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; } }
相关文章推荐
- 11gR2RAC环境DBCA创建一个数据库错误ORA-15055 ORA-15001
- 1. Skippr
- PHP实现链式操作的核心思想
- 产品设计怎么做头脑风暴?
- jquery ajax中append生成的div 有问题,可能是浏览器自动补全的原因。
- 截图上传功能 imageAreaselect
- ubunut 网卡做bond后的桥接
- 如何正确地写出单例模式
- GraphicsMagick vs ImageMagick 压力测试
- Cordys 复合对象创建 001
- Android Studio 添加.SO文件
- 返回一个整数数组中最大子数组的和2
- Centos 网卡做bond
- 基于COM组件的软件开发 技术方案一
- Oracle 如何写出高效的 SQL
- java网络笔记
- Cron表达式
- 在Node.js中使用HTTP上传文件的方法
- 使用oz制作镜像
- 从镜像文件开出虚拟机