[USACO20DEC] Square Pasture 题解
题目大意:给你 \(n\) 个格子,你要用一个大小任意的正方形把它们框起来,问可能得到的格子的集合有多少种。
考试的时候想到一个很魔怔的做法:确定最上、最下、最左、最右四个格子,然后再将这个框架不断的移动,验证有没有一个这样的正方形使得此方案可行。
然而我还是太 naive 了。其实只要确定最左和最右的两个格子,确定当前正方形框架的边长。
于是便将这个框架不断地上下移动,统计集合的个数。
注意,此时要保证两个格子的横坐标差大于等于纵坐标差。
如果你先确定上下两个格子的话,其实也差不多。
画个图来帮助理解。
这是一个网格(有色的代表奶牛占据的方格,而其中两个绿色的代表我们钦定的“最左”“最右”两个格子):
我们确定了该正方形的框架的边长为5。图中两个蓝色的框为它可能的位置。
你也可以将其看做紫色箭头所代表的一个“向下拖拽”的过程。
那么,如何验证一个格子是否可能在这个框之中呢?
可以先将这些格子按照一个坐标值为关键字排序,然后再用双指针就做完了。
我好菜啊。——ฅ(OωO)ฅ