hdoj:2049

时间:2021-07-15 15:46:39
#include <iostream>
using namespace std; long long a[];
/*
n 个 数中 m个错排
转化为:充n个数中选取m个数,共有C(n,m)中,选取的m个数进行全部错排
*/
/*
排列
*/
long long fn(int a,int b)
{
long long res = ;
for (int i = a; i <= b; i++)
{
res *= i;
}
return res;
} long long fC(int n, int m)
{
long long s1 = fn(m+,n);
long long s2 = fn(,n-m);
return s1 / s2;
} int main()
{
int T,n,m;
cin >> T;
a[] = ;
a[] = ;
for (int i = ; i <= ; i++)
{
a[i] = (i - ) * (a[i - ] + a[i - ]); // 全部错排
} while (T--)
{
cin >> n >> m;
long long res = a[m] * fC(n, m);
cout << res << endl;
}
}

部分错排

http://acm.hdu.edu.cn/showproblem.php?pid=2049