题目传送门:
http://acm.hdu.edu.cn/showproblem.php?pid=2095

异或xor运算是在计算机导论上接触过的一种运算,课上并没有深究,但是其实异或有很多好用的性质。

一、异或的定义

a⊕b = (¬a ∧ b) ∨ (a ∧¬b)
相同为1,不同为0

二、异或的性质

1.交换率与结合律

a ⊕ b = b ⊕ a
a ⊕ b ⊕ c = a ⊕ (b ⊕ c) = (a ⊕ b) ⊕ c
由异或的定义可以证明该性质

2.恒等率与归零率

X ⊕ 0 = X
X ⊕ X = 0

三、异或的应用

1.快速判等

实现: a ^ b == 0
相比于 a == b , 使用异或进行判断具有更快的速度。

2.不使用中间变量实现变量交换

实现:a = a ^ b; b = a ^ b; a = a ^ b;
可以类比 a = a + b; b = a - b; a = a - b; 的实现方式去理解,不过采用加法的方式有可能会造成数值的溢出,而采用异或的方法则不会产生这一问题。在大规模的数据交换中,使用异或的效率是最高的。

3.实现特定的位翻转

实现:利用异或的性质,构造掩码,掩码中要翻转的位为1,其他的位为0。

4. 判断二进制中1的个数是奇是偶

实现:将二进制中从第一位到最后一位作异或运算,结果是1说明1的个数是奇数,结果为0说明1的个数是偶数

5.一个数组中只有一个数字出现了一次,其余都出现了两次,求这个数字(HDOJ 2095)

实现:设一个临时变量并初始化为0,用它和所有数字进行一次异或运算,结果就是这个数字。

6.汇编语言中的变量置0

实现:xor a,a

有了这些性质和应用,显然这道题就是水题一道了。
注意用std::cin会超时……

// xor#include <iostream>
#include <cstdio>using namespace std;int main(int argc, char const *argv[])
{int n;while (scanf("%d",&n), n) {int ans = 0;for (int i = 0; i < n; ++i){int temp;scanf("%d",&temp);ans ^= temp;}printf("%d\n",ans);}return 0;
}

参考:
https://www.lijinma.com/blog/2014/05/29/amazing-xor/
http://baike.baidu.com/link?url=Yr1Df81bxKA5l6G0fXThPB8aXlgJ7SHNLOlpP1YtSYFAkSoT5PKTJJYcMvXOcZyPJPV3vQUwCvn7youjHo7rOloLrvcqA1tnaTjsOLhklDA_-JLHz06g51rCfKv8lmtKBAEVX9urPD4mGfs-vR5pZa
https://www.zhihu.com/question/31116687
http://wenku.baidu.com/link?url=nGuPw7x9HQc_wjxFFSz-dUfZuxV2Omp9-d17wq3ljJSNqNZU5lZNsH8uu6gL5hk5Q__CWlMIVSmnNI0d559FL5DG_PWu4Ucg0fWkxE5s0Ny
http://www.cnblogs.com/danh/archive/2010/12/24/1915810.html

异或的性质 HDOJ 2095 find your present (2)相关推荐

  1. 【Codeforces/HDU】76A Plus and xor / 2095 find your present (2)(异或)。

    http://codeforces.com/contest/76/problem/D A = X + Y B = X xor Y 异或(不进位加法):两个二进制数,对应的位置上,相同为0,不同为1 性 ...

  2. A. Sasha and a Bit of Relax(异或的性质 + 前缀和的性质)

    Problem - 1109A - Codeforces Sasha喜欢编程.有一次,在一场很长时间的比赛中,萨沙觉得他有点累了,需要放松一下.他照做了.但由于萨沙不是一个普通人,他更喜欢不同寻常地放 ...

  3. 用异或的性质实现简单加密解密

    异或运算用^表示,对a,b两整数进行异或操作是当两数的二进制对应位置不同时,结果的该位为1,否则为0. 异或运算有一个性质:  当a^b=c,则c^b=a,即同一个数对a进行两次异或的结果还是a. 利 ...

  4. 异或运算法则 hdu 2095

    异或运算法则 1. a ^ b = b ^ a 2. a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c; 3. d = a ^ b ^ c 可以推出 a = d ^ b ^ ...

  5. HDU 2095 find your present (2)

    原以为这是一纯水题,就果断开了1000000了数组给它(1300多K),没想Memory果断超了,后来又用链表做(写了2000多K),再次无情的被Memory刷了,无耐百度一下,竟然发现别人的代码才3 ...

  6. 异或、异或和 的性质及应用总结

    一:异或的含义 或在数学中的含义:一个元素在集合A中或在集合B中,或的维恩图如下: 而异或是不允许共存的,所以 A ^ B 的维恩图如下: 同理对于 A ^ B ^ C 维恩图: 异或运算{\disp ...

  7. 异或运算符的性质及使用

    平时书写代码的时候,将a和b的值进行交换需要用到临时变量,例如: int a = 17; int b = 10; int temp = 0; temp = a; a = b; b = temp; 而用 ...

  8. 杭电ACM基础题(2075、2076、2078、2081、2083、2088、2090、2092、2093、2095)

    文章目录 2075.A能否被B整除 2076.时针和分针之间夹角有多大 2078.复习效率的最大值 2081.手机短号 2083.简易版之最短距离 2088.Box of Bricks 2090.算菜 ...

  9. 左神讲算法——异或的高级操作(两数交换+经典面试题)

    目录 1. 异或的性质 2. 两数交换 3. 经典面试例题 参考链接:2021最新左神数据结构算法全家桶 1. 异或的性质 异或可以看成相同为1,不同为0:也可以看作无进位相加,有奇数个1则结果为1, ...

最新文章

  1. linux 内核 同步机制
  2. 浅谈C语言的基本数据类型
  3. socket closed是什么意思_socket请求
  4. 动物和计算机-自组织是悬空的钢丝
  5. 【Android】命令行jarsigner签字和解决找不到证书链错误
  6. 冲击年薪50万的AI学习指南,限时免费~
  7. wpf项目无法使用针式打印机_针式打印机更换色带芯
  8. 用ipv6地址打开samba共享目录
  9. 星起航:亚马逊全球开店品牌负责人唐浩表示“中国品牌出海的黄金时代已经到来”
  10. ps正在初始化html表面然后进不去,如何解决维护PE卡在加载界面无法继续
  11. 【Socket编程】Python实现一个服务端,多个客户端接入
  12. 浏览器的input禁用输入法
  13. 多规格的商品选择不同的规格值影响其他规格使之不可选
  14. 图片怎么压缩?这些方法值得收藏
  15. python多元非线性回归_day-13 python库实现简单非线性回归应用
  16. Promise ,Promise.all 和Promise.race的区别
  17. 你知道有哪些用于文件同步的方法?
  18. 我的世界服务器怎么弄领地语言,我的世界领地指令大全 教你如何设置领地
  19. 2022保密教育线上培训考试 05
  20. 关于圣经的十大误解 Top 10 Misconceptions About The Bible

热门文章

  1. 小程序上传视频的php接口处理,微信小程序[第十二篇] -- 上传视频
  2. 电容旁路(bypass)和去耦(decoupling)的区别
  3. 沈阳师范大学大二上数据结构第一章绪论(选择+单选+填空))
  4. erdas裁剪影像_在arcgis、ERDAS下如何进行影像图裁剪
  5. R语言加载xlsx报错错误: JAVA_HOME cannot be determined from the Registry解决方法
  6. 区块链界的微信BTchat链语横空出世,它是什么鬼?
  7. 在电脑上怎么做判断题打√或x_苹果Mac电脑知识竞赛考试题
  8. 计量广义差分操作过程_计量经济学总结
  9. 道格拉斯-普克 抽稀算法
  10. 千子晨婚纱摄影 vs 绝色摄影