Live2D
博客园 首页 私信博主 显示目录 隐藏目录 管理 动画

T82889 扫雷

题目链接

题目背景

GHGHGH是一位特工,他收到了一系列数字表示某地区地雷的埋雷和爆炸情况。

题目描述

这一系列信息一共有nnn个数字,每个地雷每个地雷都有自己的编号,当这个编号第一次出现时代表这颗地雷被埋下,当第二次出现时代表这颗地雷被引爆了。比如 3 4 3 1 4表示最终只剩下一号地雷,且已知最终只有一颗地雷剩下,GHGHGH很聪明,但因为nnn很大他也懒得算,他想设计一个程序找出最后哪颗地雷剩余。(每颗地雷一定出现两次,其中只有一颗地雷出现一次)

输入输出格式

输入格式:

第一行一个数nnn表示出现的数字个数 第二行nnn个数表示地雷埋雷和引爆情况

输出格式:

输出最终剩下的那颗地雷

输入样例1:

5
1 2 2 1 3 

输出样例1:

3

输入样例2:

7
3 4 2147483647 4 1 1 3

输出样例2:

2147483647

思路:

  由于数据保证了除了答案以外每个数都会出现两次。所以根据异或(对于两个二进制数a和b的每一位,如果该位上数字不同,则返回1,如果该位上数字相同,则返回0。如果长度不够则补前导0)的运算原则(一个数对任何一个数异或偶数次之后不变),所以直接异或就好啦!

代码:

#include<cstdio>
#include<iostream>
#include<algorithm>

using namespace std;

inline int read()
{
    int x=0,f=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}

int n,m,ans;

int main()
{
    n=read();
    for(register int i=1;i<=n;++i)
    {
        m=read();
        ans=ans^m;
    }
    printf("%d",ans);
    return 0;
}

 

posted @ 2019-06-14 19:59  _hhs  阅读(165)  评论(0编辑  收藏  举报