ZJOI2019 补题记录

ZJOI2019 补题记录

麻将

补题的时候不会做,看了题解才会。

首先将期望转化成 \(\sum_{i=0}^{4n-13} P_i\) ,其中 \(P_i\) 是第 \(i\) 巡还没有和牌的概率。考虑给定前 \(i\) 巡的牌,如何判断是否能和。记 \(num[i]\) 为前 \(i\) 巡以及初始的牌中第 \(i\) 种牌的数量,首先将七对子特殊处理,判断 \(cnt = \sum_{i=1}^n [num[i]\geq 2]\) 是否 \(\geq 7\) 即可。然后令 \(f[i][j][k][t]\) 表示当前考虑了前 \(i\) 种牌,保留了 \(j\)\(i\)\(k\)\((i-1,i)\)\(t\) 对雀头后能形成的最多的面子数量,转移显然,只需要判断是否存在 \(f[n][j][k][1] \geq 4\) 即可。考虑对于每一种 \(num\) 的集合,都对应了一组 \(f[j][k][t]\) ,并且添加一种牌的 \(num\) 相当于转移到另一组 \(f[j][k][t]\) ,那么我们可以把这个 DP 当做一个自动机来维护,去掉重复节点以及可以和牌的节点后,自动机的节点数是 \(2092\) 。我们可以令 \(F[i][x]\) 表示添加了 \(i\) 种牌后,当前在自动机节点 \(x\) 的方案数,转移直接利用自动机上的转移边即可,这样就算出了每一个 \(P_i\)

线段树

补题的时候比较菜,只写了一个非常傻逼的 \(\mathcal O(n\log^2n)\) 的做法。

问题等价于求所有操作选取方案下的答案和,考虑每个节点的贡献独立,可以对每个节点分开来考虑,对于一个节点,我们把操作分成 5 类。

A:访问该节点父亲但未访问该节点,访问该节点兄弟节点 B:访问该节点并继续访问该节点儿子节点 C:访问该节点祖先节点并打标记 D:访问该节点并打标记 E:其他情况

一个节点的贡献就是求这个操作序列有多少个子序列,满足最后一个 CA 或者最后一个D 之后不存在 B,这个东西显然可以将操作序列求出来后 DP,同时也可以直接线段树维护。考虑记 \(s_1\) 为当前该节点还可以继续添加C或A的有贡献子序列数量,\(s_2\) 为当前节点还可以添加 C 的有贡献子序列数量,\(c\) 为当前节点以C结尾的序列数量,\(num\) 为当前节点有效操作的数量。

A: \(s_1 = 2s_1+c, s_2 = s_2,c=c,num+1\)

B: \(s_1 = s_1, s_2 = s_2,c=c,num+1\)

C: \(s_1 = s_1, s_2 = s_1 + 2s_2, c =c+2^{num},num+1\)

D: \(s_1 = s_1+2^{num-1}, s_2 = s_2, c = c,num+1\)

E: \(s_1 = 2s_1,s_2 =2s_2\)

可以在 ABCD操作的时候乘 \(\frac{1}{2}\) ,最后乘 \(2^n\) 然后直接不管 E 操作,现在 A, B, D 三类操作影响节点数量都是 小于等于 \(\mathcal O(\log n)\) 级别的,在线段树上暴力维护,对于 C 类操作,打标记维护。考虑每次做一个 C 类操作相当于做一次矩阵乘法,那么标记可以先合并次数,最后做 \(\mathcal O(\log n)\) 次向量乘法完成下放即可。

Minimax搜索

想了一个小时才会 70 分,然后马上会 100 分了但是调了4h才过。

考虑暴力 \(dp[u][L][R]\) 表示考虑节点 \(u\) 子树,当前 \(u\) 的权值可以调整到 \([L,R]\) 之间的任意的数的方案数,发现这个东西转移是所有的 \(L\) 取 maxmin 以及所有的 \(R\) 取 maxmin。然后考虑容斥,求最终不能改变的方案数,设 \(p\) 为不操作时最终的答案。那么对于每一个点需要知道 \(\sum_{R\leq p}dp[u][L][R]\)\(\sum_{L\geq p} dp[u][L][R]\) 即可维护转移,那么每个点要记的 \(dp\) 状态只有两个了,可以做到 \(\mathcal O(n)\) 求一个 \(K\)

对于剩下的部分,发现 \(K\) 改变时最多只会改变 \(\mathcal O(1)\) 个叶子的初始 \(dp\) 值,用动态 \(dp\) 大力维护即可。

开关

根本不会做,看题解才会

\(F(x)\)\(x\) 步恰好在目标状态的指母函数,\(F(x)=\frac{1}{2} \prod_{i=1}^n(e^{\frac{p[i]}{S}x}+(-1)^{s_i}e^{-\frac{p[i]}{S}x})\)\(G(x)=\frac{1}{2}\prod_{i=1}^n (e^{\frac{p[i]}{S}x}+e^{-\frac{p[i]}{S}x})\) ,把 \(F(x), G(x)\) 改成OGF形式 \(f(x),g(x)\) 答案就是 \(h(x)=\frac{f(x)}{g(x)}, h'(x)\) ,然后推推式子就完事了,我推不动。

语言

有一个trick是 \(m\) 个点的虚树大小可以排好 \(dfn\) 序后减去相邻的 \(lca\) 的深度,然后线段树合并就完事了

posted @ 2020-06-08 20:23  Joyemang33  阅读(439)  评论(1编辑  收藏  举报