1040: 寻找单身狗 [思维]
时间限制: 1 Sec 内存限制: 128 MB提交: 168 解决: 55 统计
题目描述
杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书。固问所寻何书,答曰:“天下之婚牍耳。”又问囊中何物,答曰:“赤绳子耳。以系夫妻之足,及其生,则潜用相系,虽讎敌之家,贵贱悬隔,天涯从宦, 吴楚异乡,此绳一系,终不可逭。”——唐代李复言《续玄怪录·定婚店》。
这个在月下倚布囊、坐于阶上、向月检书的老人,即是后来在民间被奉为婚姻之神的月下老人。只要其用囊中红绳把世间男女之足系在一起,即使经历“仇敌之怨,贵贱悬隔,天涯从宦,吴楚异乡”等折磨,也会化解一切最终成为夫妻。
但月老也有尴尬的时候!
这一日,他照常系红线,却发现这一批年轻人的数量是奇数!
他划分的标准是根据每个人的“X”值,若两个人的“X”值相同,那么月老就会把他们连在一起。不过因为总数是奇数,所以总会有一个人被空出来,我们称之为“单身狗”。
不过好在除了这个“单身狗”,其余所有人都恰好可以组成两两一对。
现在给出所有人的“X”值,请找出“单身狗”的X值。
需要注意的是,也许单身狗也有与其X值相同的人,但是这个人已经有其他人相连了。
输入
第一行是一个整数 n ( 0<n<100000且n为奇数 ),代表有 n 个人。
下面一行有 n 个以一个空格分开的整数 ai ( 0<m<109 ),代表每个人的“X”值。
输出
输出单身狗的“X”值。
样例输入
5
2 3 4 2 3
样例输出
4
提示
此题存在基于位运算的时间复杂度 O(n) 、空间复杂度 O(1) 算法。
解析:特殊情况1 1 1 2 2
输出1
程序如下:
#include<algorithm>
#include<cstring>
#include<cstdio>
using namespace std;
int a[1000000];
int main()
{
int n;
while(scanf("%d",&n)!=EOF)
{
int ans=0;
for(int i=0;i<n;i++)
scanf("%d",&a[i]);
for(int i=0;i<n;i++)
ans^=a[i];
printf("%d\n",ans);
}
return 0;
}