poj 2606 Rabbit hunt【同一條直線上的點】
我想這道2606在一條線上麵殺死兔子和上一題1118的在一條線上麵投放炸彈貌似沒有什麼不同。。。如果硬要扯點不同就是1118沒有交代坐標點 的正負,而2606交代了。。。反正這種解法對於是否包含負數沒有影響
直接在上一題的基礎上改了一下就順利AC。。。
而且我這次好奇的試了一下1118中效率較低的代碼,也AC了,可能是因為這裏的N是小於200,而且隻有一組測試數據的緣故吧
AC的代碼之一(高效版):
#include <stdio.h>
int x[202],y[202];
int main()
{
int n;
scanf("%d",&n);
int i;
//輸入坐標點的值
for(i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
//暴搜開始
int count,max=-1;
int j,k;
for(i=1;i<=n;i++)
for(j=i+1;j<=n;j++)
{
count=2;
for(k=j+1;k<=n;k++)
if((y[i]-y[k])*(x[j]-x[k])==(y[j]-y[k])*(x[i]-x[k])) count++;
if(max<count) max=count;
}
printf("%d\n",max);
return 0;
}
AC代碼之二(低效版):
#include <stdio.h>
int x[202],y[202];
int main()
{
int n;
scanf("%d",&n);
int i;
//輸入坐標點的值
for(i=1;i<=n;i++)
scanf("%d%d",&x[i],&y[i]);
//暴搜開始
int count,max=-1;
int j,k;
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(j==i)
continue;
count=2;
for(k=1;k<=n;k++)
{
if(k==i || k==j)
continue;
if((y[i]-y[k])*(x[j]-x[k])==(y[j]-y[k])*(x[i]-x[k]))
count++;
}
if(max<count) max=count;
}
printf("%d\n",max);
return 0;
}
最後更新:2017-04-03 14:53:45