hdoj1077 Catching Fish(几何题,枚举遍历)

原创 2017年06月11日 10:21:53

来源:http://acm.hdu.edu.cn/showproblem.php?pid=1077

可以由两个点确定两个圆心。圆心与两个点的距离为1,画图易知,圆心位于两点连线的中垂线上,

本题的关键就在于求出圆心坐标。

存在两种情况

1.当两点的y值相等。

2.当两点的y值不等。

具体见代码:

#include<stdio.h>
#include<math.h>
#include<string> 
using namespace std;
struct point
{
	double x,y;
};
point p[305];
point a,b;//对称的两个圆点 
double dist(point m,point n)//两点距离 
{
	return sqrt((m.x-n.x)*(m.x-n.x)+(m.y-n.y)*(m.y-n.y));
}
void getcp(point m,point n)//得到圆点坐标 
{
	point p1;
	double edge,dis;
	p1.x=(m.x+n.x)/2;p1.y=(n.y+m.y)/2;
    dis=dist(p1,m);
	edge=sqrt(1-dis*dis);
	if(fabs(m.y-n.y)<1e-4) 
	{
		a.x=p1.x;
		a.y=p1.y+edge;
		b.x=p1.x;
		b.y=p1.y-edge;
	}
	else
	{   
	   double angel=atan(-(m.x-n.x)/(m.y-n.y)); 
	   a.x=p1.x+edge*cos(angel);
	   a.y=p1.y+edge*sin(angel);
	   b.x=p1.x-edge*cos(angel);
	   b.y=p1.y-edge*sin(angel);	    	
	}
}
int main()
{
	int t,n,i,j,k;
	int cnt,max;
	scanf("%d",&t);
	while(t--)
	{
		scanf("%d",&n);
		for(i=0;i<n;i++)
		scanf("%lf%lf",&p[i].x,&p[i].y);
		max=1;
		for(i=0;i<n;i++)
		for(j=i+1;j<n;j++)
		{
			if(dist(p[i],p[j])>2.0)continue;
			getcp(p[i],p[j]);
			cnt=0;
			for(k=0;k<n;k++)
			{
				if(dist(p[k],a)<1+1e-4)cnt++;
			}
			if(cnt>max)max=cnt;
			cnt=0;
			for(k=0;k<n;k++)
			{
				if(dist(p[k],b)<1+1e-4)cnt++;
			}
			if(cnt>max)max=cnt;			
		}
		printf("%d\n",max);
	}
	return 0;
}


hdu 1077 Catching Fish

Catching Fish Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) T...

HDU 1077 枚举圆心, 数学

从所有点中依次取两点,然后判断到两点m, n距离为半径1的点centre(易知center在m, n连线的中垂线上)。然后判断其余有多少点在以centre为圆心的圆内,记作ans,最后找出最大的ans...
  • vsooda
  • vsooda
  • 2012年09月23日 20:27
  • 1250

hdu1077已知半径以及圆上2点求圆心 圆圈点的个数

Catching Fish Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

hdu-1077-Catching Fish-计算几何、枚举圆心

hdu-1077-Catching Fish-计算几何、枚举圆心

HDU--1077[Catching Fish] 枚举圆心

题目大意:给出一些点坐标,问有一个半径为1的圆,一次最多能圈多小个点。 思路分析:(1):一开始想用随机算法(模拟退火)把它水过去得。可是。。。。“火候”一直把握不好,不是WA就是TLE。。。可能这题...

HDU--1077--Catching Fish--计算几何

Catching Fish Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

HDU 1077Catching Fish(简单计算几何)

Catching Fish Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...
  • opm777
  • opm777
  • 2013年10月14日 22:21
  • 860

hdu1077 catching fish

Problem Description Ignatius likes catching fish very much. He has a fishnet whose shape is a circl...

Catching Fish

Catching Fish Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) ...

POJ 2280 几何题 经典 枚举+极角排序+旋转扫描

枚举每个点做旋转点,按照极角排序,扫描一次,得出结果. #include #include #include #include #include #define PI 3.1415926...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:hdoj1077 Catching Fish(几何题,枚举遍历)
举报原因:
原因补充:

(最多只允许输入30个字)