poj 2606

题目链接: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);
}

  

原文地址:https://www.cnblogs.com/fengyuehan/p/poj2606.html