[USACO20DEC] Square Pasture 题解

题目大意:给你 \(n\)格子,你要用一个大小任意的正方形把它们框起来,问可能得到的格子的集合有多少种。

考试的时候想到一个很魔怔的做法:确定最上、最下、最左、最右四个格子,然后再将这个框架不断的移动,验证有没有一个这样的正方形使得此方案可行。

然而我还是太 naive 了。其实只要确定最左和最右的两个格子,确定当前正方形框架的边长。

于是便将这个框架不断地上下移动,统计集合的个数。

注意,此时要保证两个格子的横坐标差大于等于纵坐标差。

如果你先确定上下两个格子的话,其实也差不多。

画个图来帮助理解。

这是一个网格(有色的代表奶牛占据的方格,而其中两个绿色的代表我们钦定的“最左”“最右”两个格子):

我们确定了该正方形的框架的边长为5。图中两个蓝色的框为它可能的位置。

你也可以将其看做紫色箭头所代表的一个“向下拖拽”的过程。

那么,如何验证一个格子是否可能在这个框之中呢?

可以先将这些格子按照一个坐标值为关键字排序,然后再用双指针就做完了。

posted @ 2021-01-28 10:58  ฅ(OωO)ฅ  阅读(105)  评论(0编辑  收藏  举报
"scale": 1 }, "display": { "position": "left", "width": 100, "height": 200, "hOffset": 70, "vOffset": 0 }, "mobile": { "show": true, "scale": 0.5 }, "react": { "opacityDefault": 0.7, "opacityOnHover": 0.2 } }); window.onload = function(){ $("#live2dcanvas").attr("style","position: fixed; opacity: 0.7; left: 70px; bottom: 0px; z-index: 1; pointer-events: none;") } -->