做法介绍: 考虑计算每个点到其他点的距离之和,再乘上一个 Cn×m−2k−2
最后答案在除2
#include<bits/stdc++.h>
#define LL long long
using namespace std;
const LL mod=1e9+7;
LL ksm(LL x,LL y)
{
LL cnt=1;
while(y)
{
if(y&1)cnt=cnt*x%mod;
x=x*x%mod;
y>>=1;
}
return cnt;
}
LL n,m,k,fac[200005],inv[200005],T,ans;
int main()
{
inv[0]=fac[0]=1;
for(int i=1;i<=200000;i++)
{
fac[i]=fac[i-1]*i%mod;
}
inv[200000]=ksm(fac[200000],mod-2);
for(int i=200000-1;i>=1;i--)
{
inv[i]=inv[i+1]*(i+1)%mod;
}
scanf("%lld%lld%lld",&n,&m,&k);
T=fac[n*m-2]*inv[n*m-k]%mod*inv[k-2]%mod;
for(int i=1;i<=n;i++)
{
for(int j=1;j<=m;j++)
{
LL cnt=(n*( ( (j-1)*j/2)%mod )%mod+m*(((i-1)*i/2)%mod)%mod)%mod;
ans=(ans+cnt*T%mod)%mod;
}
}
printf("%lld",(ans%mod+mod)