//ceil(x)返回不小于x的最小整数值(然后转换为double型)。
//floor(x)返回不大于x的最大整数值。
//round(x)返回x的四舍五入整数值
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#include <queue>
#define PI 3.1415926535897932384626433832795
using namespace std;
__int64 s[25];
__int64 ans[25];
void Sum()
{
__int64 i;
ans[1]=1;
for(i=2;i<=24;i++)
ans[i]=ans[i-1]*i;
// printf("%I64d\n",ans[24]);
}
void solve()
{
__int64 i;
s[1]=0;
s[2]=1;
for(i=3;i<=24;i++)
{
s[i]=(i-1)*(s[i-2]+s[i-1]);
}
// printf("%I64d\n",s[24]);
}
__int64 com( __int64 n, __int64 r)
{
if(n-r>r)
r=n-r;
__int64 i,j,s=1;
for(i=0,j=1;i<r;i++)
{
s*=(n-i);
for(;j<=r&&s%j==0;j++)
{
s/=j;
}
}
return s;
}
int main()
{
freopen("in.txt","r",stdin);
freopen("out.txt","w",stdout);
__int64 n,i,t,m;
solve();
Sum();
scanf("%I64d",&t);
while(t--)
{
scanf("%I64d%I64d",&n,&m);
//printf("<<%I64d>>\n",com(n,m));
printf("%I64d\n",s[m]*com(n,m));
}
return 0;
}
错排
最新推荐文章于 2024-05-23 11:53:41 发布