poj3213(特殊的矩阵乘法)
来源:互联网 发布:身份证恶搞软件 编辑:程序博客网 时间:2024/06/14 20:41
链接:点击打开链接
题意:给出N*P的矩阵a,P*M的矩阵b,N*M的矩阵c,c=a*b,但是c中可能有一个元素出现错误,找出错误的位置
代码:
#include <bitset>#include <vector>#include <stdio.h>#include <stdlib.h>#include <string.h>#include <iostream>#include <algorithm>using namespace std;int r1[1005],r2[1005];int a[1005][1005],b[1005][1005],c[1005][1005];int main(){ //对于矩阵乘法来说,复杂度大部分是N^3但是 int i,j,k,n,m,p,id,tmp; //当一个矩阵只有一维时,则复杂度变为N^2, while(scanf("%d%d%d",&n,&p,&m)!=EOF){ //所以对于这道题,我们可以想到两边左乘一个 for(i=1;i<=n;i++) //一维所有元素全是1的矩阵,再判断是否想相同 for(j=1;j<=p;j++) scanf("%d",&a[i][j]); for(i=1;i<=p;i++) for(j=1;j<=m;j++) scanf("%d",&b[i][j]); for(i=1;i<=n;i++) for(j=1;j<=m;j++) scanf("%d",&c[i][j]); memset(r1,0,sizeof(r1)); memset(r2,0,sizeof(r2)); for(i=1;i<=p;i++){ //就相当于第一个矩阵每列相加形成行矩阵后,再 for(j=1;j<=n;j++) //乘第二个矩阵 r1[i]+=a[j][i]; } for(i=1;i<=m;i++){ for(j=1;j<=p;j++) r2[i]+=r1[j]*b[j][i]; } memset(r1,0,sizeof(r1)); for(i=1;i<=m;i++){ for(j=1;j<=n;j++) r1[i]+=c[j][i]; } id=-1; for(j=1;j<=m;j++){ //通过左右乘完后的一维矩阵判断哪列可能出现错误 if(r1[j]!=r2[j]){ id=j; break; } } if(id==-1) puts("Yes"); else{ for(i=1;i<=n;i++){ //直接在列上寻找 tmp=0; for(j=1;j<=p;j++) tmp+=a[i][j]*b[j][id]; if(tmp!=c[i][id]){ puts("No"); printf("%d %d\n",i,id); printf("%d\n",tmp); } } } } return 0;}
0 0
- poj3213(特殊的矩阵乘法)
- POJ3213(矩阵乘法)
- poj3213
- poj3213
- Fzoj 1692 Problem 1692 Key problem [特殊矩阵的n^2复杂度求矩阵乘法]
- 【矩阵乘法】:矩阵乘法的基本实现
- 矩阵的思考-矩阵乘法
- 矩阵的乘法
- 矩阵的乘法问题
- 矩阵乘法的模板
- 矩阵乘法的疑惑
- 矩阵乘法的程序
- 矩阵乘法的性质
- 矩阵的乘法问题
- 矩阵乘法的优化
- 稀疏矩阵的乘法
- 矩阵乘法的优化
- 矩阵的乘法
- (一)启动进程Init
- MyBatis--HelloWorld
- 兔子数
- HDOJ 5240 Exam
- Java多线程:线程状态
- poj3213(特殊的矩阵乘法)
- 下一个风口就是硬科技,抓住机遇,中国能重返世界之巅
- Web AppBuilder for ArcGIS(开发版)系列教程 1
- MyBatis Generator 通过xml生成,有日志但是没有生成文件成功的问题
- 1. Two Sum
- windows 7 composer的安装
- 不要在linux上启用net.ipv4.tcp_tw_recycle参数
- 机器学习--knn手写数字识别系统
- 硬科技改变世界