Problem Description
國慶期間,省城HZ剛剛舉行了一場盛大的集體婚禮,為了使婚禮進(jìn)行的豐富一些,司儀臨時想出了有一個有意思的節(jié)目,叫做"考新郎",具體的操作是這樣的:
首先,給每位新娘打扮得幾乎一模一樣,并蓋上大大的紅蓋頭隨機(jī)坐成一排;
然后,讓各位新郎尋找自己的新娘.每人只準(zhǔn)找一個,并且不允許多人找一個.
最后,揭開蓋頭,如果找錯了對象就要當(dāng)眾跪搓衣板...
看來做新郎也不是容易的事情...
假設(shè)一共有N對新婚夫婦,其中有M個新郎找錯了新娘,求發(fā)生這種情況一共有多少種可能.
Input
輸入數(shù)據(jù)的第一行是一個整數(shù)C,表示測試實(shí)例的個數(shù)榴嗅,然后是C行數(shù)據(jù)嫁佳,每行包含兩個整數(shù)N和M(1<M<=N<=20)。
Output
對于每個測試實(shí)例绅喉,請輸出一共有多少種發(fā)生這種情況的可能,每個實(shí)例的輸出占一行。
Sample Input
<pre style="overflow-wrap: break-word; white-space: pre-wrap; margin: 0px; font-size: 14px;">
2
2 2
3 2
分析總結(jié)
很簡單一題,思路清晰下面附上钙蒙,當(dāng)時分析過程筆記
問題
這題寫出來不能ac,改了我半個鐘间驮,很心累躬厌。最后得知忘記了sum類型要定義為long long才行,原先寫的是long竞帽,因?yàn)槲业木幾g器是64位的烤咧,所以long是八個字節(jié)和longlong一樣(也有例外)所以就很坑人
源代碼
long long Pailie(int a,int b);
int main()
{
long long a[50];
a[0]=0;
a[1]=0;
a[2]=1;
for(int i=3;i<=20;i++)
{
a[i]=(i-1)*(a[i-2]+a[i-1]);
}
int n,m,k;
while(~scanf("%d",&k))
{
while(k--)
{
scanf("%d%d",&n,&m);
printf("%lld\n",Pailie(n, m)*a[m]);
}
}
return 0;
}
long long Pailie(int a,int b)
{
long long sum1,sum2;
sum1=sum2=1;
for(int i=a-b+1;i<=a;i++)
sum1*=i;
for(int i=1;i<=b;i++)
sum2*=i;
return sum1/sum2;
}
總結(jié)
以后把long當(dāng)int就好偏陪,要大的就long long 用起來好吧