熱門文章

2026年2月13日 星期五

ZeroJudge 解題筆記:c061. 00530 - Binomial Showdown

作者:王一哲
日期:2026年2月13日


ZeroJudge 題目連結:c061. 00530 - Binomial Showdown

解題想法


要用計算階乘的對稱性減少計算次數。

Python 程式碼


因為 ZeroJudge 網站大約在2025年10月更新到 Python 3.8.10,可以使用 math.comb 處理這題。使用時間約為 7 ms,記憶體約為 2.8 MB,通過測試。
import sys, math

for line in sys.stdin:
    n, m = map(int, line.split())
    if n == 0 and m == 0: break
    print(math.comb(n, m))

使用時間約為 7 ms,記憶體約為 2.8 MB,通過測試。
import sys

for line in sys.stdin:
    n, m = map(int, line.split())
    if n == 0 and m == 0: break
    ans = 1
    m = min(m, n-m)
    for i in range(1, m+1): ans = ans*(n-m+i)//i
    print(ans)


C++ 程式碼


題目說答案在 int 的範圍內,但其實用 int 會溢位,至少要用 long。使用時間約為 0 ms,記憶體約為 60 kB,通過測試。
#include <cstdio>

int main() {
    int n, m;
    while(scanf("%d %d", &n, &m) != EOF) {
        if (n == 0 && m == 0) break;
        long ans = 1;
        if (n-m < m) m = n-m;
        for(int i=1; i<=m; i++) ans = ans*(n-m+i)/i;
        printf("%ld\n", ans);
    }
    return 0;
}


沒有留言:

張貼留言