题目链接
题目类型:想法题
题目来源:2016年多校Round3
题目分析
题目大意
给出n个点的坐标,问是否存在(A, B, C, D),使(A, B)的曼哈顿距离等于(C, D)的曼哈顿距离。A B C D只需要保证至少有三个不同的点(即三次输入的内容)即可。
解析
实际上只需要暴力的枚举所有线段即可,但是数据范围是105,如果O(n2)的跑必然是会T的,为什么能过呢?这其实挺值得思考的。
当第一个点出现在坐标系中,第二个点跟他的曼哈顿距离为1时,距离为1已经出现了第一次了,如果再出现一个点且不能距离为1了,否则没有意义,其曼哈顿距离必然与第二个点为2,此时与第一个点的距离为3,同理下一个点与第三个点的距离为4,以此类推,某队的小伙伴证明出来最多只有600+个点的时候能存在最大情况的不存在等距线段。所以分析一下,复杂度远小于O(n2)
官方题解:
考虑一种暴力,每次枚举两两点对之间的曼哈顿距离,并开一个桶记录每种距离是否出现过,如果某次枚举出现了以前出现的距离就输 $YES$ ,否则就输 $NO$ .
注意到曼哈顿距离只有 $O(M)$ 种,根据鸽笼原理,上面的算法在 $O(M)$ 步之内一定会停止.所以是可以过得.
一组数据的时间复杂度 $O(\min{N^2,M})$ .
代码
1 |
|