跨年比赛记录(CF1777 赛时+补题)
赛时
开赛前,跟某位朋友说窝可能不会 A,结果就真犯了离谱错误,一会儿没写输入一会儿写错输出,竟然 9min 才过 A😅!你看这个 0922 就是菜啦!
这个 B 很结论,瞪一眼就秒了,赛时写了 6min 就过了 B,这说明这个 B 比 A 还要水!😰
C 是个很套路的简单贪心 + 模拟,写了一会儿就过了,中间犯了离谱错误,花了不少时间。
看 D,不会了,想了一会儿没想出来呐。
看 E,还是找不到思路。
于是就去看烟花了。
赛后补题
比赛结束后看 QQ 裙,裙佬犀利地指出了 D 的结论,哈,一下子就明白了啦,妙!于是决定对这思维的火花做一点小小的记录。
D
首先观察叶子结点,发现每个叶子结点在第一时刻为 \(1\) 的概率是 \(\frac12\)。
继续考虑高度为 \(2\) 的点(儿子只有叶子结点的点),发现其在第一时刻为 \(1\) 的概率为 \(\frac12\),第二时刻为 \(1\) 的概率取决于其每个孩子在第一时刻的取值,而每个孩子在第一时刻取值为 \(0\) 或取值为 \(1\) 的概率皆为 \(\frac12\),由于异或运算中每个元素的变化都会对结果造成影响,于是该结点在第二时刻取值为 \(1\) 的概率仍为 \(\frac12\)。
以此类推,可以发现在某一时刻(与结点高度有关)后某一结点的取值均为 \(0\),而在这一时刻前,该结点在每一时刻取值为 \(0\) 或 \(1\) 的概率皆为 \(\frac12\)。
E
E 也是一道巧妙的题目,由题面不难想到二分答案,巧妙之处在于判定。
判定时,我们无法确定每一条可以转向的边是否需要转向,这里有一个巧妙的 trick,我们可以把需要转向的边定为双向边。
我们来简要说明一下这个 trick 的正确性,我们只需要说明在转换为双向边的图中,若存在一个可到达所有点的点 \(s\),那么从这个点到图中的任何一个点所经过的路径中,可以只从一个方向经过这条双向边。
假设这条双向边为 \((u, v)\),那么从 \(s\) 到 \(u\) 和 \(s\) 到 \(v\) 的路径中至多有一条必须经过 \((u, v)\),于是只需单向通过该边便可到达点 \(u\) 和 \(v\),下略。
那么判定只需在建出的新图上跑 \(Tarjan\) 缩点,后判定是否只有一个入度为 \(0\) 的点即可(考虑反向图,可发现从每个点出发最终都会到达一个出度为 \(0\) 的点,那么原图中若有唯一入度为 \(0\) 的点,可以到达其它所有点)。
F
观察式子,看到前面的 \(\max\) 可以发现要求出每个 \(a_i\) 的支配区间,后面的连续段的 \(\operatorname{xor}\) 和可以用类似于前缀和的方法计算,实际上就是在笛卡尔树上跑一个字典树的启发式合并,复杂度分析类似于 dsu on tree,是一个 \(\mathcal{O}(n\log n\log a)\) 的。
这题代码犯了离谱错误调了几小时,真是无可救药呢😥