Link
据说是比较水的题目?然而我似乎被NOIP题框住了。。
Solution
维护小鸟能到达的范围。因为是每次只能上下,所以根据横坐标的差值可以得到纵坐标的变化区间。 一开始是,然后依次扩大,并与可以通过障碍物的区间取交。 注意:可以通过障碍物的区间并不是每个点都可以到达,只有纵坐标值奇偶性和横坐标相同的时候才可以。但是区间之内的点不会造成影响,只有区间端点才会造成影响(区间长度的时候,一定存在合法的点)。所以每次要判断一下得到的区间是否合法。 当区间为空集的时候立即退出,因为后面的操作还会再把区间扩大,可能就又合法了。
Tips
做到题目的弱化或者强化版不要被之前的思路限制住,要找到原来的做法套在当前题目上多了什么,少了什么。
Code
1 | //Code by Lucida |
方程相应为
这样确实就需要用那种神奇的方法了……这个神奇的方法确实很厉害,应该能在别的地方用到,但我还是觉得对这道题来说我的方法好一些。
(最后面划的那几下是表明以此类推。。)
然后就很清晰了,只要维护每一竖列的最大值,就可以更新了。
否则也有两种情况
讨论
所以这样是不行的。。
而CDQ分治恰好可以对区间的两半分别做一些操作而不影响答案,于是就CDQ分治
第一维,按照可以到最靠左的点排序;第二维,分治区间
在统计答案的时候,两个指针都从右向左走,维护满足距离限制的凸壳
回溯的时候按照标号的大小顺序归并