日期: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;
}
沒有留言:
張貼留言