#D0966. 行列异或
行列异或
题目描述
33DAI 想构造一个 行 列的 矩阵(每个格子填 或 )。他手里有两条给定的信息:
- 第 行所有数的异或和是 ;
- 第 列所有数的异或和是 。
请你构造出一个满足这两条信息的矩阵;如果不存在这样的矩阵,输出 No。
表示按位异或:把两个数写成二进制后逐位比较,相同得 、不同得 。 判断"一行(或一列)的异或和是否等于 ",就是把这一行(列)里的数依次异或起来,看结果是否等于 。 C++ 中按位异或写作
^,例如a ^ b。本题的答案不唯一,只要给出任意一个满足要求的矩阵都算正确。
输入格式
输入的第一行是一个整数 ,表示测试用例组数。
接下来依次给出 组测试用例,每组测试用例的格式为:
- 第一行两个整数 ;
- 第二行 个整数 (每个都是 或 );
- 第三行 个整数 (每个都是 或 )。
输出格式
对每组测试用例:
- 若存在满足要求的矩阵,输出
Yes,随后 行,每行一个长度为 的字符串,只由0和1组成,表示矩阵的一行; - 若不存在,输出一行
No。
3
2 3
0 0
1 0 1
2 2
1 0
1 0
1 2
0
1 1
Yes
000
101
Yes
01
11
Yes
11
样例 1 解释
第 1 组:、,要求第 行的异或和都是 ,三列的异或和分别是 。样例输出
000
101
第 行 、第 行 ,两行都满足;三列分别是 、、,也都满足。
第 2 组:,要求两行的异或和分别是 ,两列的异或和分别是 。样例输出
01
11
第 行 、第 行 ;第 列 、第 列 ,行列都满足要求。
第 3 组:、,要求这一行的异或和是 ,两列的异或和分别是 。样例输出 11:这一行 ,两列各自只有一个数,分别是 和 ,都满足要求。
样例 2
见 parity2.in 与 parity2.ans。
样例 3
见 parity3.in 与 parity3.ans。
数据范围
对于所有测试数据,保证:
- ;
- ;
- ;
- 所有测试用例的 之和不超过 。
子任务
本题共 20 个测试点,按测试点计分:
| 测试点 | 分值 | 每个测试点 | 特殊限制 |
|---|---|---|---|
| 无额外限制 |
每个测试点单独评分,全部测试点的得分之和即为本题得分。