51nod 1140 矩阵相乘结果的判断
2017-10-28 19:18
218 查看
给出三个N*N的矩阵A, B, C,问A * B是否等于C?
Input
第1行,1个数N。(0 <= N <= 500) 第2 - N + 1行:每行N个数,对应矩阵A的元素。(0 <= M[i] <= 16) 第N + 2 - 2N + 1行:每行N个数,对应矩阵B的元素。(0 <= M[i] <= 16) 第2N + 2 - 3N + 1行:每行N个数,对应矩阵C的元素。Output
如果相等输出Yes,否则输出No。Input示例
2 1 0 0 1 0 1 1 0 0 1 1 0Output示例
Yes
——————————————————————
这题如果直接乘a b矩阵要 n^3 方 那么肯定会T
我们可以考虑引进一个向量 也就是1*n的矩阵 和 a b c 乘起来
判断是否相等就可以辣 这样是n^2的复杂度
如果担心不准 可以多rand几个1*n的矩阵多次比较
#include<cstdio> #include<cstring> #include<algorithm> using std::max; const int M=557; char buf[33*M*M],*ptr=buf-1; int read(){ int ans=0,f=1,c=*++ptr; while(c<'0'||c>'9'){if(c=='-') f=-1; c=*++ptr;} while(c>='0'&&c<='9'){ans=ans*10+(c-'0'); c=*++ptr;} return ans*f; } int n; typedef int mat[M][M]; mat a,b,c; int ly[M],yy[M],tmp[M]; int main(){ fread(buf,1,sizeof(buf),stdin); n=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) a[i][j]=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) b[i][j]=read(); for(int i=1;i<=n;i++) for(int j=1;j<=n;j++) c[i][j]=read(); for(int i=1;i<=n;i++) ly[i]=rand(); for(int i=1;i<=n;i++) yy[i]=ly[i]; for(int k=1;k<=n;k++) for(int j=1;j<=n;j++) tmp[k]+=ly[j]*a[j][k]; for(int i=1;i<=n;i++) ly[i]=tmp[i]; memset(tmp,0,sizeof(tmp)); for(int k=1;k<=n;k++) for(int j=1;j<=n;j++) tmp[k]+=ly[j]*b[j][k]; for(int i=1;i<=n;i++) ly[i]=tmp[i]; memset(tmp,0,sizeof(tmp)); for(int k=1;k<=n;k++) for(int j=1;j<=n;j++) tmp[k]+=yy[j]*c[j][k]; for(int i=1;i<=n;i++)if(ly[i]!=tmp[i]) return puts("No"),0; puts("Yes"); return 0; }View Code
相关文章推荐
- 51NOD 1140 矩阵相乘结果的判断(随机化算法+矩阵结合率)
- 51nod 1140 矩阵相乘结果的判断
- 51Nod-1140-矩阵相乘结果的判断
- 51nod 1140 矩阵相乘结果的判断
- [随机化 矩阵乘法] BZOJ 2396 神奇的矩阵 & 51Nod 1140 矩阵相乘结果的判断 & POJ 3318 Matrix Multiplication
- 51nod-1140-矩阵相乘结果的判断
- 51nod oj 1140 矩阵相乘结果的判断【矩阵的结合律】
- 矩阵相乘结果的判断
- 51nod 1140 矩阵相乘结果的判断(矩阵结合律)
- 矩阵相乘-c++代码实现及运行实例结果
- 矩阵相乘-c++代码实现及运行实例结果
- 51Nod1140 矩阵相乘的结果
- 矩阵相乘-c++代码实现及运行实例结果
- 两数相乘结果溢出的判断
- 科普:矩阵乘法是怎么做的?怎么判断两个矩阵是否可以相乘?不使用行列式
- 编写一个程序用于执行矩阵的乘法。 m1是一个x行y列的矩阵,m2是y行z列的矩阵。 这两个矩阵应该相乘,结果存储在r中,它是x行z列的矩阵。
- 矩阵相乘strassen-c++代码实现及运行实例结果
- java实现矩阵乘法public class MatrixMultiply { //A=A*B 将相乘的结果赋给A public static void Multiply(double[][
- 矩阵相乘strassen-c++代码实现及运行实例结果
- 矩阵相乘strassen-c++代码实现及运行实例结果