A
按照题意模拟即可。
注意幂次需要手动计算不能用 pow,因为数字过大。
B
由于要最大化冷场程度,所以贪心地让一个连续区间内的客人全部离席即可。
排序后枚举离席的第一个客人,取 即为答案。
时间复杂度 。
很抱歉这题在题意上出现了一些瑕疵。
C
位置上的答案相同,等价于
。利用异或的性质,得
。统计有多少个不同的
即可。
实现方法很多,时间复杂度 或
。
D
首先通过自身与自身相除可以构造出 ,然后用类似于快速幂的方式即可构造出任意的
。操作次数
。
E
先考虑如果 确定,最优的花费是什么。
我们定义从 出发到
,读档回到
的过程为
从 x 走到 z
, 中的点为关键点。
对于点 ,若其子树内(包含
)有至少
个关键点,那么遍历到点
一定不劣。
证明很简单,设子树内有 个关键点,那么每靠近
一段距离
,至少能减少
的代价,至多会增加
的代价(再走回去)。当
时,
。
所以只需要给每一个点打一个向上的差分标记,标记上传后,权值 的点就是需要遍历的。显然需要遍历的点形成了一个包含
的联通块,连通块内的点对答案的贡献是
(最后要回到
,所以每条边一定有一进一出),连通块外关键点到连通块路径上边对答案的贡献则是
(这部分的边不需要走到,但参观的花费依然有)。
考虑经过上述处理之后,对于一个 我们得到了什么:
我们将树剖成了三层,上层的边贡献为 ,中层的边贡献为
,底层的边贡献为
。因为
不可重,所以每一个上层节点和下层之间一定相隔了中层节点。
设 表示在以
为根的子树内,边的总贡献为
,
的返祖边为
边(
边表示中层的边,
边表示上层的边 )的方案数,用类似于树上背包的方式转移即可。
观察到答案的上界是 ,将
的情况丢掉后,时间复杂为
。
F
首先一个关键的结论是,点 一定落在
上。因为不在
上的路径对
的贡献是相同的,可以省去。
为了方便表述,以下设 。
不妨假设 落在
上(另一侧同理)。那么我们需要最小化
。设
表示
,则有
。
由于前两项都是定值,所以题目转化为找到最接近 的
的值。
考虑在 dfs 全树的同时,在每个节点维护一棵主席树,存储 路径上所有点的
值,查询时在对应的主席树上二分即可。
时间复杂度 。