POJ1118 Lining Up 计算几何
题意:给你一个二维坐标上的几个点,问在同一条直线上最多几个点。
思路:
N=700,刚开始我枚举两个点i,j。(两个点一条线),然后用k枚举一遍各个点。这样算出每条线上最多的点。
用了O(N^3)的超时了。我真是太天真了。
其实在枚举每个k的时候就可以想到。k明显有一些可以优化的地方。
优化:
之前是枚举每条线,现在是枚举每个点,对于每个点i,求i和其它所有点的斜率。
找出斜率相同点的个数。(用hash空间承受不来),所有用sort(O(nLOGn))即可找出。
所有现在是O(N^2*LOGN),200+ms。
浙公网安备 33010602011771号