POJ 2249-Binomial Showdown(排列组合计数)
2015-03-14 16:19
423 查看
Binomial Showdown
Description
In how many ways can you choose k elements out of n elements, not taking order into account?
Write a program to compute this number.
Input
The input will contain one or more test cases.
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n).
Input is terminated by two zeroes for n and k.
Output
For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 231.
Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit.
Sample Input
Sample Output
题意:求C(n,m);
思路:这个是其中一种办法,就是连乘r个整商:C(n,k)=C(n,k-1)*(n-k+1)/k。时间复杂度O(n);
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 18457 | Accepted: 5633 |
In how many ways can you choose k elements out of n elements, not taking order into account?
Write a program to compute this number.
Input
The input will contain one or more test cases.
Each test case consists of one line containing two integers n (n>=1) and k (0<=k<=n).
Input is terminated by two zeroes for n and k.
Output
For each test case, print one line containing the required number. This number will always fit into an integer, i.e. it will be less than 231.
Warning: Don't underestimate the problem. The result will fit into an integer - but if all intermediate results arising during the computation will also fit into an integer depends on your algorithm. The test cases will go to the limit.
Sample Input
4 2 10 5 49 6 0 0
Sample Output
6 252 13983816
题意:求C(n,m);
思路:这个是其中一种办法,就是连乘r个整商:C(n,k)=C(n,k-1)*(n-k+1)/k。时间复杂度O(n);
#include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> #include <iostream> #include <algorithm> #include <set> #include <queue> #include <stack> #include <map> using namespace std; typedef long long LL; LL work(LL n,LL m) { if(m>n/2) m=n-m; LL a=1,b=1; for(int i=1;i<=m;i++){ a*=n-i+1; b*=i; if(a%b==0){ a/=b; b=1; } } return a/b; } int main() { LL n,m; while(~scanf("%lld %lld",&n,&m)){ if(!n&&!m) break; printf("%lld\n",work(n,m)); } return 0; }
相关文章推荐
- POJ 2249-Binomial Showdown(排列组合计数)
- (组合数学3.1.2.1)POJ 2249 Binomial Showdown(排列组合公式的实现)
- [ACM] poj 2249 Binomial Showdown (排列组合公式优化)
- (组合数学3.1.2.1)POJ 2249 Binomial Showdown(排列组合公式的实现)
- [ACM] poj 2249 Binomial Showdown (排列组合公式优化)
- [ACM] poj 2249 Binomial Showdown (排列组合公式优化)
- poj2249 Binomial Showdown 求组合数
- 排列组合计数 水poj2249 poj1306
- POj 2249 Binomial Showdown 【组合数学】
- poj 2249 Binomial Showdown(组合数 公式优化)
- POJ 2249 Binomial Showdown(排列组合)
- POJ 2249 Binomial Showdown (连乘整商求组合数)
- poj 2249 Binomial Showdown
- ZOJ 1938 Binomial &&poj 2249 (Binomial Showdown )(睡前一水)
- poj 2249 Binomial Showdown
- poj3252(排列组合计数,数位计数)
- POJ2249 Binomial Showdown
- poj 2249 Binomial Showdown
- POJ 2249 Binomial Showdown 求组合数C(n,k)
- POJ2249 Binomial Showdown