根据35行的函数可以看出是在二分寻找什么东西。通过主函数中64、65行可以看出在枚举i点和j点,并且查找i点的x,j点的y以及j点的x和i点的y.
通过画图可以发现程序思路:先确定两个点的x坐标和y坐标,在去枚举其它点是否满足矩形要求。有就计数。
-
①处应填 ( B)
A.a.x != b.x ? a.x < b.x : a.id < b.id
B.a.x != b.x ? a.x < b.x : a.y < b.y
C.equals(a, b) ? a.id < b.id : a.x < b.x
D.equals(a, b) ? a.id < b.id : (a.x != b.x ? a.x < b.x : a.y < b.y)
sort函数作用是对点进行排序,因为下面查找是按照二分的思路查找,因此点的排序应该按照X坐标和Y坐标的值排序。
选项中只有B满足。 -
②处应填 ( D)
A.i == 0 || cmp(A[i], A[i - 1])
B.t == 0 || equals(A[i], A[t - 1])
C.i == 0 || !cmp(A[i], A[i - 1])
D.t == 0 || !equals(A[i], A[t - 1])
unique()函数是在进行去重,第i个和上一个不一样就加入到数组中。
equals()函数功能是点一样返回1,点不一样返回0。还有特殊情况,第一个点不需要与前面的点比较直接加入即可。
-
③处应填 ( C)
A.b - (b - a) / 2 + 1
B.a + b + 1) >> 1
C.(a + b) >> 1
D.a + (b - a + 1) / 2
二分中mid取值为(最小+最大)/2 -
④处应填 ( B)
A.!cmp(A[mid], p)
B.cmp(A[mid], p)
C.cmp(p, A[mid])
D.!cmp(p, A[mid])
通过a=mid+1,可知mid比P要小,因此选B -
⑤处应填 ( D)
A.A[i].x == A[j].x
B.A[i].id < A[j].id
C.A[i].x == A[j].x && A[i].id < A[j].id
D.A[i].x < A[j].x && A[i].y < A[j].y
在枚举两个点的时候,两个点需要一左一右,才好确定,所以选D