题目链接:http://poj.org/problem?id=2606
暴力搜索解决了,但是很慢469ms
但要注意斜率不存在的直线
我是把斜率为零,斜率不存在,和其他情况 三种情况讨论的
放代码
#include <stdio.h>
#include <stdlib.h>
struct zx {
int x;
int y;
double k;
};
struct zx a[20200];
int pd(struct zx s,int x,int y)
{
double t;
if(s.k==2000)
{
if(s.x==x)
return 1;
else
return 0;
}
else if(s.k==0)
{
if(s.y==y)
return 1;
else
return 0;
}
else
{
if(x==s.x||y==s.y)
return 0;
else
{
t=(double)(x-s.x)/(y-s.y);
if(t==s.k)
return 1;
else
return 0;
}
}
}
int main(int argc, char** argv) {
int i,j,n,k,a1[202][2],sum,max=0;
double t=-1;
scanf("%d",&n);
k=0;
for(i=0;i<n;i++)
{
scanf("%d %d",&a1[i][0],&a1[i][1]);
for(j=0;j<i;j++)
{
if(a1[i][0]-a1[j][0]==0)
{
a[k].x=a1[j][0];
a[k].y=2000;
a[k].k=2000;
}
else if(a1[i][1]-a1[j][1]==0)
{
a[k].x=2000;
a[k].y=a1[j][1];
a[k].k=0;
}
else
{
a[k].x=a1[j][0];
a[k].y=a1[j][1];
a[k].k=(double)(a1[i][0]-a1[j][0])/(a1[i][1]-a1[j][1]);
}
k++;
}
}
for(i=0;i<k;i++)
{
sum=0;
for(j=0;j<n;j++)
{
sum+=pd(a[i],a1[j][0],a1[j][1]);
}
if(sum>max)
{
max=sum;
t=a[i].k;
}
}
if(t!=0&&t!=2000)
printf("%d\n",max+1);
else
printf("%d\n",max);
return (EXIT_SUCCESS);
}