!HDU 4173 到点的距离不超过2.5,找最多能被满足的点的个数-简单几何
来源:互联网 发布:我的淘宝是什么意思 编辑:程序博客网 时间:2024/06/05 21:55
题意:有n个人参加派对,但是条件是派对地点到他家的距离不能超过2.5,现在要你找一个最佳的派对地点让最多人参加派对。
分析:
题目看起来挺难的,怎么求范围然后包含点?其实一个圆心+半径不就代表一个圆了吗。
枚举求两个点的半径为2.5的圆的圆心,保存起来,然后用这些圆心求所有点到圆心的距离,记录距离小于等于2.5的点的个数,更新结果。200*199/2*200不会超时,计算就是高中基本的数学知识。仔细一些耐心一点就是了。注意计算得到的浮点数判定要用eps。
代码:
#include<iostream>#include<cmath>#include<algorithm>#define eps 1e-8using namespace std;int n,ans,cnt;double x[300],y[300];struct node{double x,y;}center[40000];double dis(double a,double b,double c,double d){return sqrt((a-c)*(a-c)+(b-d)*(b-d));}void getcenter(int i,int j){double midx=(x[i]+x[j])/2.0;double midy=(y[i]+y[j])/2.0;double k,b;if(x[i]-x[j]==0){double x1=sqrt(6.25-(midy-y[i])*(midy-y[i]))+x[i];double x2=x[i]-sqrt(6.25-(midy-y[i])*(midy-y[i]));center[cnt].x=x1,center[cnt++].y=midy;center[cnt].x=x2,center[cnt++].y=midy;}else if(y[i]-y[j]==0){double y1=sqrt(6.25-(midx-x[i])*(midx-x[i]))+y[i];double y2=y[i]-sqrt(6.25-(midx-x[i])*(midx-x[i]));center[cnt].x=midx,center[cnt++].y=y1;center[cnt].x=midx,center[cnt++].y=y2;}else{double k1=(y[i]-y[j])/(x[i]-x[j]);k=-1.0/k1; b=midy-k*midx;double tmp1=(x[i]+k*y[i]-k*b);double tmp2=(x[i]+k*y[i]-k*b)*(x[i]+k*y[i]-k*b)-(k*k+1)*(x[i]*x[i]+y[i]*y[i]+b*b-2*b*y[i]-6.25);double x1=(tmp1+sqrt(tmp2))/(k*k+1);double x2=(tmp1-sqrt(tmp2))/(k*k+1);double y1=k*x1+b;double y2=k*x2+b;center[cnt].x=x1,center[cnt++].y=y1;center[cnt].x=x2,center[cnt++].y=y2;}}int main(){ while(cin>>n){ cnt=0,ans=1; for(int i=0;i<n;i++) cin>>x[i]>>y[i]; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(dis(x[i],y[i],x[j],y[j])<5.0+eps) getcenter(i,j); } } for(int i=0;i<cnt;i++){ int tot=0; for(int j=0;j<n;j++){ if(dis(x[j],y[j],center[i].x,center[i].y)<2.5+eps) tot++; } ans=max(ans,tot); } cout<<ans<<endl; }}
0 0
- !HDU 4173 到点的距离不超过2.5,找最多能被满足的点的个数-简单几何
- 找公共次数最多的点
- 1.10 找经过点最多的直线
- 直线上最多的点的个数
- 端到端的点到点区别
- 定长线段最多覆盖点的个数
- 定长线段最多覆盖点的个数
- 【codeforces 680 D】【数学+贪心+DFS】【求一个不超过 m 的最大体积 X, 每次选一个最大的 x 使得 x3 不超过当前剩余体积。问在能选最多个数的情况下,X 最大是多少】
- 求绳子最多能覆盖的点
- C++实现三维空间中点到点、点到直线、点到平面的距离计算
- //Dijkstra算法,到点1的最小距离
- 计算几何 点到线段的距离 点在简单多边形内 点到凸多边形的距离
- CSU1503-点到圆弧的距离-几何
- J2me的实现点到点的链接
- hdu 1007 Quoit Design 找最近的两个点的距离
- 点到点企业间的应用集成
- 点到点之间的建立隧道方法
- 端到端与点到点的区别
- IOS 获取键盘的高度
- KMP算法(转)
- UFT 12 – Top 5 New Features you are going to Love
- 《一起学》系列11:Redis入门
- IDT与中断
- !HDU 4173 到点的距离不超过2.5,找最多能被满足的点的个数-简单几何
- ural1960Palindromes and Super Abilities(回文树)
- Android Camera 使用小结
- 求多边形的质心hdu1115
- 本文大部分参考自 http://blog.csdn.net/mayingcai1987/article/details/6200909 ,对原文中的讲解FLAG_NEW_TASK地方加了一些自己的观点
- 封装 字符串
- 欢迎使用CSDN-markdown编辑器
- hd1372 Knight Moves
- LMA与VMA总结