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的更多相关文章
随机推荐
- 利用performance属性查看网页性能
一般我们可以通过浏览器的调试工具-网络面板,或者代理工具查看网页加载过程中的各个阶段的耗时.而利用window.performance属性则可以获得更为精确的原始数据,以毫秒为单位,精确到微秒. pe ...
- 天龙客户端的ResourceManager
今天培训的时候,Leader针对项目结构讲了很多分层架构的思想,思路,对我而言有很大的助益,学会了将需求分层,或者说先设计出各个层次,然后有需求后落实到对应的层次上,尤其对于刚开始的架构设计阶段,能把 ...
- 半平面交模板(BZOJ1007)
#include<cstdio> #include<algorithm> #define LDB long double using namespace std; ]; str ...
- CSS与JQuery的相关问题
文字隐藏:p div里面的文字过长时隐藏文字: overflow:hidden; text-overflow:ellipsis; white-space:nowrap; --------------- ...
- 如何设置div高度为100%
div高度通常都是固定值,直接将div高度设为100%是无效的,那么如何设置才能有效呢? 直接给div设置height:100%即可,无效的原因一定是父元素的高度为0,最常见的就是给body的直接元素 ...
- 【Android 开发】: Android 消息处理机制之一: Handler 与 Message
最近几讲内容,我们学习了Android中关于多线程的一些知识,上一讲我们讲解了异步任务 AsyncTask 的操作,Android中还提供了其他的线程操作,如Handler Message Messa ...
- PHP自学链接收藏
PHP之道 laravist Sublime Text 3
- 'hibernate.dialect' must be set when no Connection avalable’
一个错误'hibernate.dialect' must be set when no Connection avalable ‘ 网上也有不少人遇到这种问题,看上去好像是跟Hibernate的方言有 ...
- android-之测试框架的使用AndroidTestCase
Android Manifest.xml中所需要添加的配置 <instrumentation android:name="android.test.InstrumentationTes ...
- BIM软件小技巧:Revit2014所有快捷键汇总表格
命令 快捷键 路径 修改 MD 创建>选择; 插入>选择; 注释>选择; 视图>选择; 管理>选择; 修改>选择; 建筑>选择; 结构>选择; 系统 ...