T1
- 20 pts: 对每组询问,暴力枚举所有区间,计算区间 gcd 的值即可。复杂度
- 50 pts: 对每组查询,用 ST 表求区间 gcd,枚举左端点,二分右端点即可。复杂度
- 80 pts: 考虑到数据随机的性质,根据质数的密度,gcd = 1 的区间长度上界是 级别的。那我们可以对每个左端点 ,维护最小的右端点 ,使得 ,然后增量更新答案,复杂度
- 100 pts: 记录 为区间 gcd 为 k 的倍数的区间,有多少个。那么根据 来计算答案。对每个 我们用 set 维护极长的,所有元素都是 的倍数的区间。复杂度为
T2
考虑动态规划的做法,我们用 表示目标分数为 ,当前轮得分为 的局面,最优策略需要几个回合(当前回合需要被计算在内)
先考虑一些特殊的状态
- ,此时无需进行游戏,已经完成目标。
- 当 时,,此时,结束当前回合就拿下了,继续投掷显然不优,所以需要一个回合。
接下来考虑 的递推。
- , ,... 求好了,考虑怎么求
决策有两种,
- 决策 1,放弃投掷:
- 决策 2,继续投掷:
这个递推的转移在 没有拓扑序,因为决策 2 等式右边依赖了 的值。
我们观察到 的值和等式左边 的值是有单调性的。
那么二分等式右边的 ,如果二分到
- 根据递推 ,依次求解
- 比较 和 的大小关系。
用后缀和优化 DP 转移,复杂度为
T3
- 我们可以观察到任意两个人的路径是不相交的,否则严格不优,因此每条边是“一方通行”的
- 考虑一棵树的情况。记 ,那么最小的搬运距离为 。
- 对于基环树的情况,我们考虑在环上任取一条边 ,枚举从 到 经过的人次 ,如果 则表示有 人从 走到了
- 断开 后,我们得到一棵树,以 为根,发现 取 到 路径上的点 值的中位数是最优的。
T4
不妨在 1 号点也放个任务 ,我们求出 两两之间的距离,记录
即从任务 , 到 ,到 ..... 到 的最短距离之和。
注意到,两人做任务一定是交替的区间,例如
- Alice 完成 1,2,3
- Bob 完成 4,5,6
- Alice 完成 7,8,
- Bob 完成 9
表示任务 被 Alice 完成了,Bob 上一个完成的任务是 ,且完成 到现在已经过去了 的时间。
我们枚举 Alice 接下来完成的任务 。直到第 个任务交给 Bob。转移分为两种。
- 如果 那么 Bob 到达 后,Alice 还没有没来,那 Bob 只能等着。
- 否则 Alice 可以在 Bob 到达 前 的时间离开
复杂度为