#30025: 找支點O(1)的方法


Williecraft (張哲維)

學校 : 國立臺中第一高級中學
編號 : 152427
來源 : [220.134.17.21]
最後登入時間 :
2023-12-24 18:01:04
f638. 支點切割 -- APCS201802程式實作題3 | From: [125.230.254.186] | 發表日期 : 2022-04-21 21:12

大家高中物理都有學過,質心是一個物體質量的中心,且"各點到質心的所有力矩會平衡",
對於一個粗度不計的棍子來說,質心就是能平衡此棍子的支點
 
不難發現其實題目給的條件和公式就是在求力矩平衡,而Pi的質就是質量(m),找到離支點最近又靠左的點(左右力矩相差最小)
只要自己設座標(x),用兩個前綴合紀錄m*x和m分別的合,而某段的質心位置就是該段(m*x總和)/(m總和)
再依據題目要求找到最近點,不要切到邊邊,就是所求支點位置了!用遞迴分治下去找的話,時間複雜度有O(n+2k),但又因為k必小於等於log2n,所以大約只有O(n)。
 
以下是我Python用此方法的成績,寫起來也非常簡單只有18行程式碼,但應該能再優化得更快
AC (0.1s, 10.8MB)
 
ZeroJudge Forum