DLUTOJ1216
题目大意是:给出 $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的更多相关文章
随机推荐
- 【转】CSS Sprites教程大全(使用方法、工具介绍)
什么是CSS Sprite CSS Sprite 又叫CSS精灵,是目前大型网站中经常运用的图片处理方式.它的原理很简单,将网站上零散的小图片(或图标)整合在一张大图上,再用CSS中“backgrou ...
- 微软虚拟学院MVA 字幕获取方法
微软虚拟学院(MVA)上有一些不错的视频教程,但是,蛋疼的一点那就是视频要不就慢,要不就卡,总之当你的思维跟着视频深入的时候,duang~,卡一下,说不定就要重头开始,所幸的是提供了视频下载,下载速度 ...
- 防止 JavaScript 自动插入分号
JavaScript语言有一个机制:在解析时,能够在一句话后面自动插入一个分号,用来修改语句末尾遗漏的分号分隔符. 然而,由于这个自动插入的分号与JavaScript语言的另一个机制发生了冲突,即所有 ...
- 【算法之美】你可能想不到的归并排序的神奇应用 — leetcode 327. Count of Range Sum
又是一道有意思的题目,Count of Range Sum.(PS:leetcode 我已经做了 190 道,欢迎围观全部题解 https://github.com/hanzichi/leetcode ...
- 使用pngquant来压缩png资源缩小apk
最近发现了一个叫做pngquant的工具,可以有效的压缩资源文件中的png文件,从而减小发布的apk的大小.我发现这个工具有两个特点: 1. 真无损,压缩后重新运行了我的app发现是没有任何区别的 2 ...
- ul、li模仿ios的TableView实现城市选择
最近项目一个接着一个,之前说的精创环的项目还没做完,今天说先把那个放一下,先做访客系统,销售会见客户之后可以对客户进行一个跟踪记录,原型图也给了,今日头条的频道自定义页面一样. 如果是在IOS上让我来 ...
- pageEncoding与contentType属性
1图例分析 由图中可以看出,这个两个属性没有任何关系. 把这两个设置成不同的编码格式对中文显示不会产生任何影响 2.原因分析 pageEncoding规定了以什么编码方式存储和读取,使两者保持一致性, ...
- 在eclipse中使用第三方库总结
一.建立user library 导入第三方jar文件,最简单的方式是:右键工程/属性/java build path/add external jars. 另一种方式是:window/prefren ...
- Spring学习进阶(四) Spring JDBC
Spring JDBC是Spring所提供的持久层技术.主要目的是降低使用JDBC API的门槛,以一种更直接,更简洁的方式使用JDBC API.在Spring JDBC里用户仅需要做哪些比不可少的事 ...
- 使用Git时一些问题的处理
更新日志: 2016.06.04 晚 添加 git push --force (用于删除高版本的commit) 2015.11.29 晚 添加冲突处理工具Meld的教程 添加在GitHub上Rever ...