#40097: 作者提供的解法


xavier13540 (柊 四千)

學校 : 國立臺灣大學
編號 : 21783
來源 : [36.230.29.43]
最後登入時間 :
2024-07-06 14:41:17
a962. 新專輯 -- TIOJ1674 | From: [1.171.56.250] | 發表日期 : 2024-04-26 16:55

這題預期的解法是利用 meet-in-the-middle 來達到 O(N) 的時間複雜度。設 n=N,將 S:=i=1N(Nmodi) 的計算拆成前 n 項的和 S1 與後 Nn 項的和 S2。如果我們能在 O(N) 時間內算出 S1S2,就能在相同的時間內算出 S

由於 S1 只有 n=O(N) 項,本來就能在 O(N) 時間內算出。S2 的部分,若將 N 除以 i 寫為 N=qi+r,其中 r<i,則因 in+1>N,我們有 qNN=n,且 rq 相等的 i 區間內,形成了公差恰為 q 的等差數列(讀者可以試著輸出並觀察 N=50Nmodi 的值是怎麼隨著 i 遞增而變化的)。由於 S2q=O(N) 個等差數列組成,而每個等差數列的和又可以在 O(1) 時間內算出,我們發現 S2 可以在 O(N) 時間內算出。

 
ZeroJudge Forum