poj2606:http://poj.org/problem?id=2606
给你n个点,求在一条直线上的点最多有几个。
题解:直接暴力,但是要注意,横坐标相等的情况,这是不能求斜力,只能特殊处理。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
struct Node{
int x;
int y;
}node1[];
int n;
int ans;
double KK(Node a,Node b){
if(a.x!=b.x)
return (a.y-b.y)/(double)(a.x-b.x);
}
int main(){
while(~scanf("%d",&n)){
ans=;
for(int i=;i<=n;i++)
scanf("%d%d",&node1[i].x,&node1[i].y);
for(int i=;i<=n;i++)
for(int j=i+;j<=n;j++){
int ans2=;
if(node1[i].x==node1[j].x)continue;
double ss=KK(node1[i],node1[j]);
for(int k=;k<=n;k++){
if(k==j||k==i)continue;
if(node1[i].x==node1[k].x)continue;
double s2=KK(node1[i],node1[k]);
if(ss==s2)ans2++; }
if(ans2>ans)
ans=ans2; } for(int i=;i<=n;i++)
{ int ans2=;
for(int j=i+;j<=n;j++){
if(node1[i].x==node1[j].x)
ans2++;
}
if(ans2>ans)
ans=ans2;
}
printf("%d\n",ans);
}
}