poj3213
来源:互联网 发布:淘宝打假2016多久结束 编辑:程序博客网 时间:2024/05/21 19:42
传送门 http://poj.org/problem?id=3213
题目大意:两个矩阵(N<=1000)相乘,只有一个地方可能出错,问是否有错,并修改。
矩阵乘法最低复杂度就是N^3的啊,要计算每一个的话,妥妥超时,但这题规定,只有可能一个地方出错,可以通过求出前一个矩阵的列和,后一个矩阵的行和,进行简化,十分巧妙。
#include <map>#include <set>#include <stack>#include <queue>#include <cmath>#include <string>#include <vector>#include <cstdio>#include <cctype>#include <cstring>#include <sstream>#include <cstdlib>#include <iostream>#include <algorithm>#include <iomanip>#pragma comment(linker,"/STACK:102400000,102400000")using namespace std;#define MAX 1005#define MAXN 100005#define maxnode 105#define sigma_size 2#define lson l,m,rt<<1#define rson m+1,r,rt<<1|1#define lrt rt<<1#define rrt rt<<1|1#define middle int m=(r+l)>>1#define LL long long#define ull unsigned long long#define mem(x,v) memset(x,v,sizeof(x))#define lowbit(x) (x&-x)#define pii pair<int,int>#define bits(a) __builtin_popcount(a)#define mk make_pair#define limit 10000const ull prime = 999983;const int INF = 0x3f3f3f3f;//const LL INFF = 0x3f3f3f3f;const double pi = acos(-1.0);const double inf = 1e18;const double eps = 1e-9;const LL mod = 1e9+7;const ull mxx = 1333331;/*****************************************************/inline void RI(int &x) { char c; while((c=getchar())<'0' || c>'9'); x=c-'0'; while((c=getchar())>='0' && c<='9') x=(x<<3)+(x<<1)+c-'0';}/*****************************************************/int n,m,p,k;int a[1010][1010],b[1010][1010],c[1010][1010];LL suma[1010],sumb[1010],sumc1[1010],sumc2[1010];int main(){ while(cin>>n>>m>>k){ mem(suma,0); mem(sumb,0); mem(sumc1,0); mem(sumc2,0); for(int i=0;i<n;i++){ for(int j=0;j<m;j++){ scanf("%d",&a[i][j]); suma[j]+=a[i][j]; } } for(int i=0;i<m;i++){ for(int j=0;j<k;j++){ scanf("%d",&b[i][j]); sumb[i]+=b[i][j]; } } for(int i=0;i<n;i++){ for(int j=0;j<k;j++){ scanf("%d",&c[i][j]); sumc1[i]+=c[i][j]; sumc2[j]+=c[i][j]; } } bool bool1=true; int ans1=0,ans2=0; for(int i=0;i<n;i++){ LL temp=0; for(int j=0;j<m;j++){ temp+=((LL)a[i][j]*sumb[j]); } if(temp!=sumc1[i]){ ans1=i; bool1=false; break; } } for(int i=0;i<k;i++){ LL temp=0; for(int j=0;j<m;j++){ temp+=((LL)b[j][i]*suma[j]); } if(temp!=sumc2[i]){ ans2=i; break; } } if(bool1){ cout<<"Yes"<<endl; } else { cout<<"No"<<endl; cout<<ans1+1<<' '<<ans2+1<<endl; LL ans=0; for(int i=0;i<m;i++){ ans+=(LL)a[ans1][i]*b[i][ans2]; } cout<<ans<<endl; } } return 0;}
0 0
- poj3213
- poj3213
- POJ3213(矩阵乘法)
- poj3213(特殊的矩阵乘法)
- 数据库查询时间过长原因
- 欢迎使用CSDN-markdown编辑器
- Nginx/ZooKeeper 负载均衡的差异
- Yii2如何使用存取控制过滤器(ACF)
- DNS原理及其解析过程剖析
- poj3213
- 同步阻塞式IO(BIO)--学习笔记
- 关于从浏览器到数据库之间的网络连接
- Qt网络编程--主机信息
- Android studio中调出快捷键,快速try catch包括代码块
- Android 仿通讯录A-Z侧边索引查询 LetterListView androidstudio
- 一维数组的逆序输出(情况一:仅输出时发生改变,数组元素位置不发生改变、情况二:将顺序数组改为逆序数组)
- 查看web服务器的方式
- 《博士五年总结》及我其它过去的博客文章