竞赛题

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. Linux字符模式下如何设置/删除环境变量

    Linux字符模式下设置/删除环境变量方法: bash下 设置:export 变量名=变量值 删除:unset 变量名 csh下 设置:setenv 变量名 变量值 删除:unsetenv 变量名 h ...

  2. CDOJ 3 BiliBili, ACFun… And More! 模拟

    原题链接:http://acm.uestc.edu.cn/#/problem/show/3 题意: 有个人在看B站视频时有个习惯,就是每当卡住的时候,他总再次从头开始看.另外,他在看视频时会先等待T的 ...

  3. BZOJ3295动态逆序对

    一道比较傻的CDQ分治 CDQ: 主要用于解决三位偏序的问题 #include<cstdio> #include<cctype> #include<algorithm&g ...

  4. mc

    Description 小C在MC里有n个牧场,自西向东呈一字形排列(自西向东用1-n编号),于是他就烦恼了:为了控制这n个牧场,他需要在某些牧场上面建立控制站, 每个牧场上只能建立一个控制站,每个控 ...

  5. Extjs grid增加或删除列后记住滚动条的位置

    IE下验证好使. { text: "Del", icon: 'Scripts/Ext/resources/images/icons/application_form_delete. ...

  6. Opencv 最小外接矩形合并拼接

    前一篇画出了最小外接矩形,但是有时候画出来的矩形由于中间像素干扰或者是其他原因矩形框并不是真正想要的 如图1是一个信号的雨图,被矩形框分割成了多个小框: 需要合并矩形框达到的效果: 主要思想: 扫描两 ...

  7. Redis安装过程

    Redis在windows下安装过程 学习了:https://www.cnblogs.com/M-LittleBird/p/5902850.html 学习了:http://www.runoob.com ...

  8. 深入Garbage First垃圾收集器(三)G1中的垃圾收集

    G1 GC在收集暂停的过程中会回收绝大部分堆分区,唯一的例外是多级并发标记期间的清除阶段. 在清除阶段,如果G1遇到仅仅只存放了垃圾的分区,它就会立刻收集这些分区并将它们放回空闲分区列表中,因此这些分 ...

  9. PHP部分--file图片上传服务器、图片路径存入数据库,并读取

    前端代码 <form action="shangchuan.php" method="post" enctype="multipart/form ...

  10. PHP date()获取系统时间不对

    使用date_default_timezone_set(”)方法; <?php error_reporting(0); date_default_timezone_set('PRC'); hea ...