※P1469 找筷子

我们考虑异或的两个小小的性质:

  • 任何数与 0 的异或值是它本身
  • k 个相同的数的异或和,当 k 为奇数时,结果是这个数本身,否则结果是 0
  • 异或满足交换律和结合律

题目需要求 n 个数中出现奇数次的那个数,且保证这个数存在且只有一个。于是我们根据上面两个性质得出,答案就是这 n 个数的异或和。

int n;

int main()
{
    cin>>n;

    int ans=0;
    for(int i=0;i<n;i++)
    {
        int x;
        scanf("%d",&x);
        ans^=x;
    }

    cout<<ans<<endl;

    //system("pause");
}
posted @ 2020-09-20 10:52  Dazzling!  阅读(109)  评论(0编辑  收藏  举报