题目链接

https://atcoder.jp/contests/abc127/tasks/abc127_e

题意

给定一个矩阵,包含 N×M 个格子,现在从中选出 KN×M 个不同的格子,记为 (x1,y1),(x2,y2),,(xK,yK) ,记

cost=i=1K1j=i+1K(|xixj|+|yiyj|)

求:对于所有不同的 K 个格子的选法,cost 的sum为多少?

法一概率

k 个格子的方案数为 C(n+m,k),在 k 个格子中,任选 2 个出来,有 C(k,2) 种,考虑它们的贡献:

因为是全部方案,所以可以考虑用 期望值 来做!

问题转化为,从 N×M 的矩阵中,选择 2 个不同的点 (xi,yi),(xj,yj) ,求 |xixj|+|yiyj| 的期望?

期望为: n+m3


如果推式子很难,这里是一些小技巧(仅用于 分母中无 n,m ,并且分子中不存在 nm 之类的项):

打表找规律:假设期望值 E(n,m) 是一个关于 n,m 的多项式,那么固定一下 n 的值,然后让 m=1,2,3 来打表找出 E(n,m)m 的关系。同理可以找出 E(n,m)n 的关系,相加一下就可以了。

拉格朗日插值法:设 ans=F(n,m)=E(n,m)C(nm,2),我们可以固定 n,然后用插值法找出 F(n,m)m 的关系。(这个函数有两个变量,按理说应该是固定每一个 n 然后对每一个 n 都进行一次插值法的,以后遇到了可以尝试一下。)


严谨证明:

考虑一个点 (x,y),那么

纵向贡献 为: vx,y=[(1+2++x1)+(1+2++nx)]m

横向贡献 为: hx,y=[(1+2+y1)+(1+2++my)]n

期望就是 E(n,m)=x=1ny=1m(vx,y+hx,y)C(nm,2)=n+m3


以上,最终的答案就是

ans=C(nm,k)C(k,2)n+m3

法二计数

我们选择 2 个格子,有 C(nm2,k2) 种。

对于横坐标的差值为 dx 的情况,有 (ndx)m2 种。贡献就是 (ndx)m2dx

对于纵坐标的差值为 dy 的情况,有 (mdy)n2 种。贡献就是 (mdy)n2dy

所以答案就是

ans=C(nm2,k2)(dx=1n1(ndx)m2dx+dy=1m1(mdy)n2dy)

代码
copy
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
using namespace std;
#include <bits/stdc++.h>
#define ll long long
const int mod = 1e9+7;
const int maxn = 2e5+5;
ll qpow(ll a, ll b) {
ll res = 1;
while (b) {
if (b&1)
(res *= a) %= mod;
(a *= a) %= mod;
b >>= 1;
}
return res;
}
ll inv(ll a) {
return qpow(a, mod-2);
}
ll n,m,k;
ll fac[maxn];
void init() {
fac[0] = 1;
fac[1] = 1;
for (int i = 2; i <= n*m; i++) {
fac[i] = (fac[i-1] * (ll)(i)) % mod;
}
}
int main() {
cin >> n >> m >> k;
init();
ll nu = fac[n*m] * k % mod * (k-1) % mod * (n+m) % mod;
ll de = inv(fac[k]) * inv(fac[n*m-k]) % mod * inv(6) % mod;
cout << (nu * de) % mod << endl;
}

参考链接

  1. https://blog.csdn.net/weixin_30323631/article/details/96351727
  2. https://blog.csdn.net/qq_40655981/article/details/90642350

一些数学知识

Q1. 如果不限定坐标为整数,长度为 n 的线段上任取两个点,距离期望值是?

A1. 答案为 n3,有两种方法。

第一种:先假设坐标只能为 1,2,,n 的整数,那么求出的期望是 En=2×i=1ni(ni)n2=n213n,取一个 n 趋向无穷,就有 E=limnn213n=n3

上述推导需要用到 12+22++n2=16n(n+1)(2n+1)

第二种:先假设线段长度为 1,则有期望为 0101|xy| dydx01011 dydx=010x(xy) dydx+01x1(yx) dydx=13,对于线段长度为 n,乘上 n 即可。(记得分母要除以样本空间,即 01011 dydx


Q2. 如果不限定坐标为整数,n×n 的正方形中任取两个点,距离期望值是?

A2. 答案约为 0.521,具体分析可以见 这里这里

其他例题(TODO)

  1. https://www.luogu.com.cn/problem/P4781