poj2606:http://poj.org/problem?id=2606
给你n个点,求在一条直线上的点最多有几个。
题解:直接暴力,但是要注意,横坐标相等的情况,这是不能求斜力,只能特殊处理。
1 #include<iostream> 2 #include<cstring> 3 #include<cstdio> 4 #include<algorithm> 5 using namespace std; 6 struct Node{ 7 int x; 8 int y; 9 }node1[102]; 10 int n; 11 int ans; 12 double KK(Node a,Node b){ 13 if(a.x!=b.x) 14 return (a.y-b.y)/(double)(a.x-b.x); 15 } 16 int main(){ 17 while(~scanf("%d",&n)){ 18 ans=0; 19 for(int i=1;i<=n;i++) 20 scanf("%d%d",&node1[i].x,&node1[i].y); 21 for(int i=1;i<=n;i++) 22 for(int j=i+1;j<=n;j++){ 23 int ans2=2; 24 if(node1[i].x==node1[j].x)continue; 25 double ss=KK(node1[i],node1[j]); 26 for(int k=1;k<=n;k++){ 27 if(k==j||k==i)continue; 28 if(node1[i].x==node1[k].x)continue; 29 double s2=KK(node1[i],node1[k]); 30 if(ss==s2)ans2++; 31 32 } 33 if(ans2>ans) 34 ans=ans2; 35 36 } 37 38 for(int i=1;i<=n;i++) 39 { int ans2=1; 40 for(int j=i+1;j<=n;j++){ 41 if(node1[i].x==node1[j].x) 42 ans2++; 43 } 44 if(ans2>ans) 45 ans=ans2; 46 } 47 printf("%d ",ans); 48 } 49 }