切換
舊版
前往
大廳
主題

ZeroJudge - b003: 運算式 + - 符號設定問題 解題心得

Not In My Back Yard | 2018-10-08 23:58:05 | 巴幣 0 | 人氣 424

題目連結:


題目大意:
給定一個整數K(0 ≦ |K| ≦ 1, 000, 000, 000)。

找到一個最小的N,滿足:
± 1 ± 2 ± 3 …… ± N = K
其中「±」代表可以是「加法(正)」或「減法(負)」,從其中擇一。


範例輸入:
12
-3646397


範例輸出:
7
2701


解題思維:
我們先考慮K值為正的情況:

因為是要找最小的N,因此要先找到從1加到N會不小於K的N值(這樣可以確保總和成長速度最快)。

然後,如果現有的N值所給出的總和與K的差不為2的倍數(也就是奇數),就把N加1,直到兩者的差為2的倍數。

而為何差要是2的倍數呢?以K=12為例:

一開始,我們會找到N=5,代表1 + 2 + 3 + 4 + 5 = 15。

我們可以試圖調整1~5的正負號試圖讓上列等式的結果為12。但是,我們可以發現,15與12差3,因此無法藉由更改前面的數字之正負號來湊出12。

所以讓N=6,代表總合為21。與上面同理,差仍然是奇數。因而再讓N=7。

這時,總合為28,與12的差為16。而14是一偶數,因此我們可以調整,例如1、7的正負號,使等式為
-1 + 2 + 3 + 4 + 5 + 6 - 7 = 12。

而其他的正的K值也是同理。

再來討論K值為負的情況,我們可以很清楚的觀察到:其實就只是把上列的等式左右邊各乘上一個(-1)。就變成了K值為正的情況了。




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

創作回應

相關創作

更多創作