1040尋找單身狗

2021-08-09 13:34:38 字數 1391 閱讀 2458

時間限制: 1 sec

記憶體限制: 128 mb

提交: 159

解決: 51

統計杜陵韋固,元和二年旅次宋城遇一老人倚布囊,坐於階上,向月撿書。固問所尋何書,答曰:「天下之婚牘耳。」又問囊中何物,答曰:「赤繩子耳。以系夫妻之足,及其生,則潛用相繫,雖讎敵之家,貴賤懸隔,天涯從宦, 吳楚異鄉,此繩一系,終不可逭。」——唐代李復言《續玄怪錄·定婚店》。

這個在月下倚布囊、坐於階上、向月檢書的老人,即是後來在民間被奉為婚姻之神的月下老人。只要其用囊中紅繩把世間男女之足系在一起,即使經歷「仇敵之怨,貴賤懸隔,天涯從宦,吳楚異鄉」等折磨,也會化解一切最終成為夫妻。

但月老也有尷尬的時候!

這一日,他照常系紅線,卻發現這一批年輕人的數量是奇數!

他劃分的標準是根據每個人的「x」值,若兩個人的「x」值相同,那麼月老就會把他們連在一起。不過因為總數是奇數,所以總會有乙個人被空出來,我們稱之為「單身狗」。

不過好在除了這個「單身狗」,其餘所有人都恰好可以組成兩兩一對。

現在給出所有人的「x」值,請找出「單身狗」的x值。

需要注意的是,也許單身狗也有與其x值相同的人,但是這個人已經有其他人相連了。

第一行是乙個整數n

n( 0

<

n<

100000且n

為奇數 0 ),代表有n

n個人。

下面一行有n

n個以乙個空格分開的整數a

i ai

( 0<

m<109

0 ),代表每個人的「x」值。

輸出單身狗的「x」值。

5

2 3 4 2 3

4

此題存在基於位運算的時間複雜度o(n

) o(n)

、空間複雜度o(1

) o(1)

演算法。

#include#includeusing namespace std;

int main()

map::iterator it;

it=mp.begin();

while(it!=mp.end())

詳解:
1

2

3

4

5

a1=a^b

b=b^a1=b^a^b=a

//此時a1=a^b  b=a

a=a1^b=a^b^a=b

同一變數與另一變數和其異或值異或等於另乙個數,如(a^b)^a=b。

尋找單身狗

給出2 n 1 個的數字,除其中乙個數字之外其他每個數字均出現兩次,找到這個數字 對於該問題,我們直觀得想到,暴力遍歷整個陣列,逐一得排查陣列元素,直到找到那個單獨的數字。這個方法也很容易實現,但是其時間複雜度為o n 2 其效率並不高,不宜採用。另一種方法也很容易想到,我們可以先對整個陣列排序,然...

尋找單身狗數

方法一 異或求單身狗 原理 相同兩數異或為0 把所有數全部異或。異或的結果找1出現的位置的,然後將所有這個位置為1的數相異或,就是第乙個 單身狗 其他的相異或則是第二個。void finddog int arr,int n,int num for i 0 i 32 i for i 0 i n i v...

初學C語言 14 尋找單身狗

輸入 1,2,3,4,5,2,1,3 輸出 4 5 方法一 先對陣列進行排序,排序後進行相鄰的數字比較是否相同。圖示 氣泡排序 void finddog int a,int n,int num else 不相等,記錄第乙個資料,第二個為起始位置 intmain int num 2 int sz si...