ZJOI2020(未完)

ZJOI

D1T2

对于每个节点我们算出它最后有 tag 的概率,这只需抽象成三个状态之间的转移:自己到祖先都没有 tag,自己有 tag,自己没有但祖先有。这几个转移的概率比较容易通过几种不同的区间来统计。
时间复杂度 Θ ( n log ⁡ k ) \Theta(n\log k) Θ(nlogk)

代码

D1T3

考虑只有连续段操作的话,答案就是 ∑ i max ⁡ ( a i − a i − 1 , 0 ) \sum_i \max (a_i - a_{i-1},0) imax(aiai1,0),因此我们考虑把数分成 x i , a i − x i x_i, a_i-x_i xi,aixi 两拨,记

y i = max ⁡ ( x i − x i − 1 , 0 ) z i = max ⁡ ( a i − a i − 2 − x i + x i − 2 , 0 ) \begin{aligned} y_i &= \max(x_i - x_{i-1}, 0)\\ z_i &= \max(a_i - a_{i-2} - x_i + x_{i-2}, 0) \end{aligned} yizi=max(xixi1,0)=max(aiai2xi+xi2,0)

只需最小化 ∑ y i + ∑ z i \sum y_i + \sum z_i yi+zi,考虑改写为线性规划:

x i , y i , z i ≥ 0 − x i ≥ − a i ( u i ) − x i + x i − 1 + y i ≥ 0 ( v i ) x i − x i − 2 + z i ≥ a i − a i − 2 ( w i ) \begin{aligned} x_i, y_i, z_i &\ge 0 \\ -x_i & \ge -a_i &(u_i)\\ -x_i + x_{i-1} + y_i &\ge 0 & (v_i)\\ x_i - x_{i-2} + z_i &\ge a_i - a_{i-2} & (w_i)\end{aligned} xi,yi,zixixi+xi1+yixixi2+zi0ai0aiai2(ui)(vi)(wi)

等价于对偶线性规划

u i , v i , w i ≥ 0 − u i − v i + v i + 1 + w i − w i + 2 ≤ 0 ( x i ) v i ≤ 1 ( y i ) w i ≤ 1 ( z i ) \begin{aligned} u_i, v_i, w_i &\ge 0 \\ -u_i - v_i + v_{i+1} + w_i - w_{i+2} &\le 0 & (x_i)\\ v_i &\le 1 & (y_i)\\ w_i &\le 1 & (z_i) \end{aligned} ui,vi,wiuivi+vi+1+wiwi+2viwi0011(xi)(yi)(zi)

最大化 ∑ i ( − a i ) u i + ∑ i ( a i − a i − 1 ) w i \sum_i (-a_i) u_i + \sum_i (a_i - a_{i-1}) w_i i(ai)ui+i(aiai1)wi

因此我们只需取 u i = max ⁡ ( − v i + v i + 1 + w i − w i + 2 , 0 ) u_i = \max(- v_i + v_{i+1} + w_i - w_{i+2} , 0) ui=max(vi+vi+1+wiwi+2,0),对最近的一个 v v v,两个 w w w 值做 DP 就可以了。复杂度 Θ ( n ) \Theta(n) Θ(n)

代码

D2T2

容易想到对于任何一个不存在长为 k k k 的连续段的,已经获得了 r r r 张牌的方案,它都有 1 ( n r ) \frac1{\binom n r} (rn)1 的概率被经过,并且期望停留 m m − r \frac{m}{m-r} mrm 的时间。对于一整段卡池长为 l l l,那么我们考虑末尾补一张牌必然没抽中,不存在长为 k k k 的段,其中计量没抽中的张数就可以用 [ z l + 1 ] 1 1 − u z 1 − z k 1 − z [z^{l+1}]\frac1{1-u z\frac{1-z^k}{1-z}} [zl+1]1uz1z1zk1 表示,这一形式只需考虑求出 z 1 − z k 1 − z z\frac{1-z^k}{1-z} z1z1zk 的复合逆,后拉格朗日反演即可。我们通过 F 1 − F k 1 − F F\frac{1-F^k}{1-F} F1F1Fk快速复合计算,就可以牛顿迭代。
最后需要把一些多项式乘起来,因此总共的复杂度瓶颈是 Θ ( m log ⁡ 2 m ) \Theta(m\log^2 m) Θ(mlog2m)。(恐怕 m log ⁡ 2 m m\log^2 m mlog2m 的部分比 m log ⁡ m m\log m mlogm 的部分快多了)
代码

你可能感兴趣的:(题集/比赛题解)