hpuoj寻找单身狗

来源:互联网 发布:淘宝联盟提现手续费 编辑:程序博客网 时间:2024/04/30 13:21

1040: 寻找单身狗 [思维]

时间限制: 1 Sec 内存限制: 128 MB
点击打开题目链接

题目描述

杜陵韦固,元和二年旅次宋城遇一老人倚布囊,坐于阶上,向月捡书。固问所寻何书,答曰:“天下之婚牍耳。”又问囊中何物,答曰:“赤绳子耳。以系夫妻之足,及其生,则潜用相系,虽讎敌之家,贵贱悬隔,天涯从宦, 吴楚异乡,此绳一系,终不可逭。”——唐代李复言《续玄怪录·定婚店》。

这个在月下倚布囊、坐于阶上、向月检书的老人,即是后来在民间被奉为婚姻之神的月下老人。只要其用囊中红绳把世间男女之足系在一起,即使经历“仇敌之怨,贵贱悬隔,天涯从宦,吴楚异乡”等折磨,也会化解一切最终成为夫妻。

但月老也有尴尬的时候!

这一日,他照常系红线,却发现这一批年轻人的数量是奇数!

他划分的标准是根据每个人的“X”值,若两个人的“X”值相同,那么月老就会把他们连在一起。不过因为总数是奇数,所以总会有一个人被空出来,我们称之为“单身狗”。

不过好在除了这个“单身狗”,其余所有人都恰好可以组成两两一对。

现在给出所有人的“X”值,请找出“单身狗”的X值。

需要注意的是,也许单身狗也有与其X值相同的人,但是这个人已经有其他人相连了。

输入

第一行是一个整数n

(0<n<100000n ),代表有n

个人。

下面一行有n

个以一个空格分开的整数ai ( 0<m<109

),代表每个人的“X”值。

输出

输出单身狗的“X”值。

样例输入

52 3 4 2 3

样例输出

4

提示

此题存在基于位运算的时间复杂度O(n)

、空间复杂度O(1)算法。


题解:我开始思路很简单,排一下序,因为是奇数,所以肯定有一个是单身狗,前后做一下比较,因为1 1 1 2 2输出不正确,所以我开始代码是错的,

下面是我错的代码:

    #include<cstdio>    #include<algorithm>    #include<cstring>    using namespace std;    int a[1000000];    int main()    {    int n,i;         scanf("%d",&n);    for(i=0;i<n;i++)        scanf("%d",&a[i]);        sort(a,a+n);        for(i=0;i<n;i++)        {        if(a[i]==a[i+1]||a[i-1]==a[i])            continue;        printf("%d",a[i]);    }    return 0;     } 

改过后ac的代码:思路就是运用异或运算(只有在两个比较的位不同时其结果是1,否则结果为0即“两个输入相同时为0,不同则为1”)

#include<algorithm>    #include<cstring> #include<cstdio>   #define N 10000000001  using namespace std;    int a[1000000];    int main()    {        int n,i,ans=0;        scanf("%d",&n);        for(i=0;i<n;i++)      {          scanf("%d",&a[i]);       }         for(i=0;i<n;i++)        {            ans^=a[i];           }        printf("%d",ans);      return 0;    }




0 1