time limit: 1000ms memory limit: 65536kb
problem description
c(n,m)=n!/(m! * (n-m)!).(0<=n,m<=10^8且m<=n,該題結果保證在int範圍之內)。
input
第一行是乙個正整數t,下面t行每行有兩個整數n和m。
output
對於每一行輸入,分別對應輸出組合數c(n,m)的值
example input
3 1 1
2 1
3 2
example output
1 2
3 hint
這道題很水,但是因為好長時間沒有做題了,覺得有個思想還不錯。
如果做這道題是硬計算階乘,那麼即使用long long也存不下,這時就可以將數學公式簡化。比如:要計算n!/m!,其實就相當於計算n*(n-1)(n-2)(n-3)……*(m+1),因此就簡化了計算。
ac的**
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using
namespace
std;
#define n 100010
int main(void)
return
0;}
計算組合數
1.防溢位 如果直接用c n,m n!n m m 來程式設計很可能會在算n!時就爆了long long,所以每一步最好把除分母也算上。所以對於c n,m 來說取m min m,n m 來算c n,m n n 1 n 2 n m 1 m m 1 m 2 1 顯然分子分母都是m項相乘,從後往前去算 先算...
計算組合數
計算組合數 time limit 1000ms memory limit 32768kb submit statistic problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則...
計算組合數
time limit 1000 ms memory limit 32768 kib problem description 計算組合數。c n,m 表示從n個數中選擇m個的組合數。計算公式如下 若 m 0,c n,m 1 否則,若 n 1,c n,m 1 否則,若m n,c n,m 1 否則 c n...