竞赛题

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;
}

最新文章

  1. 耿丹CS16-2班第四次作业汇总
  2. 返回值是TEXT的阿贾克斯方法
  3. 实验二 用C语言表示进程的调度
  4. Tree:加载列表数据
  5. xcode的类库报错,如何解决
  6. Asp.Net异步导入Excel
  7. LR回放测试脚本
  8. JAVA四种线程池实例
  9. Python系列之多线程、多进程
  10. HTML5新特性: 自定义属性前缀data-以及dataset的使用
  11. Spark环境搭建(上)——基础环境搭建
  12. 设置UIButton中的文字和图片,设置UILabel的文在显示不同颜色
  13. Powershell-远程操作
  14. web测试实践——day01
  15. 背水一战 Windows 10 (113) - 锁屏: 将 Application 的 Badge 通知和 Tile 通知发送到锁屏, 将 secondary tile 的 Badge 通知和 Tile 通知发送到锁屏
  16. CSS 定位与Z-index
  17. Hibernate的继承映射
  18. Hadoop生态圈-CDH与HUE使用案例
  19. org/apache/maven/cli/MavenCli : Unsupported major.minor version 51.0
  20. 【题解】 bzoj2435: [Noi2011]道路修建 (傻逼题)

热门文章

  1. mybatis 源码学习(二)sqlsession
  2. redis-bitmap 命令使用的一些帖子
  3. BT种子文件文件结构分析(转)
  4. MongoDb 出现配置服务不同步的处理
  5. 【java】httpclient的使用之java代码内发送http请求
  6. 算法——字符串匹配之BM算法
  7. RecyclerView onItemClick button和布局都有单击事件时的处理方式
  8. openssl之BIO系列之12---文件描写叙述符(fd)类型BIO
  9. nodejs REPL(交互式解释器)
  10. pjblog支持QQ、新浪微博一键登录