首页 > 代码库 > 九度OJ 1351 数组中只出现一次的数字 (位操作)
九度OJ 1351 数组中只出现一次的数字 (位操作)
时间限制:1 秒
内存限制:32 兆
特殊判题:否
提交:2597
解决:766
- 题目描述:
- 一个整型数组里除了两个数字之外,其他的数字都出现了两次。请写程序找出这两个只出现一次的数字。
- 输入:
- 每个测试案例包括两行:第一行包含一个整数n,表示数组大小。2<=n <= 10^6。第二行包含n个整数,表示数组元素,元素均为int。
- 输出:
- 对应每个测试案例,输出数组中只出现一次的两个数。输出的数字从小到大的顺序。
- 样例输入:
8 2 4 3 6 3 2 5 5
- 样例输出:
4 6
#include<stdio.h> #include<stdlib.h> int a[1000001]; int b[500001]; int c[500001]; int n; int main(int argc, char *argv[]) { while(~scanf("%d",&n)) { for(int i=0;i<n;++i) { scanf("%d",&a[i]); } int tmp=a[0]; for(int i=1;i<n;++i) { tmp^=a[i]; } int x=tmp&(-tmp); int j,k; int i; for(i=0,j=0,k=0;i<n;++i) { if((a[i]|x)==a[i]) { b[j++]=a[i]; } else { c[k++]=a[i]; } } int bx=b[0]; int cx=c[0]; for(int i=1;i<j;++i){ bx^=b[i]; } for(int i=1;i<k;++i) { cx^=c[i]; } if(bx>cx) { printf("%d %d\n",cx,bx); } else printf("%d %d\n",bx,cx); } return 0; }
九度OJ 1351 数组中只出现一次的数字 (位操作)
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。