阅读83 返回首页    go 阿里云 go 技术社区[云栖]


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

  上一篇:go 周鸿祎顶多只是个守门员!
  下一篇:go 青岛海尔为什么风光不再?