HDU 4173(计算几何
题意:给出若干个点,求半径为2.5的圆最多包含多少个点。
思路:查到的一篇题解是枚举三个点的外接圆,这个对于我等计算几何小白来说还是不太好做。。。。后来听大神讲的,因为半径已知,所以只需要枚举经过两点的半径为2.5的所有圆就好(两个点对应两个圆),这样不仅好写,而且复杂度也降低了。
(感觉不用一大串模板都不好意思叫计算几何了。。。。。)
#include<iostream> #include<map> #include<algorithm> #include<cstdio> #include<cstring> #include<cstdlib> #include<vector> #include<queue> #include<stack> #include<functional> #include<set> #include<cmath> #define pb push_back #define fs first #define se second #define sq(x) (x)*(x) #define eps 0.0000000001 using namespace std; typedef long long ll; typedef pair<ll,ll> P; const int maxv=250; double x[maxv],y[maxv]; int n; double cycx[maxv*maxv+30]; double cycy[maxv*maxv+30]; int cych=0; double dis(double x1,double y1,double x2,double y2){return sqrt(sq(x1-x2)+sq(y1-y2)); } void getcenter(double x1,double y1,double x2,double y2){double mx=(x1+x2)/2,my=(y1+y2)/2;double k=(y1-y2)/(x1-x2);k=-1/k;if(x1-x2==0) k=0;double dis1=dis(x1,y1,x2,y2);dis1/=2;double dis2=sqrt(sq(2.5)-sq(dis1));double dx1=1./sqrt(1+k*k)*dis2,dy1=k/sqrt(1+k*k)*dis2;double dx2=-dx1,dy2=-dy1;cycx[cych++]=mx+dx1,cycy[cych-1]=my+dy1;cycx[cych++]=mx+dx2,cycy[cych-1]=my+dy2; } int main(){freopen("/home/files/CppFiles/in","r",stdin); /* std::ios::sync_with_stdio(false);std::cin.tie(0);*/while(cin>>n){for(int i=0;i<n;i++) scanf("%lf%lf",x+i,y+i);cych=0;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+eps);getcenter(x[i],y[i],x[j],y[j]);}}int ans=1;for(int i=0;i<cych;i++){int cont=0;for(int j=0;j<n;j++){if(dis(x[j],y[j],cycx[i],cycy[i])<2.5+eps){cont++;}}ans=max(ans,cont);}cout<<ans<<endl;}return 0; }
View Code
转载于:https://www.cnblogs.com/Cw-trip/p/4676880.html
HDU 4173(计算几何相关推荐
- *HDU 2108 计算几何
Shape of HDU Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tot ...
- hdu 3320 计算几何(三维图形几何变换)
openGL Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Sub ...
- HDU 2202 计算几何
最大三角形 Time Limit: 5000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Subm ...
- HDU - 1174(计算几何)
问题描述: gameboy是一个CS高手,他最喜欢的就是扮演警察,手持M4爆土匪的头.也许这里有人没玩过CS,有必要介绍一下"爆头"这个术语:所谓爆头,就是子弹直接命中对方的头部, ...
- HDU - 1700(计算几何)
问题描述: There is a cycle with its center on the origin. Now give you a point on the cycle, you are to ...
- 汉诺塔实践python_汉诺塔的python 动画演示
1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个 ...
- hdu 1174:爆头(计算几何,三维叉积求点到线的距离)
爆头 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...
- 计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857
计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857 2020 Multi-University Training Contest 8 ...
- hdu 4717 The Moving Points(三分+计算几何)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 说明下为啥满足三分: 设y=f(x) (x>0)表示任意两个点的距离随时间x的增长,距离y ...
- hdu 5964:平行四边形 【计算几何】
打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...
最新文章
- 看闯关东原来知道古代已经十六进制了
- Java内存溢出详解
- Java Review - 使用Timer时需要注意的事情
- GDCM:gdcm::Dict的测试程序
- VMware, Inc.VMware VUE考试中心代码
- 递归法:整数划分问题(怎么进行划分呢)
- CentOS6.5菜鸟之旅:中文编辑器忍痛放弃Sublime
- java读取redis数据_Java连接redis操作数据
- 提示编码有问题时,VS保存选项
- c语言递归调用程序,3个C语言实例带你掌握递归方法论
- 基于MATLAB的身份证号码的识别算法
- android旧版本运行器下载,有没有办法让新版安卓系统运行以前老安卓版本的软件?...
- python中cls和self的区别
- HEAD detached at ---
- 用ssm进行微信开发,实现微信登录验证功能
- 科学的工作方法—PDCA循环工作法
- ios input 无法自动聚焦拉起手机键盘
- 我把几个理论糅合了一下
- 【虹科讲座预告】企业如何防止基于USB的数据外泄
- 标号法(label-setting algorithm)求解带时间窗的最短路问题(ESPPRC)