//错排公式f(n) = (n-1)[f(n-2)+f(n-1)] (n>2)
//HDU - 2049
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<cctype>
#include<algorithm>
#include<vector>
#include<set>
#include<deque>
using namespace std;
long long shz[23];
void dis(){
for(int i=1;i<=20;i++){
cout<<shz[i]<<endl;
}
cout<<" test"<<endl;
}
void init(){
shz[1]=0,shz[2]=1;
for(int i=3;i<=20;i++){
shz[i]=(i-1)*(shz[i-1]+shz[i-2]);
}
// dis();
}
long long gcd(long long a,long long b){
return b?gcd(b,a%b):a;
}
long long cal(long long a,long long b){
long long temp1=1;
long long temp2=1;
for(int i=b;i>=1;i--){
temp1*=a--;
temp2*=i;
long long gd=gcd(temp1,temp2);
temp1/=gd;
temp2/=gd;
}
return temp1;
}
int main(){
init();
int cas,n,m;
cin>>cas;
while(cas--){
cin>>n>>m;
cout<<(long long)shz[m]*cal(n,m)<<endl;
}
return 0;
}
排列组合-错排
最新推荐文章于 2021-06-01 19:16:42 发布