Loading

[abc274F] Fishing 题解

比较有趣的用点思维的题。

在学校和 DYS 一起推出来的题,庆祝 AT 复活写个题解。

感觉用无序列表列出自己思绪的过程很简洁扼要,但是行文节奏过快。介于我想重现自己今天上午的思路过程,这篇题解用对话体写出。


师:现在,让我们看 abc274F。给定 \(n\) 条鱼的初始位置、速度、重量,请任选一个时刻撒下一张长度为 \(A\) 的网,最大化网中鱼的重量和。时刻与撒网端点都不必是整数。\(n \leq 2000\)

A:有初始位置,匀速增长,区间求值……我想到了 P6405

B:P6405 要求的是恰好相等,相等具有传递性,但是网住没有传递性。能同时网住 AB 与能同时网住 BC 不意味着能同时网住 ABC。这个思路没法做下去。

师:我们已经迈出了第一步。想想看,为什么这个网看着难以处理?

A:时刻任意,位置任意,变量也太多了点!

B:但是 \(n\) 仅有 \(2000\),我们完全可以枚举其中一个再处理。

如果时间确定,能网住一条鱼的网的对应左端点是一个固定区间。如果位置确定,能网住一条鱼的下网时刻也是一个固定区间。问题变为:数轴上 \(n\) 条线段,每条线段有权值,求一个点让覆盖其的线段的权值和最大。这可以用线段树+离散化 \(O(n \log n)\) 解决。\(O(n^2 \log n)\) 是能接受的,只需要 \(O(n)\) 枚举其中一个变量。枚举哪个好呢?

A:我发现了一个性质。一定存在渔网左端点位于一条鱼上时的最优解。看起来,我们可以枚举那条鱼。

B:那么我们需要让位置确定。把其它所有鱼的速度减去这条鱼的速度,这条鱼就会相对静止,也就是这条鱼的位置不变,即下网左端点不变。运用上面说的方法,我们就能在 \(O(n^2 \log n)\) 内解决问题!

事实上,我自己开始看错题以为 \(x\) 给定,然后直接想到了确定一个数的做法,再结合 DYS 发现的性质,拼在一起,居然做完了题。有意识地简化问题,有时是通往正解的道路。

posted @ 2022-10-24 20:35  purplevine  阅读(25)  评论(0编辑  收藏  举报