题意简述
一个 $n\times n$ 的网格,在每列上方各有一个激光发射器,下方各有一个激光接收器。
第 $i$ 个接收器希望接收来自第 $p_i$ 个发射器的激光。你可以在一些位置 45 度放置镜子,使得最多的接收器满足其需求。
求出最多数量并给出一种放置镜子的方案,保证 ${a_n}$ 为排列,$n\le 1000$。
主要思路
简单构造题。
容易发现除非对于任意 $i$ 均有 $i = p_i$ 时答案为 $n$,其余答案均为 $n - 1$。
等价地,设第 $i$ 个发射器希望射到 $a_i$ 列。
不妨钦定第 $1$ 个发射器无法满足,则对于点 $1$ 所在的环 $S$,容易使用 $|S| - 1$ 行对该环中的其他元素均满足,从第 $a_1$ 个发射器开始,依次处理即可。
对任意其他环 $T$,可以使用 $|T|$ 行使其中所有元素均满足:找到一个位置使得 $x > a_x, a_x < a_{a_x}$,则可以利用第一列满足该环——从第 $a_x$ 发射器开始依次处理即可。
以下是一个简单例子:
1 | a: |
参考代码
1 |
|