問題点AL:ACM CLUBパーティー
制限時間:1秒メモリ制限:32メガバイト
提出:140は解決:31
タイトル説明
ACM CLUBのメンバーは、より多くの、この目的のために、ACM CLUBは、メンバーからのメンバー、夜の公演のためにパーティーを準備したいと思います。ニュースは、Nまで、メンバーのサインアップする公演がたくさん出てきたが、原因限られた空間と時間に、N M番号、から選択される唯一の個人がどのように多くの選択肢依頼する方法があるのですか?
エントリー
第1データ線Tは正の整数、T、ライン毎の各データとのデータの次のセットです。
データの各セットは、二つの整数N(サインアップする人の数、1 <= N <= 30含有 )、M( 必要なプログラムの数を0 <= M <= 30) 。
輸出
各グループのデータ出力整数、行当たりそれぞれ出力します。
サンプル入力 のコピー
5 3 2 5 3 4 4 3 6 8 0
サンプル出力 のコピー
3 10 1 0 1
コード
#include <iostream>
#include <algorithm>
#include <vector>
#include <string>
#include <math.h>
using namespace std;
//longlong 在此情况下也有可能会溢出,所以必须选择一个较小值来进行排列组合,进行运算优化
unsigned long long find(int a,int b){
unsigned long long m=1,n=1;
for (int i = 1; i <=b; i++)
{
m*=a;
a--;
n*=i;
}
unsigned long long cc=m/n;
return (cc);
}
int main(){
int num;
int a,b;
cin>>num;
getchar();
if(num>0){
while(num--){
cin>>a>>b;
getchar();
if(a>=1&&b>=0&&a<=30&&b<=30){
if(a<b){
cout<<0;
if(num!=0){
cout<<endl;
}
}
else{
if(b==0||a==b){
cout<<1;
if(num!=0){
cout<<endl;
}
continue;
}
int temp=b>(a-b)?(a-b):b;
unsigned long long c=find(a,temp);
cout<<c;
if(num!=0){
cout<<endl;
}
}
}
}
}
}