题面
$T1$
Solution
我们先不考虑期望怎么算,考虑最基础的表示方法。
我们设 $T$ 表示在某种特定情况下所用的时间,则有 $T=[t_2<t_1]+[t_3<t_1]+\cdots+[t_n<t_1]+1$ 。其中 $t_i$ 表示 $i$ 被取走的时间, $[a]$ 表示如果 $a$ 为真,返回 $1$ ,否则返回 $0$ 。
那么对于我们要求的期望,就是 $E(T)=E([t_2<t_1]+[t_3<t_1]+\cdots+[t_n<t_1]+1)$ 。
我们有一个重要的结论:期望具有线性性。
所以我们可以把式子化为如下形式:
我们可以发现,对于两堆石子 $1,i$ ,它们选择的先后是与其它石子无关的,所以我们可以单独考虑。
对于 $E(t_i<t_1)$ ,我们有如下结论:
前者表示 $i$ 在 $1$ 之前选,对时间的贡献为 $1$ ,后者表示 $i$ 在 $1$ 后面选,对时间的贡献为 $0$ 。
然后我们就可以 $O(n)$ 计算了。
Code
1 |
|
$T2$
Solution
首先,我们有一个 $O(nm\log sum)$ 的做法。
对于每一个 $x$ ,我们一定可以得到一个确定的序列,这样我们只需要判断在 $m$ 组之内,将序列分完的,区间的最大值最小为多少。
这是一个经典问题,可以直接贪心求解(能放就放,没法放就新开一个)。
但是由于 $nm$ 是 $10^8$ ,带一个 $\log$ 没法跑,考虑优化。
我们有这样一个结论:在随机情况下,一个排列的第 $i$ 个数比前面的 $i-1$ 个都要小,这样的 $i$ 的个数是 $\sum\frac{1}{i}$ ,这是调和级数,为 $\ln n$ 。
我们记 $F(i)$ 表示当 $x=i$ 时,我们得到的答案。
那么对于一个答案序列 $F$ ,我们在随机的情况下遍历这些 $i$ ,如果最大值最小为 $ans-1$ 能够成立时,我们再进行二分找出当前的答案。这样的 $i$ 只有 $\ln m$ 个。
时间复杂度: $O(nm+n\ln m\log_2 n)$ 。
Code
1 |
|
$T3$
Solution
Code
总结
$T1$ 期望没学好。
$T2$ 的随机化我之前没见过,我是真的心服口服。