時間限制: 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」值。
52 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...