CodeForces - 888D Almost Identity Permutations

本题用到错排的知识点!组合数学
CodeForces - 888D Almost Identity Permutations_第1张图片
思路:听SCX大佬讲的啊,题意至少有n-k个数是正好Pi=i;也就是说,我们只要枚举从2—k的数,看看他们有多少种错排的方案,在乘上k有多少种取法,最后加一(排序正常的那一种),就可解决。
CodeForces - 888D Almost Identity Permutations_第2张图片

#include
using namespace std;
typedef long long ll;
ll ans[]={0,0,1,2,9};
ll n;
ll C(int y)
{
	ll rz=1;
	for(int i=n;i>n-y;i--)
	rz*=i;
	for(int i=1;i<=y;i++)
	rz/=i;
	return rz;
}
int main()
{
	int k;
	ll count=1;
	cin>>n>>k;
	for(int i=2;i<=k;i++)
	count+=C(i)*ans[i];
	cout<<count;
	return 0;
}

你可能感兴趣的:(ACM)