zoukankan      html  css  js  c++  java
  • 51nod 1140 矩阵相乘结果的判断

    给出三个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 0
    Output示例
    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
     
  • 相关阅读:
    AJAX 跨域请求与 JSONP详解
    深入理解PHP的mvc框架
    读文文件md5值
    快速排序
    编写简单GUI程序
    简单的加减法
    rallway.py
    用列表构建栈结构
    模拟用户登陆注册
    密码生成
  • 原文地址:https://www.cnblogs.com/lyzuikeai/p/7747788.html
Copyright © 2011-2022 走看看