一篇关于异或操作的题解 (来源:杭电oj: find your present (2))

发布时间 2023-04-01 23:38:00作者: 啥都不会的灰太狼

害 惭愧惭愧 老长时间没写代码了——————————

转回正题 ,对于杭电这个题 先说我超时的错误想法

——————————————————————————————————————————————————————————————

 

一开始我的想法是开一个大小为1000000的数组。然后每当输入一个数字 m 时,我会让a[m]++;并且处理完一串数字时,需要将数组a在初始化为零。

嘶~~~  其实想想感觉这样写就很复杂。果然最后也没过。

——————————————————————————————————————————————————————————————

接下来说正解(看了某大佬的做法)

对了,要先知道一个数字他异或两次别的数,其值本身不变。(比如 a = 2; b = 3; c = 4; a = a^b^c^b^c; 结果a还是2)

知道了这个咱们就能写代码了。代码如下:

#include<iostream>
#include<cstring>
using namespace std;
//using namespace std;
#define N 1000000
int a[N];
int main()
{
    int n;
    int m;
    int p;
    while(scanf("%d",&n) != EOF,n)
    {
        scanf("%d",&m);
        for(int i = 0;i < n-1;i++){
            scanf("%d",&p);
            m = m^p;
        }
        printf("%d\n",m);
    }
    return 0;
}

然后还要再啰嗦一句 ,输入和输出不能用(cin和cout)不然会超时。

 最后这道题就结束了~~~~ 

加油呀 小灰灰!!!!!!!!!!!!!!!!!!!!