繁华模拟赛 Vincent的城堡
#include<iostream> #include<cstdio> #include<string> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll mod = 1000000007; ll n,k,c[20][20]; ll ansa,ansb,ans; void get_c(){ for(int i = 1;i <= 10;i++){ c[i][0] = c[i][i] = 1; c[i][1] = c[i][i-1] = i; } for(int i = 2;i <= 10;i++){ for(int j = 2;j < i;j++){ c[i][j] = c[i-1][j-1] + c[i-1][j]; } } } ll q_mul(ll a,ll b){ ll ans = 0; while(b){ if(b&1){ ans = (ans + a) % mod; } a = (a + a) % mod; b >>= 1; } return ans; } ll q_pow(ll a,ll b){ ll ans = 1; while(b){ if(b&1){ ans = q_mul(ans,a); } a = q_mul(a,a); b >>= 1; } return ans; } int main(){ freopen("castle.in","r",stdin); freopen("castle.out","w",stdout); cin>>n>>k; get_c(); ansb = q_pow(n-k,n-k); ansa = q_pow(k,k-1);//诡异结论 ans = q_mul(ansa,ansb); cout<<ans; return 0; }