A

按照题意模拟即可。

注意幂次需要手动计算不能用 pow,因为数字过大。

B

由于要最大化冷场程度,所以贪心地让一个连续区间内的客人全部离席即可。

排序后枚举离席的第一个客人,取 即为答案。

时间复杂度

很抱歉这题在题意上出现了一些瑕疵。

C

位置上的答案相同,等价于 。利用异或的性质,得 。统计有多少个不同的 即可。

实现方法很多,时间复杂度

D

首先通过自身与自身相除可以构造出 ,然后用类似于快速幂的方式即可构造出任意的 。操作次数

E

先考虑如果 确定,最优的花费是什么。

我们定义从 出发到 ,读档回到 的过程为 从 x 走到 z 中的点为关键点。

对于点 ,若其子树内(包含 )有至少 关键点,那么遍历到点 一定不劣。

证明很简单,设子树内有 个关键点,那么每靠近 一段距离 ,至少能减少 的代价,至多会增加 的代价(再走回去)。当 时,

所以只需要给每一个点打一个向上的差分标记,标记上传后,权值 的点就是需要遍历的。显然需要遍历的点形成了一个包含 的联通块,连通块内的点对答案的贡献是 (最后要回到 ,所以每条边一定有一进一出),连通块外关键点到连通块路径上边对答案的贡献则是 (这部分的边不需要走到,但参观的花费依然有)。


考虑经过上述处理之后,对于一个 我们得到了什么:

我们将树剖成了三层,上层的边贡献为 ,中层的边贡献为 ,底层的边贡献为 。因为 不可重,所以每一个上层节点和下层之间一定相隔了中层节点。

表示在以 为根的子树内,边的总贡献为 的返祖边为 边( 边表示中层的边, 边表示上层的边 )的方案数,用类似于树上背包的方式转移即可。

观察到答案的上界是 ,将 的情况丢掉后,时间复杂为

F

首先一个关键的结论是,点 一定落在 上。因为不在 上的路径对 的贡献是相同的,可以省去。

为了方便表述,以下设

不妨假设 落在 上(另一侧同理)。那么我们需要最小化 。设 表示 ,则有

由于前两项都是定值,所以题目转化为找到最接近 的值。

考虑在 dfs 全树的同时,在每个节点维护一棵主席树,存储 路径上所有点的 值,查询时在对应的主席树上二分即可。

时间复杂度