题目大意是:给出 $N$ 个正整数,其中至多有一个数只出现一次,其余的数都出现了两次。判断是否有某个数只出现一次,若有输出这个数,否则输出“-1”。 $1\le N\le 5000000$

这道题的正解是用位运算中的异或 XOR (^)

位运算有一个重要性质:与顺序无关。

证明:
1^0=1, 0^0=0
1^1=0, 0^1=1
即0,1与0异或不变,与1异或取反,所以与0异或可以忽略。只考虑1。若 $m$ 个 0, $n$ 个 1 逐次取反,考虑把其中任一位置于开头,若开头是0,则结果为0取反 $n$ 次,若开头是1,则结果为1取反 $n-1$ 次,两者必然相等。所以异或运算是可任意交换位置,任意加括号的。

至于这道题,若 $N$ 是偶数,必然没有只出现一次的数,若 $N$ 是奇数,根据上面的证明,将 0 与这 $N$ 个数逐次异或,最后得到的数就是只出现了一次的那个。异或运算不用特别考虑符号位,代码中 unsigned 型换成 int 也行。

#include<cstdio>
using namespace std;
int main()
{
unsigned t;
scanf("%u",&t);
while(t--)
{
unsigned k=, n, id;
scanf("%u",&n);
if(n%==)
{
for(int i=; i<n; i++) scanf("%u",&id);//虽然到这步就可以直接判断但还是要接着读后面的数据
printf("-1\n");
continue;
}
for(int i=; i<n; i++)
{
scanf("%u",&id);
k^=id;
}
printf("%u\n",k);
}
return ;
}

DLUTOJ1216的更多相关文章

随机推荐

  1. 发布了Android的App,我要开源几个组件!

    做了一款App,本来是毕业设计但是毕业的时候还没有做完,因为大部分时间都改论文去了,你们都懂的.现在毕业了在工作之余把App基本上做完了.为什么说基本上呢,因为我觉得还有很多功能还没实现,还要很多bu ...

  2. 【AS3】Flash与后台数据交换四种方法整理

    随着Flash Player 9的普及,AS3编程也越来越多了,所以这次重新整理AS3下几种与后台数据交换方法.1.URLLoader(URLStream)2.FlashRemoting3.XMLSo ...

  3. PRML读书会第十章 Approximate Inference(近似推断,变分推断,KL散度,平均场, Mean Field )

    主讲人 戴玮 (新浪微博: @戴玮_CASIA) Wilbur_中博(1954123) 20:02:04 我们在前面看到,概率推断的核心任务就是计算某分布下的某个函数的期望.或者计算边缘概率分布.条件 ...

  4. [MCSM]伪随机数和伪随机数生成器

    1. 几个问题 为什么需要随机数? 伪随机数伪在哪里? 为何要采用伪随机数代替随机数?这种代替是否有不利影响? 如何产生(伪)随机数? 以下内容将围绕这几个问题依次说明. 2. 参考 http://e ...

  5. OS存储器管理(一)

    存储器的层次: 分为寄存器.主存(内存)和 辅存(外存)三个层次. 主存:高速缓冲存储器.主存储器.磁盘缓冲存储器, 主存又称为可执行存储器: 辅存:固定磁盘存储器.可移动的外部存储器: 其可长期保存 ...

  6. Bootstrap系列 -- 6. 列表

    一. 普通无序列表 <ul> <li>无序列表项目</li> <li>无序列表项目</li> <li>无序列表项目</li ...

  7. jquery的getjson与jsonp

    仔细的学习jquery的getjson的用法. http://www.cnblogs.com/leejersey/p/3750232.html http://www.jb51.net/article/ ...

  8. ListView简介

    说起来,简介这种东西我一般都会去百度,不过似乎这样太没诚意了.╮(╯▽╰)╭ 没办法我再去查查别的资料 官方API,说的啥呢?经过一番研究我终于读懂了....╮(╯▽╰)╭ (让一个英语三级的学渣来分 ...

  9. “CEPH浅析”系列之六——CEPH与OPENSTACK

    在 <"Ceph浅析"系列之二--Ceph概况>中即已提到,关注Ceph的原因之一,就是OpenStack社区对于Ceph的重视.因此,本文将对Ceph在OpenSta ...

  10. Android延时执行的几种方法

    开启新线程 new Thread(new Runnable(){ public void run(){ Thread.sleep(XXXX); handler.sendMessage(); //告诉主 ...