切換
舊版
前往
大廳
主題

ZeroJudge - d708: 小王的積木 解題心得

Not In My Back Yard | 2018-10-26 10:30:59 | 巴幣 0 | 人氣 202

題目連結:


題目大意:
給定 N(2 ≦ N ≦ 1, 000, 000,且 N 為偶數),代表小王有好幾種積木,每種積木的數量都是偶數個。總計有 N 個積木。而現在小王遺失了一塊積木。所以有 N-1 個積木。

接下來有 N - 1 列的數字,每個數字代表某一個積木的編號(種類),求缺少的那塊積木的編號。



範例輸入:
8
1
2
3
2
3
4
4



範例輸出:
1



解題思維:
首先,我們先觀察XOR(異或是)運算的特性,以下以 ⊕ 作為XOR運算子:
0 ⊕ X = X —— 1式
X ⊕ X = 0 —— 2式
X ⊕ Y = Y ⊕ X —— 3式

再回頭看看我們題目,所有積木都是數字,而且每種積木幾乎都是偶數個(剛好只有缺一塊積木)。因此我們可以運用XOR運算的特性來找到遺失的積木。

一開始設一變數X為0,然後接著把所有讀到的積木之編號,與之作XOR運算。

可以從1式、2式看到,由於積木是偶數個,相同編號(種類)的就會抵銷掉變為0。而從3式可以看到,運算順序是可以交換的,不會影響結果。

因此,以上的運算做完後,X會留有一個值。而那個值便是遺失的那塊積木的編號(種類),因為相同種類的積木之數量為奇數,因此XOR運算時無法全部抵銷,故留了下來(也就是X的值)。




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

創作回應

場外第一邊緣人
先sort 在一個一個數 這樣會不會比較直觀(?
2018-10-26 12:28:59
Not In My Back Yard
對這題來說,好像會太慢的樣子。時間似乎壓得挺緊的。
2018-10-26 13:08:43

更多創作