D. Almost Identity Permutations
time limit per test
2 seconds
memory limit per test
256 megabytes
input
standard input
output
standard output
A permutation p of size n is an array such that every integer from 1 to n occurs exactly once in this array.
Let's call a permutation an almost identity permutation iff there exist at least n - k indices i (1 ≤ i ≤ n) such that pi = i.
Your task is to count the number of almost identity permutations for given numbers n and k.
Input
The first line contains two integers n and k (4 ≤ n ≤ 1000, 1 ≤ k ≤ 4).
Output
Print the number of almost identity permutations for given n and k.
Examples
input
Copy
4 1
output
1
input
Copy
4 2
output
7
input
Copy
5 3
output
31
input
Copy
5 4
output
76
题意:给你n,k,问多少种排列满足有至少n-k个数字在原位置。
题解:直接错排,因为k只有4,所以组合数*错排个数即可。
代码:
#include <cstdio>
#define ll long long
int n,k;
ll C(int n,int k)
{
ll ans=1;
for(int i=n;i>=n-k+1;i--) ans*=i;
for(int i=1;i<=k;i++) ans/=i;
return ans;
}
int main()
{
while(scanf("%d%d",&n,&k)==2)
{
if(k==1) puts("1");
else if(k==2) printf("%I64d\n",C(n,2)+1);
else if(k==3) printf("%I64d\n",C(n,2)+1+C(n,3)*2);
else if(k==4) printf("%I64d\n",C(n,2)+1+C(n,3)*2+C(n,4)*9);
}
}