Educational Codeforces Round 48 (Rated for Div. 2) D. Vasya And The Matrix(构造)

2023-10-05 22:59

本文主要是介绍Educational Codeforces Round 48 (Rated for Div. 2) D. Vasya And The Matrix(构造),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

描述

Now Vasya is taking an exam in mathematics. In order to get a good mark, Vasya needs to guess the matrix that the teacher has constructed!

Vasya knows that the matrix consists of n rows and m columns. For each row, he knows the xor (bitwise excluding or) of the elements in this row. The sequence a*1, *a*2, …, *a**n denotes the xor of elements in rows with indices 1, 2, …, n, respectively. Similarly, for each column, he knows the xor of the elements in this column. The sequence b*1, *b*2, …, *b**m denotes the xor of elements in columns with indices 1, 2, …, m, respectively.

Help Vasya! Find a matrix satisfying the given constraints or tell him that there is no suitable matrix.

Input

The first line contains two numbers n and m (2 ≤ n, m ≤ 100) — the dimensions of the matrix.

The second line contains n numbers a*1, *a*2, …, *a**n (0 ≤ a**i ≤ 109), where a**i is the xor of all elements in row i.

The third line contains m numbers b*1, *b*2, …, *b**m (0 ≤ b**i ≤ 109), where b**i is the xor of all elements in column i.

Output

If there is no matrix satisfying the given constraints in the first line, output “NO”.

Otherwise, on the first line output “YES”, and then n rows of m numbers in each c**i*1, *c**i*2, … , *c**im (0 ≤ c**ij ≤ 2·109) — the description of the matrix.

If there are several suitable matrices, it is allowed to print any of them.

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

思路

给了一个矩阵的行数和列数,然后给出了每一行的异或和,然后给出了每一列的异或和,问你存不存在一个符合这些条件的矩阵,如果存在就输出YES并且输出这个矩阵,不存在就输出No

比如我们要构造一下这个矩阵(后面的是异或和):

2 92 100---->58
3 38 24 ---->61
6 72 32 ---->81
|  |  |
|  |  |
7  50 99

现在我们知道了这个矩阵的行和列的异或和.

因为异或有两个性质:

x^x=0
x^0=x

所以我们要使行可以成立,我们把每一行除了最后一个全部填0,每行最后一个填这一行的异或和,我们把每一列全部填0,当到最后一列时,就填这一列的异或和,就像这样:

0058
0061
750(未知)

现在有一个未知的不知道应该怎么填,我们要满足最后一列的异或和为99时,这里就需要填58^61^99=100然后现在列满足条件了,但是行不一定满足,我们接着计算一下行,我们会发现7^50^100=81现在行也满足条件,所以我们已经可以构造出这样一个矩阵。那么如果不相等呢,没错,不不相等的时候就无法构造出这样一个矩阵,直接输出NO就行了

代码

#include <bits/stdc++.h>
using namespace std;
const int N=2e5+20;
const int inf=0x3f3f3f3f;
int a[N],b[N];
int main()
{int n,m;scanf("%d%d",&n,&m);for(int i=1; i<=n; i++)scanf("%d",&a[i]);for(int i=1; i<=m; i++)scanf("%d",&b[i]);int ans1=0;for(int i=1; i<n; i++)ans1^=a[i];int ans2=ans1^b[m];int ans=0;for(int i=1; i<m; i++)ans^=b[i];ans^=ans2;if(ans==a[n]){puts("YES");for(int i=1; i<=n; i++){for(int j=1; j<=m; j++){if(i==n&&j==m)printf("%d ",ans2);else if(i==n)printf("%d ",b[j]);else if(j==m)printf("%d ",a[i]);elseprintf("0 ");}puts("");}puts("");}elseputs("NO");return 0;
}

这篇关于Educational Codeforces Round 48 (Rated for Div. 2) D. Vasya And The Matrix(构造)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152226

相关文章

Codeforces Round #240 (Div. 2) E分治算法探究1

Codeforces Round #240 (Div. 2) E  http://codeforces.com/contest/415/problem/E 2^n个数,每次操作将其分成2^q份,对于每一份内部的数进行翻转(逆序),每次操作完后输出操作后新序列的逆序对数。 图一:  划分子问题。 图二: 分而治之,=>  合并 。 图三: 回溯:

Codeforces Round #261 (Div. 2)小记

A  XX注意最后输出满足条件,我也不知道为什么写的这么长。 #define X first#define Y secondvector<pair<int , int> > a ;int can(pair<int , int> c){return -1000 <= c.X && c.X <= 1000&& -1000 <= c.Y && c.Y <= 1000 ;}int m

Codeforces Beta Round #47 C凸包 (最终写法)

题意慢慢看。 typedef long long LL ;int cmp(double x){if(fabs(x) < 1e-8) return 0 ;return x > 0 ? 1 : -1 ;}struct point{double x , y ;point(){}point(double _x , double _y):x(_x) , y(_y){}point op

Codeforces Round #113 (Div. 2) B 判断多边形是否在凸包内

题目点击打开链接 凸多边形A, 多边形B, 判断B是否严格在A内。  注意AB有重点 。  将A,B上的点合在一起求凸包,如果凸包上的点是B的某个点,则B肯定不在A内。 或者说B上的某点在凸包的边上则也说明B不严格在A里面。 这个处理有个巧妙的方法,只需在求凸包的时候, <=  改成< 也就是说凸包一条边上的所有点都重复点都记录在凸包里面了。 另外不能去重点。 int

Codeforces 482B 线段树

求是否存在这样的n个数; m次操作,每次操作就是三个数 l ,r,val          a[l] & a[l+1] &......&a[r] = val 就是区间l---r上的与的值为val 。 也就是意味着区间[L , R] 每个数要执行 | val 操作  最后判断  a[l] & a[l+1] &......&a[r] 是否= val import ja

leetcode105 从前序与中序遍历序列构造二叉树

根据一棵树的前序遍历与中序遍历构造二叉树。 注意: 你可以假设树中没有重复的元素。 例如,给出 前序遍历 preorder = [3,9,20,15,7]中序遍历 inorder = [9,3,15,20,7] 返回如下的二叉树: 3/ \9 20/ \15 7   class Solution {public TreeNode buildTree(int[] pr

CSS实现DIV三角形

本文内容收集来自网络 #triangle-up {width: 0;height: 0;border-left: 50px solid transparent;border-right: 50px solid transparent;border-bottom: 100px solid red;} #triangle-down {width: 0;height: 0;bor

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

C++中类的构造函数调用顺序

当建立一个对象时,首先调用基类的构造函数,然后调用下一个派生类的 构造函数,依次类推,直至到达派生类次数最多的派生次数最多的类的构造函数为止。 简而言之,对象是由“底层向上”开始构造的。因为,构造函数一开始构造时,总是 要调用它的基类的构造函数,然后才开始执行其构造函数体,调用直接基类构造函数时, 如果无专门说明,就调用直接基类的默认构造函数。在对象析构时,其顺序正好相反。

创建一个大的DIV,里面的包含两个DIV是可以自由移动

创建一个大的DIV,里面的包含两个DIV是可以自由移动 <body>         <div style="position: relative; background:#DDF8CF;line-height: 50px"> <div style="text-align: center; width: 100%;padding-top: 0px;"><h3>定&nbsp;位&nbsp;