竞赛题

F  还有两个东西

Time Limit:400MS  Memory Limit:65535K

题型: 编程题   语言: 无限制

描述

给出n( n >= 2 )个整数,其中有 2 个数 a , b 只出现过一次 , 并且 a != b , 其他数都只出现偶数次 , 问这两个数分别是什么 ?

输入格式

第一行输入一个n ( 2 <= n <= 2000000 )
第二行输入 n 个数 xi ( 0 <= xi < 10^9 ) , 用空格隔开

输出格式

分别输出两个数 a , b ( a <= b ) 

输入样例

4
7 7 9 8

输出样例

8 9

由于时间条件苛刻,排序的方法nlogn的方法也过不了,只能用n的方法。

这里利用到异或:

1.一个数异或0等于它本身

2.两个相同的数异或等于0,

3.异或满足交换律

4.当a^b=c时, 满足c^a=b 和c^b=a

题解:

将所有数字异或,由于其他数都出现偶数次,那么他们的异或结果为0,所以最终的结果为:这两个只出现一次的数的异或结果s。异或,即在某一位上,不同才为1。

由于这两个是不同的数,那么他们的二进制至少有一位不同,而此时s在这个位上为1。所以做法是:找出s从右边起,二进制第一个为1的位置,然后根据这个位置,

对数组用ans1和ans2进行分组异或。由于相同的数必定分在同一组,且除这两个数外,其他数都出现偶数次,这表明这些数都“消了”,只剩下只出现一次的数,且

这两个数分在不同的组,ans1,
ans2的最终结果,即为这两个数。

代码如下:

#include<cstdio>
#include<cstring> using namespace std; int a[2000005]; int main()
{
int n, i, s = 0, pos = 0, ans1 = 0,ans2 = 0;
scanf("%d",&n); for(i = 0; i<n; i++)
{
scanf("%d",&a[i]);
s ^= a[i];
} while((s&1)==0 && pos<32)
pos++, s = s>>1; for(i = 0; i<n; i++)
{
if((a[i]>>pos)&1)
ans1 ^= a[i];
else
ans2 ^=a[i];
} if(ans1<ans2)
printf("%d %d\n",ans1,ans2);
else
printf("%d %d\n",ans2,ans1); return 0;
}

SCAU 还有两个东西 —— 异或的更多相关文章

  1. FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火

        注:吴翰清——中国网络安全圈最具影响力的人物之一.西安交大少年班毕业,大学期间创办民间组织幻影,阿里巴巴集团最年轻的高级安全专家,创新工场安全宝任联合副总裁,热门公众微信“道哥的黑板报”幕后作 ...

  2. C语言位操作--判断两整数是否异号

    判断两整数是否异号: int x, y; //输入比较的两数 bool f = ((x ^ y) < 0); // 返回真,当且仅当x与y异号 说明:当x.y异号,x与y的最高位分别为0和1,取 ...

  3. java 判断两个数是否异号

    java 整型int占4个字节32位,两个数异或后移动31位判断结果,如果是1则异号,如果是0则同号 public class ShowEnviromentViarible { public stat ...

  4. HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解

    目录 题意: 解析 原题描述 字典树动态求Mex @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\ ...

  5. CPython,PyPy?Python和这两个东西有什么关系

    https://blog.csdn.net/fu6543210/article/details/90770794 python是一种编程语言.但这种语言有多种实现,而且与其他语言不同,python并没 ...

  6. Codeforces 1511G - Chips on a Board(01trie/倍增)

    Codeforces 题面传送门 & 洛谷题面传送门 一道名副其实的 hot tea 首先显然可以发现这俩人在玩 Nim 游戏,因此对于一个 \(c_i\in[l,r]\) 其 SG 值就是 ...

  7. (二进制 异或)Team Formation --ZOJ --3870

    链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3870 http://acm.hust.edu.cn/vjudge/ ...

  8. bzoj 4017: 小Q的无敌异或

    4017: 小Q的无敌异或 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 593  Solved: 197[Submit][Status][Discu ...

  9. scau 8616 汽车拉力比赛

          上次我们过了二分图的最佳匹配,现在我们看一道题目,经典的二分图的最佳匹配题目 8616 汽车拉力比赛 时间限制:500MS  内存限制:1000K提交次数:71 通过次数:24 题型: 编 ...

随机推荐

  1. 空扫描Idle Scanning

    空扫描Idle Scanning   空扫描Idle Scanning是一种借助第三方实施的端口扫描技术,可以很好的隐蔽扫描主机本身.它的实现基于以下两个TCP工作机制.   (1)在TCP三次握手阶 ...

  2. 【面试】最容易被问到的N种排序算法!

    面试官:小明,是吧?你都知道哪些排序算法,哪几种是稳定排序? 小明:这个我有总结! 关于排序稳定性的定义 通俗地讲就是能保证排序前两个相等的数其在序列的前后位置顺序和排序后它们两个的前后位置顺序相同. ...

  3. 使用JAXP对xml文档进行DOM解析基础

    XML解析方式分为两种:dom和sax         dom:(Document Object Model, 即文档对象模型) 是 W3C 组织推荐的处理 XML 的一种方式.       sax: ...

  4. A Good User Interface

    has high conversion rates and is easy to use. In other words, it's nice to both the business side as ...

  5. C# PropertyGrid控件应用心得 【转】

    源文 : http://blog.csdn.net/luyifeiniu/article/details/5426960 c#stringattributesobjectmicrosoftclass ...

  6. 自己封装的CMusic类 【转】

    http://www.cnblogs.com/zhangminaxiang/archive/2013/02/27/2936011.html 缘由: 在改正俄罗斯方块程序的功能的时候,想给这个程序增加一 ...

  7. HDU 1253:胜利大逃亡(简单三维BFS)

    pid=1253">胜利大逃亡 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/ ...

  8. xgboost的SparkWithDataFrame版本实现

    再xgboost的源码中有xgboost的SparkWithDataFrame的实现,如下:https://github.com/dmlc/xgboost/tree/master/jvm-packag ...

  9. mysql 授权新的root用户

    grant all privileges to *.* on system@'localhost' identified by 'woshishui' with grant option;

  10. html嵌套规则

    本人半路出家的  今天学习js的时候写了一个a嵌套a标签结果js报错 一直找不到原因 专门找了一下html嵌套规则看了一下 1.块级元素 一般用来搭建网站架构.布局.承载内容……它包括以下这些标签: ...