"科林明倫杯"哈工大第六屆程序設計團隊賽-c 異或求奇數次

題目鏈接

題意:給出一組學號,找到奇數次出現的(只有一個)然後輸出

用map超時了,如果有哪位大佬會的話求講解

在一次打開新世界大門,用異或^

但是這種只適用於在longlong之內的數字,且只出現一組奇數,其餘全是偶數的情況

已知 a^a=0;   a^a^a=a也就是說,偶數次異或是0,奇數次亦或是它本身,多麼美妙啊

正巧,其他出現的數都是偶數次,也就是:a^a^a^b^b=a;  

所以只用設置一個ans=0然後一直異或下去輸出就好了

代碼:

#include<iostream>
#include<algorithm>
#include<stdio.h>
#include<string.h>
using namespace std;
int main()
{
    int n,t,a;
    scanf("%d",&t);
    while(t--)
    {int ans=0;
        scanf("%d",&n);
        for(int i=1; i<=n; i++)
        {
            scanf("%d",&a);
            ans^=a;
        }
        printf("%d\n",ans);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章