Description
有
n
个点,给每个点
1
.从
2
.从
问满足条件的 p1,p2,...,pn 个数
Input
输入两个整数 n,k(1≤n≤1000,1≤k≤min(8,n))
Output
输出满足条件的
p
序列个数,结果模
Sample Input
5 2
Sample Output
54
Solution
首先后
n−k
个点的
px
值必然大于
k
,否则走到前
后面
1
走到前
Code
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<ctime>
using namespace std;
typedef long long ll;
typedef pair<int,int>P;
const int INF=0x3f3f3f3f,maxn=10;
#define mod 1000000007
int Pow(int a,int b)
{
int ans=1;
while(b)
{
if(b&1)ans=(ll)ans*a%mod;
a=(ll)a*a%mod;
b>>=1;
}
return ans;
}
int main()
{
int n,k;
while(~scanf("%d%d",&n,&k))
{
int ans=(ll)Pow(k,k-1)*Pow(n-k,n-k)%mod;
printf("%d\n",ans);
}
return 0;
}