题目出自杭电
思路:因此先找到N个新郎中M个错一共有几种,是Cm(n)=N!/M!/(N-M)!
再乘以错排公式f[n]=(n-1)*(f[n-1]+f[n-2])
#include <stdio.h>
int main()
{
int n,m,i,a;
__int64 f[25],c[25];
f[0]=1,f[1]=1,f[2]=2;
for(i=3;i<21;i++)
{
f[i]=f[i-1]*i;
}
c[0]=0,c[1]=1,c[2]=1,c[3]=2;
for(i=4;i<21;i++)
{
c[i]=(i-1) * (c[i-1]+c[i-2]);
}
scanf("%d",&a);
while(a--)
{
scanf("%d %d",&n,&m);
printf("%I64d\n",f[n]/f[m]/f[n-m]*c[m]);
}
return 0;
}