Hrbust 1688 数论中的异或【思维+数论异或】好题~
来源:互联网 发布:angela baby 知乎 编辑:程序博客网 时间:2024/04/30 13:34
数论中的异或Time Limit: 1000 MSMemory Limit: 32768 KTotal Submit: 42(27 users)Total Accepted: 26(25 users)Rating: Special Judge: NoDescription给出两集合A和B, 找出最小的非负整数x使得A⊕x=B.
假设A={a1,a2,…,an}, A⊕x={a1⊕x,a2⊕x,…,an⊕x}.⊕代表异或操作Input输入的第一行是一个整数T,表示一共有T组测试数据;
对于每组测试数据,第一行是一个整数n代表集合A和B的大小
第二行包含n个整数a1,a2,a3,....an,代表集合A的元素。
第三行包含n个整数b1,b2,b3,....bn,代表集合B的元素。
(1<=n<=100000,n是奇数,0<=ai<2^30)
Output如果存在x就输出最小的x,如果不存在就输出-1。Sample Input1
3
0 1 3
1 2 3Sample Output2Author陈禹@HRBUST
假设A={a1,a2,…,an}, A⊕x={a1⊕x,a2⊕x,…,an⊕x}.⊕代表异或操作Input输入的第一行是一个整数T,表示一共有T组测试数据;
对于每组测试数据,第一行是一个整数n代表集合A和B的大小
第二行包含n个整数a1,a2,a3,....an,代表集合A的元素。
第三行包含n个整数b1,b2,b3,....bn,代表集合B的元素。
(1<=n<=100000,n是奇数,0<=ai<2^30)
Output如果存在x就输出最小的x,如果不存在就输出-1。Sample Input1
3
0 1 3
1 2 3Sample Output2Author陈禹@HRBUST
思路(其实不难啊~,窝做好久啊,好菜啊):
1、首先知道一点,X^X=0,X^X^X=X,X^X^X^X=0;
那么X异或的次数为奇数次,得到的值就是其本身,如果是偶数次,那么结果就是0.
2、
①其次再知道一点A^X=X^A.
异或的结果和其异或的先后顺序是无关的。
②再次我们又知道一点A^X=B,A^B=X;
③那么我们知道如果有一个值X,使得其满足题意,那么肯定有:Ai^Bj=X;
④接下来我们观察到N是奇数,那么我们将所有的Ai和Bi都异或到一起有:A1^A2^A3^..........^An^B1^B2^B3^..........^Bn.那么我们假设有一个X能够满足题意,那么N如果是奇数,那么其结果就是X.对应如果没有一个X能够满足题意,那鬼知道结果是个什么玩意...
⑤那么接下来我们对于这个异或值进行判定,O(n)的处理出来和B集合判断是否等同即可,如果等同,那么这个X就是结果,否则输出-1即可。
Ac代码:
#include<stdio.h>#include<string.h>#include<algorithm>using namespace std;int a[100060];int b[100060];int c[100060];int main(){ int t; scanf("%d",&t); while(t--) { int n; scanf("%d",&n); int ans=0; for(int i=0;i<n;i++) { scanf("%d",&a[i]); ans^=a[i]; } for(int i=0;i<n;i++) { scanf("%d",&b[i]); ans^=b[i]; } for(int i=0;i<n;i++) { c[i]=a[i]^ans; } sort(c,c+n); int flag=0; for(int i=0;i<n;i++) { if(c[i]==b[i])continue; else flag=1; } if(flag==0) { printf("%d\n",ans); } else printf("-1\n"); }}
0 0
- Hrbust 1688 数论中的异或【思维+数论异或】好题~
- 【数论】GCD XOR, ACM/ICPC Dhaka 2013, UVa12716 【异或】【好题】
- UVA 12716 GCD XOR (数论 gcd和异或不等式)
- 51nod 1677 treecnt【Dfs+思维+数论】好题
- poj1845 数论好题
- Hrbust 1717最大异或值
- 最大公约数 与 异或 UVA GCD XOR 数论小技巧记录
- 【数论-异或】nyoj-备用 2345: A problem that's so easy
- Num(数论(或打表))
- Codeforces 501C:Misha and Forest(好题+思维+异或的运算规律+树)
- HDU2481 Toy (数论好题)
- Acdream 1096 签到 异或思维题
- hrbust 1539 选课【思维+贪心】好题
- hrbust 1774 succession【思维】好题
- Hrbust 1980 Failed【思维】好题!
- HDU 5114 思维 + 数论
- 数论
- 数论
- 字符串同构问题——leetcode205/leetcode290
- python的魔法方法
- poj2104
- 微信小程序
- LBP(四)
- Hrbust 1688 数论中的异或【思维+数论异或】好题~
- bzoj 3223 splay模板 【pascal】
- 欢迎使用CSDN-markdown编辑器
- 欢迎使用CSDN-markdown编辑器
- Qt mingw编译MySQL驱动和连接MySQL数据库
- Shell脚本并杀死进程
- 微信小程序
- LintCode(M)两数之和
- Caffe学习系列(11):图像数据转换成db(leveldb/lmdb)文件