#13424: 解題想法


mirkat.ee06@g2.nctu.edu.tw (炭烤海苔)

學校 : 不指定學校
編號 : 74539
來源 : [138.246.3.200]
最後登入時間 :
2024-08-14 18:08:26
d563. 等值首尾和 -- 名題精選百則 | From: [124.8.72.64] | 發表日期 : 2018-02-17 12:52

第一次上排行www

看到版上很多NA50%,來提供一下我解題的想法

程式碼蠻短的,不到1Bytes~~

------------------------------------

範例測資3,6,2,1,4,5,2有三組等值首尾和,分別是:

11 = 3+6+2 = 2+5+4

12 = 3+6+2+1 = 2+5+4+1

23 = 3+6+2+1+4+5+2 = 2+5+4+1+2+6+3 (全部陣列的和,也代表答案至少有一組)

------------------------------------

以上面的測資來說

其實可以看出3+6+22+5+4重複出現在三個式子當中

如果可以避免重複運算它們,就可以節省一些時間

我的想法是用【差】來避免

以 範例測資3,6,2,1,4,5,2來說

我先算首項和尾項的差-->dif = 3 - 2 = 1

如果dif>0,我們可以知道前段和(Prefix Sum)>後段和(Suffix Sum)

所以我們再減掉一項後段數-->dif = 1 - 5 = -4

這時候發現dif<0,前段和(Prefix Sum)<後段和(Suffix Sum)

於是我們再加上一項前段數-->dif = -4 + 6 = 2

重複上述操作

當dif=0的時候,便是前段和(Prefix Sum)=後段和(Suffix Sum)的時候

至於終止條件大家自行想想吧

-----------------------------------

而用【差】還有另一個好處是不會溢位

不過題目已經保證全部總合小於2147483647,所以其實不避考慮溢位的問題XD

 
#14958: Re:解題想法


mirkat.ee06@g2.nctu.edu.tw (炭烤海苔)

學校 : 不指定學校
編號 : 74539
來源 : [138.246.3.200]
最後登入時間 :
2024-08-14 18:08:26
d563. 等值首尾和 -- 名題精選百則 | From: [1.167.49.113] | 發表日期 : 2018-08-21 16:14

忽略我程式碼很短的言論= =

是系統的bug把我的程式碼算成1Bytes

那時候真的腦袋棒賽才會相信程式碼只有1Bypes....

 

之後要加強計概的知識嗚嗚

 
ZeroJudge Forum