SCAU 还有两个东西 —— 异或
竞赛题F 还有两个东西Time Limit:400MS Memory Limit:65535K 题型: 编程题 语言: 无限制 描述给出n( n >= 2 )个整数,其中有 2 个数 a , b 只出现过一次 , 并且 a != b , 其他数都只出现偶数次 , 问这两个数分别是什么 ? 输入格式第一行输入一个n ( 2 <= n <= 2000000 ) 输出格式分别输出两个数 a , b ( a <= b ) 输入样例4 输出样例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 还有两个东西 —— 异或的更多相关文章
- FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火
注:吴翰清——中国网络安全圈最具影响力的人物之一.西安交大少年班毕业,大学期间创办民间组织幻影,阿里巴巴集团最年轻的高级安全专家,创新工场安全宝任联合副总裁,热门公众微信“道哥的黑板报”幕后作 ...
- C语言位操作--判断两整数是否异号
判断两整数是否异号: int x, y; //输入比较的两数 bool f = ((x ^ y) < 0); // 返回真,当且仅当x与y异号 说明:当x.y异号,x与y的最高位分别为0和1,取 ...
- java 判断两个数是否异号
java 整型int占4个字节32位,两个数异或后移动31位判断结果,如果是1则异号,如果是0则同号 public class ShowEnviromentViarible { public stat ...
- HDU 6625 three arrays 求两个序列异或最小值的排列(一个可以推广的正解
目录 题意: 解析 原题描述 字典树动态求Mex @(hdu 6625求两个序列异或最小值的排列) 题意: \(T(100)\)组,每组两个长度为\(n(100000)\)的排列,你可以将\(a[]\ ...
- CPython,PyPy?Python和这两个东西有什么关系
https://blog.csdn.net/fu6543210/article/details/90770794 python是一种编程语言.但这种语言有多种实现,而且与其他语言不同,python并没 ...
- Codeforces 1511G - Chips on a Board(01trie/倍增)
Codeforces 题面传送门 & 洛谷题面传送门 一道名副其实的 hot tea 首先显然可以发现这俩人在玩 Nim 游戏,因此对于一个 \(c_i\in[l,r]\) 其 SG 值就是 ...
- (二进制 异或)Team Formation --ZOJ --3870
链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3870 http://acm.hust.edu.cn/vjudge/ ...
- bzoj 4017: 小Q的无敌异或
4017: 小Q的无敌异或 Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 593 Solved: 197[Submit][Status][Discu ...
- scau 8616 汽车拉力比赛
上次我们过了二分图的最佳匹配,现在我们看一道题目,经典的二分图的最佳匹配题目 8616 汽车拉力比赛 时间限制:500MS 内存限制:1000K提交次数:71 通过次数:24 题型: 编 ...
随机推荐
- 洛谷——P1086 花生采摘
P1086 花生采摘 题目描述 鲁宾逊先生有一只宠物猴,名叫多多.这天,他们两个正沿着乡间小路散步,突然发现路边的告示牌上贴着一张小小的纸条:“欢迎免费品尝我种的花生!――熊字”. 鲁宾逊先生和多多都 ...
- 串口VMIN VTIME 详解
原文地址: 以前跟着做过VxWorks的开发,主要通信方式是串口,因为底层BSP包已经做好了,串口通信非常简单.后来接触Linux,在一块OK6410上跑Linux串口通信,才发现原来天真的以为甚是简 ...
- 分享Kali Linux 2017年第11周镜像文件
分享Kali Linux 2017年第11周镜像文件 Kali?Linux官方于3月12日发布2017年的第11周镜像.这次维持了11个镜像文件的规模.默认的Gnome桌面的4个镜像,E17.KDE ...
- java基础第三篇
6.Java 中的容器(重点) a.变量:变量是一个容器,它存储的单个值 //int i=3; 1.局部变量:定义在方法中,没有默认值 2.成员变量:定义在类中方法外,这个事物的属性(特征)定义为成员 ...
- fastscripT实现权限控制
fastscripT权限控制 此处以FASTSCRIPT实现功能权限为例,用脚本实现数据权限也是很方便的. unit Unit1; interface uses Winapi.Windows, Win ...
- Android Glide源码分析
1. 功能介绍 图片加载框架,相对于UniversalImageLoader,Picasso,它还支持video,Gif,SVG格式,支持缩略图请求,旨在打造更好的列表图片滑动体验.Glide有生命周 ...
- iOS -- 原生NSStream实现socket
- (void)startSocket:(NSString *)address andPort:(int)port { CFReadStreamRef readRef; CFWriteStreamRe ...
- Nutch学习笔记一 ---环境搭建
学习环境: ubuntu 概要: Nutch 是一个开源Java 实现的搜索引擎.它提供了我们运行自己的搜索引擎所需的全部工具.包括全文搜索和Web爬虫. 通过nutch,诞生了hadoop.tika ...
- 使用正則表達式对URL进行解析
对URL进行解析,一般用到的參数有: 1.协议 如http,https 2.域名或IP 3.port号,如7001,8080 4.Web上下文 5.URI.请求资源地址 6.请求參数 一个URL演示样 ...
- java性能监控工具jps-windows
jps Lists the instrumented Java Virtual Machines (JVMs) on the target system. This command is experi ...