Rabbit hunt

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 }
View Code
原文地址:https://www.cnblogs.com/chujian123/p/3385448.html