好像很水....
但我就是想不到QAQ.......
AC VIJOS 1055 奶牛浴场
1 #include 2 #include 3 #include 4 5 #include 6 #include 7 #include 8 #include 9 10 #include 11 #include 12 #include
View Code 扫描线.
扫描的目的是"枚举所有的极大子矩形".详见 .....
我们枚举确定某些极大子矩形左端界的点,然后从左到右维护这个极大子矩形的上下界.
注意维护的时候要保证所得到的上下界形成的矩形确实是以枚举的点作左端界点.
并且对于每个点,要对题目给出的边界进行特判.
并且还要反方向扫一遍.
并且还要在与扫描线垂直的方向,把所有左/右边界由题目给出边界确定的极大子矩形枚举一遍.
可以证明这样做以后所有的极大子矩形都被枚举掉了....
AC VIJOS 1351 棋盘制作
1 #include 2 #include 3 #include 4 5 #include 6 #include 7 #include 8 #include 9 10 #include 11 #include 12 #include
View Code 悬线法.
枚举每条悬线,找到可以拓展的左右端界然后计算答案更新答案.
左右的可扩展范围可以预处理+递推出来.
预处理出所有点往左往右的可扩展范围.递推的时候根据点的信息,从上到下维护整条悬线的可扩展范围.
悬线的好处就在于,预处理的时候就按照行列把每个点处理成"障碍点"或"非障碍点". 扫描线如果不做预处理,细节上会神坑(大神轻拍).
可以证明所有的极大子矩形都能够由一条悬线扩展而来.
这样我们就根据上面的方法枚举了所有的极大子矩形.
写的时候注意我们枚举的是悬线,因此一但扫到了障碍点要及时将左右端界扩展到最大的可行界.
剩下的就是细节问题.......下标略感混乱.......
AC USACO 2015 Jan. Gold T1 Cow Rectangles
1 #include 2 #include 3 #include 4 5 #include 6 #include 7 #include 8 #include 9 10 #include 11 #include 12 #include
View Code 叫你找出一个覆盖最多"H"点的最小矩形,并且那个矩形不含"G"点.
$O(n^3)$ 算法......扫描线.......
结果在"如何统计点数最多的可行区间"那里卡了好久...
程序里先把点给拿出来...然后在最后放上一个虚节点....然后打上able标记....两个方向都要扫一遍.......
然后预处理好左端界......然后扫一遍作统计获取答案........
是不是很蠢......TAT