首页 > 代码库 > 一些题目(4)

一些题目(4)

因为没多少时间所以挑几道最近做的有意思的题目写写。

 

在 N*M 的方格中选出三个记为 A, B, C,则费用为 |AB|+|BC|+|AC|.(|AB| 表示 AB 两点之间的曼哈顿距离。)求费用在区间 [minT, maxT] 内的选择方案数。N, M <= 4000。

我们可以考虑任意的三对坐标,$(x_1, y_1), (x_2, y_2), (x_3, y_3)$,如果我们淡化「点」的概念而只考虑坐标,假设 $x_1$ 是三个点的横坐标中最小的那个,$x_3$ 是最大的横坐标,$y_1$ 是最小的纵坐标,$y_3$ 是最大的纵坐标。其实很容易发现,$x_2$ 与 $y_2$ 对结果是没有影响的。则 $x_2$ 的取值范围是 $(x_1, x_3)$,$y_2$ 的取值范围是 $(y_1, y_3)$。而由三个横坐标和三个纵坐标可以确定出 $A_3^3$ 组三点对,所以对于一组 $x_1, y_1, x_3, y_3$,我们可以得到 $A_3^3 \cdot (x_3-x_1+1)(y_3-y_1+1)$ 组三点对。

但是如果直接枚举 $x_1, y_1, x_3, y_3$ 再判定是否合法显然不够快。在我们得到一组 $x_1, x_3, y_1, y_3$ 之后,由其构造出的三点对的费用为 $2(y_3-y_1)(x_3-x_1)$。从这个式子我们可以看出,某次选择的费用只与选择的三个点的「最大横坐标与最小横坐标之差」和「最大纵坐标与最小纵坐标之差」有关。那么我们直接枚举这两个差值即可。对于差值为 $delta$ 的一对 $x_1, x_3$,我们能够在所有方格中找到 $m - delta$ 组不同的 $x_1, x_3$。至此,问题解决。

顺便一提,上述所谓「枚举差值」的本质就是枚举「能够恰好包含三个点的最小矩形的长和宽」。

 

有两个人 A 和 B,初始分数都为 0。每次 A 可以选择任意一个任务做,一个难度为 $p$ 的任务,完成概率为 $\frac{1}{2^p}$,完成后可以得到 $2^{p-1}$ 分,没有完成则不得分;每次 B 只能选择难度为 1 的任务去做。求在最优决策下 A 获胜的概率是多少。

我们可以将 A 和 B 捆绑在一起分析,对于每一轮都可能有 4 种走向:A 完成了一个任务而 B 没有完成,A 没有完成而 B 完成了,A 完成了且 B 也完成了,A 和 B 都没有完成。设 $f(i, j)$ 为 A 当前得分 i 而 B 当前得分 j 时 A 获胜的概率,如果 A 选择了难度为 p 的任务,那么有

$f(i, j) = \frac{\frac{1}{2}\cdot \frac{1}{2^p} \cdot (f(i+2^{p-1}, j) + f(i+2^{p-1}, j+1)) +(1-\frac{1}{2^p})\cdot \frac{1}{2}\cdot f(i, j+1)+ (1-\frac{1}{2^p}) \cdot \frac{1}{2} \cdot f(i, j)}{4}$

(放大看更清楚哟~)

我们发现等式两边都出现了 $f(i, j)$,那么我们进行移项整理,就能得出 $f(i, j)$ 的计算式。(太长不打)

然后枚举 A 当前做的任务难度 $p$,取最大值即可。

 

一些题目(4)