边与东西向、南北向平行的正方形,可以由西南角和东北角唯一定下来。设这两个角的东西向读数是 a1<a2,南北向读数是 b1<b2。它是正方形,当且仅当 a2−a1=b2−b1。另外两个角就是 (a1,b2) 和 (a2,b1)。每处正方形只有一条这样的对角线,按这个方向枚举就不会重复计数。
四个角上都得有测点。再看闭包 a∈[a1,a2]、b∈[b1,b2] 里的测点总数,必须恰好等于 4。总数等于 4 时,四角各一座,四条边上和内部都没有别的测点;同一坐标叠了两座时,总数也会大于 4。
坐标可以到 109,不能直接开网格。先把出现过的东西向、南北向分别离散化,把每个坐标上的座数填进二维前缀和,任意闭包的座数就能 O(1) 求出来。
测绘组在园区地面放下了 m 个测点。第 t 个测点的平面位置写成 (at,bt),其中 at 表示东西向读数,bt 表示南北向读数。
从中挑出 4 个测点。若它们恰好占据某个正方形的四个角,四条边都顺着东西向或南北向,并且这个正方形的闭包里测点总数正好是 4(四个角之外,内部以及四条边上都不能再出现测点),则这 4 个测点构成一处空方。
同一个坐标允许重复出现,重复的每一次都单独算一个测点。请问这样的空方共有多少处。
第一行一个正整数 m,满足 1≤m≤1000。
第二行共 2m 个正整数,按测点顺序两两成组。每一组先写 bt,再写 at,满足 1≤at,bt≤109。
输出一个整数,表示空方的处数。
输入
4
1 1 3 1 1 3 3 3
输出
1
说明
四个读数还原成 (a,b) 后是 (1,1)、(1,3)、(3,1)、(3,3)。它们落在边长为 2 的正方形四角上,闭包中再无其他测点,因此答案是 1。
输入
9
1 1 1 2 1 3 2 1 2 2 2 3 3 1 3 2 3 3
输出
4
说明
这 9 个测点铺满 a,b∈{1,2,3} 的全部格点。边长为 1 的空方有 4 处,分别以 (1,1)、(2,1)、(1,2)、(2,2) 为西南角。以 (1,1) 与 (3,3) 为对角的大正方形闭包里还有中心和边中点,不能计入。
输入
5
2 2 2 6 6 2 6 6 4 2
输出
0
说明
五个位置是 (2,2)、(6,2)、(2,6)、(6,6)、(2,4)。前四个本可围出边长为 4 的正方形,但 (2,4) 落在西侧边上,闭包内测点数是 5,所以不能算。其余点对也凑不出另一处空方。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册