做题记录 26.2.19

\(\textcolor{black}\odot\) AT_agc062_d [AGC062D] Walk Around Neighborhood

先将 \(a\) 从小到大排序,若 \(\sum a_{1\sim n-1}<a_n\) 则无解

否则必然存在解,且上界为 \(a_n\)\(a_{1\sim n-1}\) 可以走到同原点曼哈顿距离为 \(a_n\) 的正方形上,然后再用 \(a_n\) 回到原点),下界为 \(\frac{a_n}2\)(否则无法容纳 \(a_n\)),因此从小到大枚举 \(\frac{a_n}2\le d\le a_n\),判断 \(d\) 是否可以作为答案

等价于将集合分为两部分,且两部分都可以走到同原点曼哈顿距离为 \(d\) 的正方形上(根据 \(d\) 的取值范围,走到正方形上后必然可以在边界上徘徊,显然若一个集合可达边界,则可达边界上任意一点)

需要选出两个不交集合,使得两者和都 \(\ge d\)

显然至多使用两个 \(\ge d\) 的元素,令 \(x,y\) 分别为 \(\ge d\) 的最小值和次小值,显然 \(x\) 一定存在

若两者同时存在,则需要将 \(<d\) 的元素划分为两部分,和分别 \(\ge x-d\)\(\ge y-d\)

若只存在 \(x\) 则要求两部分分别 \(\ge x-d\)\(\ge d\)

两者等价于可以用 \(<d\) 的数表示出一个区间内的值,容易 bitset 优化

时间复杂度 \(O(\frac{V^2}\omega)\),其中 \(V=\max d\)

代码

参考

\(\textcolor{black}\odot\) P11986 [JOIST 2025] 救护车 / Ambulance

先令 \(t\gets \lfloor\frac t2\rfloor\) 处理往返的问题

假定只有 \((1,1)\)\((l,l)\) 两所医院,则任意一人到两者的距离之和固定,最优解为根据到 \((1,1)\) 的距离从小到大排序,一个前缀到 \((1,1)\),剩余到 \((l,l)\)

对于原题的情况,四个医院分为 \((1,1),(l,l)\)\((1,l),(l,1)\) 两组,第一组根据到 \((1,1)\) 的距离排序,第二组根据到 \((1,l)\) 的距离排序,确定了两组的划分后方案唯一

将所有点根据到 \((1,1)\) 的距离排序得到顺序 \(p\),到 \((1,l)\) 的距离排序得到顺序 \(q\)

枚举 \(p\) 的一个前缀和 \(q\) 的一个前缀,\(p\) 的前缀中点可以到达 \((1,1)\),后缀中点可以到达 \((l,l)\)\(q\) 同理,由此可以将点集根据是否在 \(p\) 的前缀中和是否在 \(q\) 的前缀中划分为四个等价类,每个等价类中只有两种选项

对于每个等价类处理出 \(f_i\),表示第一个选项的距离之和不超过 \(i\) 时第二个选项距离之和的最小值,容易 \(O(|S|t)\) 处理,其中 \(S\) 为此等价类

\(O(t)\) 枚举第一个等价类中的选择,容易根据 \(f\) 贪心得到另外三个等价类中的选择

总时间复杂度 \(O(n^3t)\)

发现可以通过给点集重编号使得四个等价类都是一个序列的前缀后缀,可以预处理

时间复杂度 \(O(n^2t)\)

代码

参考

\(\purple\odot\) P11664 [JOI 2025 Final] 缆车 / Mi Teleférico

\([l,r]\) 合法当且仅当保留 \([l,r]\) 内的边后 \(2\sim n\) 每个点都有至少一个前驱

对于一个点,设其前驱边权为 \(w_{1\sim k}\)(已经排序,且 \(w_1=1,w_k=p\)),\([l,r]\subseteq[w_i+1,w_{i+1}-1]\) 都不合法

显然只用到 \(O(n+m+q)\) 个点,因此将 \(p\) 离散化到 \(O(n+m+q)\),以下 \(p\) 表示离散化后的结果

容易处理出 \(rp_l\) 表示 \(l\) 的最小合法右端点

一组询问 \((l,r,x)\) 等价于判断

\[\min_{1\le i\le p} \sum_{j=rp_i}^p (|i-l|+|j-r|) \]

是否 \(\le x\),可拆分为 \(4\) 个二维数点

总时间复杂度 \(O((n+m+q)\log(n+m+q))\)

代码

posted @ 2026-02-20 09:08  Hstry  阅读(1)  评论(0)    收藏  举报