杭电2049题
//考新郎
//思路:在错排公式的基础上加入排列组合的因素
#include <iostream>
using namespace std;
__int64 fun(int n);
int main()
{
int case_num;
cin>>case_num;
for(int i=0;i<case_num;i++)
{
int n,m;
while(cin>>n>>m)
{
__int64 *p =new __int64[m+1];
p[1] = 0;
p[2] = 1;
for(int i=3;i<m+1;i++)
{
p[i] = (i-1)*(p[i-1]+p[i-2]);
}
//注意:不能是p[m]*fun(n)/(fun(m)*fun(n-m)),因为p[m]与fun(n)相乘会越界
printf("%I64d\n",fun(n)/(fun(m)*fun(n-m))*p[m]);
delete []p;
}
}
}
__int64 fun(int n)
{
__int64 result;
if(n==1 || n==0)
return 1;
else
{
result = n*fun(n-1);
}
return result;
}