算法设计与分析 1.5 我想静静

★题目描述

众所周知,静静是 FFF 团的荣誉团长。每当单身狗孤独寂寞冷的时候,只要说一句“对不起,我想静静。”便能短暂的告别这冷酷的世界,获得片刻心灵的慰藉。但是,火把节的前夕,众团员正摩拳擦掌准备大烧一场时,静静竟然被情侣们包围了!!身为 FFF 团 35 级火系魔法师的你已经坐不住了,现在就准备出发去拯救静静!

每对情侣(两个人)有一个编号(保证每对情侣的编号不重复),给静静一个单独的编号。现在,你的任务就是尽快从人群中找到静静并把他拯救出来!

什么,你看懂了背景故事却不知道要做什么?问题是这样的:给定一个数组,除了一个数只出现一次以外,其他数都出现了两次。你要做的就是找出只出现一次的数。

★输入格式

输入第一行为一个数 N,代表一共有 N 个人。

接下来一行有 N 个整数,表示他们的编号。

对于50%的数据,N <= 2000。

对于80%的数据,N <= 200000。

对于100%的数据,N <= 2000000且为奇数,编号的范围在int范围内且非负。

★输出格式

输出只出现了一次的那个数。

★样例输入

5
1 1 0 2 2

★样例输出

0

★提示

输入规模较大,请使用scanf/printf。

/*
使用异或
交换律:a ^ b ^ c <=> a ^ c ^ b
相同的数异或为0: n ^ n => 0
任何数于0异或为任何数 0 ^ n => n
*/
#include<bits/stdc++.h>

int main(){
    int n, a;
    scanf("%d",&n);
    
    int res=0;
    while(n--){
        scanf("%d",&a);
        res ^= a;
    } 
    printf("%d",res);
    return 0;
}

猜你喜欢

转载自www.cnblogs.com/yejifeng/p/11600204.html
1.5