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