POJ_1118_Lining Up

///暴力解法,枚举每两个点,然后求出在这两个点所确定的直线上的点的总个数,具体方法 ///主要是利用斜率来比较大小,相等则在同一条直线上,反之在直线外。 ///应该考虑斜率不存在的情况,题目数据有点弱,所以我也没考虑,其实只要在求斜率时判断 //一下就行了 //与2606完全一样 #include<stdio.h> #include<algorithm> using namespace std; double pot[705][2]; double k[700]; int n,ans; int main() { while(scanf("%d",&n)==1&&n) { int i,j,t,temp; ans=0; for(i=0;i<n;i++) { scanf("%lf%lf",&pot[i][0],&pot[i][1]); } for(i=0;i<n;i++) { t=0;temp=1; for(j=i+1;j<n;j++) { k[t++]=(pot[j][1]-pot[i][1])/(pot[j][0]-pot[i][0]); } sort(k,t+k);//attention k[t]=k[t-1]-1; /*for(j=0;j<=t;j++) printf("%lf ",k[j]); printf("/n");*/ for(j=1;j<=t;j++) { if(k[j]!=k[j-1]) { if(temp>ans) ans=temp; temp=1; } else { temp++; } } } printf("%d/n",ans+1); } return 0; }

你可能感兴趣的:(POJ_1118_Lining Up)