2022 International Collegiate Programming Contest, Jinan Site 部分题目简要题解

Problem B Torch

  注意到 a1,b1,a2,b2 的和不会超过 106

  考虑胖先生的周期开始的时候,瘦先生的周期在时刻 t,距离胖先生的距离为 x+1,那么胖先生的周期结束的时候,瘦先生的距离胖先生的距离大概是 max(x+c,0)+1 之类的东西,其中 c 是一个和 t 有关的常数。

  这个信息不难合并。对于每个询问,相当于是若干个循环再加上一个前缀和之类的东西,然后再处理一下一个周期中零散的情况。

  时间复杂度 O(a1+b1+n)

Code

Problem C DFS Order 2

  考虑一个点在 dfs 序在 x 的方案数相当于它到根节点的祖先,每个把自己节点做背包。同时每个祖先处做背包还要维护一下在这个点之前选了多少棵子树。

  直接通过合并前后的背包复杂度会炸,改成二元多项式除就可以了。

Code

  考场上写过了,感觉还有点小胖,懒得再写一遍了。

Problem F Grid Points

  你看我这老年人像是会补 0 队 ac 的题目的吗

Problem G Quick Sort

  模拟一下这个过程可以发现 p 的值要么是 pivot 要么是 pivot1

  考虑枚举两边中少的一边。找交换的时候另外一边的数的时候,考虑维护一下每个值的位置,然后把少的半边的值拉出来排序。

Code

Problem H Set of Intervals

  首先特判 n=1。 

  考虑判定一区间 [x,y](x<y) 是否可行。可以注意到如果有一个区间包含 x,那么在之后的合并过程中,我可以让它包含 x

  如果一个区间包含 x,一个包含 y ,那么显然我通过一次合并可以得到 [x,y]

  现在考虑怎样凑出一个包含 x 的区间:

  • 本身存在一个区间包含 x
  • x 两侧分别至少存在 1 个区间

  显然除了这两种情况,剩下都是不可能的

  考虑扫描线,计算 x=l 的时候可能的右端点的范围。

  暴力的做法是枚举 x 是怎么凑出来的,删掉这些区间,然后求剩下的区间中最小的左端点 L 以及最大的右端点 R,可能的右端点的范围为 [L,R]

  每次最多只会删掉 2 个区间,所以如果 n 足够大,这些可能的右端点的范围的并集就是所有的 L 取 min,右端点取 max(当 2 种凑 x 方案使得剩下的区间只要有 1 个公共的时候,可以保证这两个 [L,R] 不是相离的)。当 n 足够大的时候,要么就是删掉 1 个或者 2 个区间求 [L,R],要么就是对所有区间的求。

  如果 n 比较小,直接暴力就行了。

Code

Problem I Shortest Path

  傻逼学院负责人

  假设有一条路径绕一个很大的环(环大小至少为 3),设上面的最小的边为 e,那么我可以通过较短的一条路径走到 e,然后在 e 上左右横跳若干次,再折返回来,如果奇偶性不对那么这个环是个奇环,再把这个环绕一圈就可以了。

  剩下就很傻逼了。给路径长度设一个阈值 L,然后求一下经过每条边,路径长度为 L,L+1 的最短路径。路径长度大于 L 的时候搞个凸包就可以了。

Code

Problem J Skills

   考虑 3 维 dp 滚动后实际转移是怎么样的:

  • 每行每列求个最值
  • 每行每个做一个等差数列加

  显然这能斜率优化,维护 O(n) 个凸包就可以了

  写完感觉自己代码长度不太对,瞄了一下题解。怪诶,为什么我印象里值域是 109

  Emmmm.......值域很小,所以一个技能不会连续不学太多天。

Code

Problem L Tree Distance

  考虑 dist(u,v)=dep(u)+dep(v)2×dep(lca(u,v))

  考虑点分治,考虑硬点分治中心是路径的 lca,因为 lca 深度那一项是减,所以如果不是真正的 lca 的话存在更小的答案。

  那么对于一个分治区域内的点,肯定是选择深度最小的和次小的作为答案,考虑一对点 (u,v) 不妨设 u<v,如果能贡献到答案,那么要满足 [u,v]u,v 的深度是最小值或者次小值,讨论 u 是区间最小还是 v 是区间最小,然后搞个单调栈就可以了。

  现在只有 O(nlogn) 个候选点对。直接扫描线处理询问就可以了。

  upd:这里扫描线因为只有添加点,查后缀,所以可以用树状数组(

Code

posted @   阿波罗2003  阅读(321)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示