D - Vasya And The Matrix (数论异或)
现在小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", 然后接下来的n行m 列输出ci1, ci2, ... , cim (0 ≤ cij ≤ 2·109) — 即符合条件的矩阵。
如果有多个矩阵符合条件,输出任意一个。
Examples
2 3
2 9
5 3 13
YES
3 4 5
6 7 8
3 3
1 7 6
2 15 12
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\n"); for(int i = 1; i <= n; ++i) //打印矩阵 { for(int j = 1; j <= m; ++j) printf("%d ", mp[i][j]); printf("\n"); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现