POJ1118 Lining Up 计算几何
来源:互联网 发布:淘宝店铺名字测吉凶 编辑:程序博客网 时间:2024/05/29 17:45
题意:给你一个二维坐标上的几个点,问在同一条直线上最多几个点。
思路:
N=700,刚开始我枚举两个点i,j。(两个点一条线),然后用k枚举一遍各个点。这样算出每条线上最多的点。
用了O(N^3)的超时了。我真是太天真了。
其实在枚举每个k的时候就可以想到。k明显有一些可以优化的地方。
优化:
之前是枚举每条线,现在是枚举每个点,对于每个点i,求i和其它所有点的斜率。
找出斜率相同点的个数。(用hash空间承受不来),所有用sort(O(nLOGn))即可找出。
所有现在是O(N^2*LOGN),200+ms。
#include<iostream>#include<algorithm>#define max(a,b) (a>b?a:b)using namespace std;const int N=705;int x[N],y[N];double rate[N];int n;int main(){while(scanf("%d",&n),n!=0){for(int i=1;i<=n;i++){scanf("%d%d",x+i,y+i);}int ans=0;for(int i=1;i<=n;i++){int index=0;for(int j=1;j<=n;j++){if(i==j)continue;if(x[i]==x[j]){rate[++index]=99999999.0;}else{rate[++index]=double(y[i]-y[j])/(x[i]-x[j]);}}sort(rate+1,rate+index+1);int sum=0;for(int j=1;j<=index;j++){if(rate[j]==rate[j+1]){sum++;}else{ans=max(sum,ans);sum=0;}}}printf("%d\n",ans+2);}return 0;}
- POJ1118 Lining Up 计算几何
- poj1118(Lining Up)
- POJ1118 Lining up
- POJ1118 HDU1432 Lining Up
- 计算几何——Uva 270 Lining Up
- UVa 270 / POJ 1118 Lining Up (计算几何)
- POJ 1118 && HDU 1432 Lining Up(计算几何)
- POJ1118,Lining Up,暴力过的,hash什么的只能仰慕
- POJ 1118Lining Up【几何】
- uva 270 Lining Up(暴力+ 几何)
- uva 270 Lining Up (几何)
- Hdu 1432 Lining Up【简单几何】
- UVA 270 Lining Up (几何 判断共线点)
- uva270 - Lining Up(几何 - 最大共线点)
- POJ 1018 & HDU 1432 Lining Up 【简单几何】
- poj 1118 Lining Up
- pku 1118 Lining Up
- poj 1118 Lining Up
- 第一个应用程序Hello World
- 一个简单的阻塞队列实现
- 轻量级web server Tornado代码分析
- C#线程系列讲座(3):线程池和文件下载服务器
- Lua脚本语法说明(5.1 参考手册)
- POJ1118 Lining Up 计算几何
- C#线程系列讲座(4):同步与死锁
- 高内聚低耦合
- C#线程系列讲座(5):同步技术之Monitor
- 一位软件工程师的6年总结
- 如果你说的大家都爱听,你行的大家都爱看,那么你话再多都不是问题。
- hdu2544(最短路)
- 你不要瞧不起Ctrl+C
- Linux驱动之设备模型(7)