Link
什么鬼题,做完了整个人都方了。。 正方形可以斜着!可以斜着!可以斜着!
Solution
容斥自不必说。。。
考虑“太难了”的问题,怎么做?
对于每个正方形,不管它怎么斜,肯定对应着唯一一个正好套着它的、与坐标轴平行的正方形,称之为框架(Framework)。每个边长为的框架,肯定包含着恰好个以它为框架的正方形。所以只要枚举每种长度的框架有几个,就可以得到答案。
那么剩下的,对应着正方形上有几个被删除的点,就有四种情况。
至少删除二三四个的情况,一个枚举,都很好说。
只剩下经过至少一个被删除的点的情况。
地枚举必然被删除的那个点,剩下的问题就是统计有多少个正方形以这个点为一个角。
然后,由于一个正方形有唯一的框架;一个框架上每个点只是一个正方形的角。所以,以一个点为角的正方形数==经过这个点的框架数
然后问题转化成求经过一个点的、与坐标轴平行的正方形数。
可以把平面分成四个形如阴影的部分,然后把四部分答案相加,再把重合部分的减一下。
现在问题转化为
经过一个数轴上定点,并且处于一段固定长度的区间内,且有边长限制的正方形个数。
先考虑简化的版本:如果没有固定长度的限制怎么做?
显然,枚举每种长度,并且在数轴上滑一滑,可以得到总和为(为边长限制)
现在考虑超出数轴边界的。只考虑超出左边界的,右边界差不多。
只有边长超过的才会超出数轴边界,边长为,会被截去个。边长为,会被截去个。求出有多少种边长超出了限制,就可以用求和公式计算对答案的贡献了。
Code
1 |
|