http://acm.hdu.edu.cn/showproblem.php?pid=2049
解题思路:依然是错排,不过错排结果还要乘上C(n,m),是错排加组合的题目,套公式吧。
int main()
{
__int64 sum[21]={1,1};
__int64 f[21]={0,0,1};
__int64 res;
int i,m,n,NumOfTest;
for (i=2;i<=20;i++)
{
sum[i]=sum[i-1]*i;
if(i>=3)
f[i]=(i-1)*(f[i-1]+f[i-2]);
}
while (scanf("%d",&NumOfTest)!=EOF)
{
while (NumOfTest--)
{
scanf("%d%d",&n,&m);
res=sum[n]/sum[m]/sum[n-m]*f[m];
printf("%I64d/n",res);
}
}
return 0;
}