https://www.jisuanke.com/contest/1202
不想讲我是怎么想到的了
最重要的是用了位置等价的思想
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5;
ll JC[N+10];
const int M=1e9+7;
ll quickmod(ll a,ll b,ll m){ll ans=1;while(b)
{if(b&1)ans=(ans*a)%m;b>>=1;a=a*a%m;}return ans;}
ll inv(ll a,ll p){return quickmod(a, p-2, p);}
int main(){
int T;
cin>>T;
JC[0]=1;
for(int i=1;i<=N;++i)
JC[i]=JC[i-1]*i%M;
while(T--){
ll n,x;
cin>>n>>x;
ll ans=0;
for(ll i=1;i<=x;++i){
ans+=(JC[n-i-1]*JC[x]%M*inv(JC[x-i],M)%M*i%M);
ans%=M;
}
ans=ans*(n-x)%M*JC[n]%M;
cout<<ans<<endl;
}
}