题意:给出若干个点,求半径为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(计算几何相关推荐

  1. *HDU 2108 计算几何

    Shape of HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Tot ...

  2. hdu 3320 计算几何(三维图形几何变换)

    openGL Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Sub ...

  3. HDU 2202 计算几何

    最大三角形 Time Limit: 5000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  4. HDU - 1174(计算几何)

    问题描述: gameboy是一个CS高手,他最喜欢的就是扮演警察,手持M4爆土匪的头.也许这里有人没玩过CS,有必要介绍一下"爆头"这个术语:所谓爆头,就是子弹直接命中对方的头部, ...

  5. HDU - 1700(计算几何)

    问题描述: There is a cycle with its center on the origin.  Now give you a point on the cycle, you are to ...

  6. 汉诺塔实践python_汉诺塔的python 动画演示

    1.简介 古代有一座汉诺塔,塔内有3个座A.B.C,A座上有n个盘子,盘子大小不等,大的在下,小的在上,如图所示.有一个和尚想把这n个盘子从A座移到C座,但每次只能移动一个盘子,并且自移动过程中,3个 ...

  7. hdu 1174:爆头(计算几何,三维叉积求点到线的距离)

    爆头 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  8. 计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857

    计算几何(判断顺时针/逆时针) - Clockwise or Counterclockwise - HDU 6857 2020 Multi-University Training Contest 8 ...

  9. hdu 4717 The Moving Points(三分+计算几何)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4717 说明下为啥满足三分: 设y=f(x) (x>0)表示任意两个点的距离随时间x的增长,距离y ...

  10. hdu 5964:平行四边形 【计算几何】

    打重现赛时,一点思路也没有,然后又看到这题AC数那么少,就直接放弃了.今天重新看了看,借鉴了下别人的,发现此题应该算是一道可解题. 看上去,这题的ans是同时有两个点作为自变量的函数(然而n^2复杂度 ...

最新文章

  1. 看闯关东原来知道古代已经十六进制了
  2. Java内存溢出详解
  3. Java Review - 使用Timer时需要注意的事情
  4. GDCM:gdcm::Dict的测试程序
  5. VMware, Inc.VMware VUE考试中心代码
  6. 递归法:整数划分问题(怎么进行划分呢)
  7. CentOS6.5菜鸟之旅:中文编辑器忍痛放弃Sublime
  8. java读取redis数据_Java连接redis操作数据
  9. 提示编码有问题时,VS保存选项
  10. c语言递归调用程序,3个C语言实例带你掌握递归方法论
  11. 基于MATLAB的身份证号码的识别算法
  12. android旧版本运行器下载,有没有办法让新版安卓系统运行以前老安卓版本的软件?...
  13. python中cls和self的区别
  14. HEAD detached at ---
  15. 用ssm进行微信开发,实现微信登录验证功能
  16. 科学的工作方法—PDCA循环工作法
  17. ios input 无法自动聚焦拉起手机键盘
  18. 我把几个理论糅合了一下
  19. 【虹科讲座预告】企业如何防止基于USB的数据外泄
  20. 标号法(label-setting algorithm)求解带时间窗的最短路问题(ESPPRC)

热门文章

  1. 树莓派-11-3又1/2位数字万用表使用说明书
  2. Spring Boot-6-VO、PO
  3. 关于idea链接oracle数据库出现IO 错误: Got minus one from a read call, connect lapse 1 ms., Authen
  4. Latex 图像、表格标题(题注)加脚注
  5. 《印度合伙人》观影有感
  6. VUE移动端案例整合
  7. Thinkphp 模板/包含文件
  8. 史上最全股票指标图文详解
  9. crmeb java单商户
  10. COCO数据集合解析