和2048题差不多,就是要加个排列,还要注意int型不行,要用__int64保存数字
#include<iostream>
using namespace std;int main()
{
__int64 zuhe(int m,int n);
int t;
cin>>t;
int i;
__int64 a[25];
a[1]=0;
a[2]=1;
a[3]=2;
for(i=4;i<=24;i++)
a[i]=(a[i-1]+a[i-2])*(i-1);
for(i=1;i<=t;i++)
{
int m,n;
cin>>m>>n;
cout<<zuhe(m,n)*a[n]<<endl;
}
}
__int64 zuhe(int m,int n)
{
__int64 res1=1,res2=1;
if(n==m) return 1;
for(int i=1;i<=n;i++)
{
res1*=m;
m--;
}
while(n)
{
res2*=n;
n--;
}
return res1/res2;
}