切換
舊版
前往
大廳
主題

ZeroJudge - e359: Xor 運算(簡單! ~ :)) 解題心得

Not In My Back Yard | 2019-08-20 23:19:21 | 巴幣 0 | 人氣 261

題目連結:


題目大意:
昨天的題目類似,只是每個子集合 XOR 完其各自的元素後,此時不是加總而是變為彼此全部作 XOR 運算。

例如,A = { X1, X2, X3 },即是求 0 ⊕ X1 ⊕ X2 ⊕ X3 ⊕ ( X1 ⊕ X2 )⊕( X1 ⊕ X3 )+( X2 ⊕ X3 )⊕( X1 ⊕ X2 ⊕ X3 )。



範例輸入:
1
2
10
1 4 7 0 3 6 9 2 5 8


範例輸出:
2
0


解題思維:
XOR 運算有以下性質:
0 ⊕ x = x
x ⊕ x = 0
x ⊕ y = y ⊕ x
而元素數 N ≧ 2,代表其每個元素在 2 ^ N 個子集合會出現 2 ^ (N - 1)次。因為 N ≧ 2 ,所以出現次數為偶數,因此每個元素在最後的 XOR 結果之中會抵消。

對於 N = 1 ,因為只有一個元素 x ,因此子集合只有 {} 、 { x }兩個。因此 XOR 的結果為 x 。

因此,綜合以上結論:當碰到 N = 1 時,所求即是接下來一列給定的那一個數字;當 N ≧ 2 時,結果必為 0 ,因此可以直接跳過下一列不用讀。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作