POJ3512 Incidental Points

来源:互联网 发布:淘宝云客服没有招聘 编辑:程序博客网 时间:2024/05/29 04:03

题意是给你些笛卡尔坐标系上的格点,求最多有多少个点在一条直线上。

这题的输入很麻烦,推荐用gets后再sscanf输入,

这题还卡时间!!!只有O(n^2*logn)以下的算法能过,而且之前我用stl写也超时了,

所以这里我直接用数组排序模拟,勉强过了,真是恶心的题啊= =


#include <cstdio>#include <algorithm>using namespace std;const double INF = 1e300;int cas=1;char str[100];int x[1005],y[1005],n;int xx,yy,m,cnt,ans;double k[1005];int main(){while (1){n=0;while (1){gets(str);if (str[1]=='-') break;sscanf(str,"%d%d",&x[n],&y[n]); n++;}if (n==0) break;if (n==1) ans=1;else ans=2;for (int i=0;i<n;i++){m=0; cnt=1;for (int j=i+1;j<n;j++){xx=(x[j]-x[i]);yy=(y[j]-y[i]);if (xx==0) k[m++]=INF;else k[m++]=(double)yy/xx;}sort(k,k+m);for (int j=1;j<m;j++){if (k[j]==k[j-1]) cnt++;else{if (cnt+1>ans) ans=cnt+1;cnt=1;}}if (cnt+1>ans) ans=cnt+1;}printf("%d. %d\n",cas++,ans);}return 0;}


原创粉丝点击