閱讀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 青島海爾為什麼風光不再?