zoukankan      html  css  js  c++  java
  • D

    传送门

    现在小A正在参加一场数学考试。 为了赢得高分,小A想要猜出卷子里的矩阵!

    小A只知道这个矩阵有n 行和m 列.。每一行, 他知道所有元素的异或之值。序列a1, a2, ..., an 分别代表第 1, 2, ..., n行所有元素的异或值. 同样的, 对每一列, 他也知道每一列所有元素的异或值。 序列b1, b2, ..., bm 分别代表第1, 2, ..., m列所有元素的异或值。

    帮助小A找到一个符合条件的矩阵,或告诉他不存在这样的矩阵。

    Input

    第一行为两个整数n 和 m (2 ≤ n, m ≤ 100) — 矩阵的行数和列数。

    第二行为n 个整数 a1, a2, ..., an (0 ≤ ai ≤ 109), 其中 ai 是每一行所有元素的异或值 i

    第三行有m 个整数 b1, b2, ..., bm (0 ≤ bi ≤ 109), 其中 bi是每一列所有元素的异或值 i

    Output

    如果没有符合条件的矩阵,输出 "NO"(不加引号)。

    否则, 第一行输出 "YES", 然后接下来的nm 列输出ci1, ci2, ... , cim (0 ≤ cij ≤ 2·109) — 即符合条件的矩阵。

    如果有多个矩阵符合条件,输出任意一个。

    Examples

    Input
    2 3
    2 9
    5 3 13
    Output
    YES
    3 4 5
    6 7 8
    Input
    3 3
    1 7 6
    2 15 12
    Output
    NO

    Sponsor

    题目大意:

    就是说给你每一行的异或值和每一列的异或值,让你构造出这个矩阵的

    首先你得知道一些关于异或的知识

    就是x^a = b  <==> x^b = a

    令suma=a[1]^a[2]^a[3]------^a[n]

    sumb=b[1]^b[2]^b[3]------^b[m]

    a[1]^a[2]^a[3] ... ^a[n-1] = a[n]^suma

    b[1]^b[2]^b[3] ... ^b[m-1] = = b[m]^sumb

    判断条件:

    a1=x1^x4
    a2=x2^x5
    a3=x3^x6

    b1=x1^x2^x3
    b2=x4^x5^x6

    a1^a2^a3=x1^x2^x3^x4^x5^x6
    b1^b2=x1^x2^x3^x4^x5^x6
    所以判断条件就是suma==sumb
    
    

    所以你只需要求出x就行

    x^a[1]^a[2]^a[3]^ ... ^a[n-1] = b[m]  且

    x^b[1]^b[2]^b[3]^ ... ^ b[m-1] = a[n]

    也就是 x^suma^a[n] = b[m], 

    故 x = suma^a[n]^b[m].

    #include<iostream>
    #include<algorithm>
    using namespace std;
    const int maxn=1e3+100;
    int a[maxn];
    int b[maxn];
    int mp[maxn][maxn];
    /*
    x^a = b  <==> x^b = a 
    a[1]^a[2]^a[3] ... ^a[n-1] = a[n]^suma
    
    b[1]^b[2]^b[3] ... ^b[m-1] = = b[m]^sumb
    
    a1=x1^x4
    a2=x2^x5
    a3=x3^x6
    
    b1=x1^x2^x3
    b2=x4^x5^x6
    
    a1^a2^a3=x1^x2^x3^x4^x5^x6
    b1^b2=x1^x2^x3^x4^x5^x6
    所以suma==sumb是判断条件 
    */
    int main(){
        int n,m;
        cin>>n>>m;
        int suma=0;
        for(int i=1;i<=n;i++){
            cin>>a[i];
            suma^=a[i];
        }
        int sumb=0;
        for(int j=1;j<=m;j++){
            cin>>b[j];
            sumb^=b[j];
        }
        if(suma!=sumb){
            cout<<"NO"<<endl;
        }
        else{
            int s=suma^a[n]^b[m];
            for(int i=1;i<=n;i++){
                mp[i][m]=a[i];
            }
            for(int i=1;i<=m;i++){
                mp[n][i]=b[i];
            } 
            mp[n][m]=s;
             printf("YES
    ");
            for(int i = 1; i <= n; ++i) //打印矩阵
            {
                for(int j = 1; j <= m; ++j)
                    printf("%d ", mp[i][j]);
                printf("
    ");
            }
        }
        
    }
  • 相关阅读:
    前端工程师们,这些干货让你开发效率加倍
    我的代码片段
    人生至少有一次为了自己的勇气而活
    美食篇之御桥小聚
    美食篇之好好对自己
    F
    Github 简明教程
    A
    完美字符串
    1222: FJ的字符串 [水题]
  • 原文地址:https://www.cnblogs.com/lipu123/p/13992058.html
Copyright © 2011-2022 走看看