ETH官方钱包

前往
大廳
主題

ZeroJudge - b897: 10219 - Find the ways ! 解題心得

Not In My Back Yard | 2021-06-30 00:00:05 | 巴幣 0 | 人氣 376

題目連結:


題目大意:
輸入有多列,每列給定 n 、 k(1 ≦ k ≦ n 、 1 ≦ n),試問 n 個物件取 k 個的方法數有幾個位數長?



範例輸入:
20 5
100 10
200 15


範例輸出:
5
14
23


解題思維:
因為 n 個物件取 k 個的方法數為 n! ÷ k! ÷ (n - k)!。因此我們可以利用斯特靈公式(Stirling's Formula)以及對數的性質來求出位數長,即(以下的對數函數皆為以 10 為底)
(n + 0.5)log(n)
- ((n - k) + 0.5)log(n - k)
- (k + 0.5)log(k) - 0.5log(2π)

不過因為 n = k 的時候會因為對數的緣故而出錯。但是此時方法數 = 1 ,所以輸出 1 即可。




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

創作回應

更多創作