最小覆盖圆的模板;

  1. #include<stdio.h>
  2. #include<string.h>
  3. #include<math.h>
  4. struct Point
  5. {
  6. double x;
  7. double y;
  8. } pt[];
  9. struct Traingle
  10. {
  11. struct Point p[];
  12. };
  13. struct Circle
  14. {
  15. struct Point center;
  16. double r;
  17. } ans;
  18. //计算两点距离
  19. double Dis(struct Point p, struct Point q)
  20. {
  21. double dx=p.x-q.x;
  22. double dy=p.y-q.y;
  23. return sqrt(dx*dx+dy*dy);
  24. }
  25. //计算三角形面积
  26. double Area(struct Traingle ct)
  27. {
  28. return
  29. fabs((ct.p[].x-ct.p[].x)*(ct.p[].y-ct.p[].y)-(ct.p[].x-ct.p[].x)*(ct.p[].y-ct.p[].y))/2.0;
  30. }
  31. //求三角形的外接圆,返回圆心和半径(存在结构体"圆"中)
  32. struct Circle CircumCircle(struct Traingle t)
  33. {
  34. struct Circle tmp;
  35. double a, b, c, c1, c2;
  36. double xA, yA, xB, yB, xC, yC;
  37. a = Dis(t.p[], t.p[]);
  38. b = Dis(t.p[], t.p[]);
  39. c = Dis(t.p[], t.p[]);
  40. //根据S = a * b * c / R / 4;求半径R
  41. tmp.r = (a*b*c)/(Area(t)*4.0);
  42. xA = t.p[].x;
  43. yA = t.p[].y;
  44. xB = t.p[].x;
  45. yB = t.p[].y;
  46. xC = t.p[].x;
  47. yC = t.p[].y;
  48. c1 = (xA*xA+yA*yA - xB*xB-yB*yB) / ;
  49. c2 = (xA*xA+yA*yA - xC*xC-yC*yC) / ;
  50. tmp.center.x = (c1*(yA - yC)-c2*(yA - yB)) / ((xA - xB)*(yA - yC)-(xA - xC)*(yA - yB));
  51. tmp.center.y = (c1*(xA - xC)-c2*(xA - xB)) / ((yA - yB)*(xA - xC)-(yA - yC)*(xA - xB));
  52. return tmp;
  53. }
  54. //确定最小包围圆
  55. struct Circle MinCircle(int num, struct Traingle ct)
  56. {
  57. struct Circle ret;
  58. if (num==) ret.r = 0.0;
  59. else if (num==)
  60. {
  61. ret.center = ct.p[];
  62. ret.r = 0.0;
  63. }
  64. else if (num==)
  65. {
  66. ret.center.x = (ct.p[].x+ct.p[].x)/2.0;
  67. ret.center.y = (ct.p[].y+ct.p[].y)/2.0;
  68. ret.r = Dis(ct.p[], ct.p[])/2.0;
  69. }
  70. else if(num==) ret = CircumCircle(ct);
  71. return ret;
  72. }
  73. //递归实现增量算法
  74. void Dfs(int x, int num, struct Traingle ct)
  75. {
  76. int i, j;
  77. struct Point tmp;
  78. ans = MinCircle(num, ct);
  79. if (num==) return;
  80. for (i=; i<=x; i++)
  81. if (Dis(pt[i], ans.center)>ans.r)
  82. {
  83. ct.p[num]=pt[i];
  84. Dfs(i-, num+, ct);
  85. tmp=pt[i];
  86. for (j=i; j>=; j--)
  87. pt[j]=pt[j-];
  88. pt[]=tmp;
  89. }
  90. }
  91. void Solve(int n)
  92. {
  93. struct Traingle ct;
  94. Dfs(n, , ct);
  95. }
  96. int main (void)
  97. {
  98. int n, i,t;
  99. int ca=;
  100. scanf("%d",&t);
  101. while (t--)
  102. {
  103. for (i=; i<=; i++)
  104. scanf("%lf %lf", &pt[i].x, &pt[i].y);
  105. Solve();
  106. double xx,yy;
  107. scanf("%lf%lf",&xx,&yy);
  108. printf("Case #%d: ",ca++);
  109. if((xx-ans.center.x)*(xx-ans.center.x)+(yy-ans.center.y)*(yy-ans.center.y)<=(ans.r)*(ans.r))
  110. puts("Danger");
  111. else puts("Safe");
  112. }
  113. return ;
  114. }

hdu 4720的更多相关文章

  1. HDU 4720 Naive and Silly Muggles 2013年四川省赛题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720 题目大意:给你四个点,用前三个点绘制一个最小的圆,而这三个点必须在圆上或者在圆内,判断最一个点如 ...

  2. HDU 4720 Naive and Silly Muggles 平面几何

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720 解题报告:给出一个三角形的三个顶点坐标,要求用一个最小的圆将这个三个点都包含在内,另外输入一个点 ...

  3. hdu 4720 计算几何简单题

    昨天用vim练了一道大水题,今天特地找了道稍难一点的题.不过也不是很难,简单的计算几何而已.练习用vim编码,用gdb调试,结果居然1A了,没调试...囧... 做法很简单,无非就是两种情况:①三个巫 ...

  4. HDU 4720 Naive and Silly Muggles (外切圆心)

    Naive and Silly Muggles Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Oth ...

  5. HDU 4720 Naive and Silly Muggles (简单计算几何)

    Naive and Silly Muggles Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/ ...

  6. 2013 ACM/ICPC Asia Regional Online —— Warmup2

    HDU 4716 A Computer Graphics Problem 水题.略 HDU 4717 The Moving Points 题目:给出n个点的起始位置以及速度矢量,问任意一个时刻使得最远 ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. Http协议三次握手过程

    TCP(Transmission Control Protocol) 传输控制协议 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 位码即tcp标志位,有6种标 ...

  2. Jsp中三种注释

    在Jsp中有三种注释: 一.HTML注释 1.输出注释<!--   -->客户端查看源码时是可以看见的. 二.Java注释 1. //单行注释 2. /*多行注释*/ 三.JSP页注释 1 ...

  3. web项目设计与开发——DBHelper2

    第二次学习的内容是根据DBHelper遍历出数据库中的所有数据. 具体内容为:   一.编写程序    1.创建工程——userMangager    2.在src目录下创建四个包,分别为DAO,DB ...

  4. javascript实现可编辑的下拉框

    曾经遇到过一个需求的情况是这样的,我们提供给用户的输入框的可选择项只能满足用户的大部分情况的选择,但是有时候会遇到一些用户想要输入的数据是下拉项中所没有的,而用户不希望改变下拉项为输入框模式,需要说如 ...

  5. Java对象与Json之间的转换

    使用Jackson的ObjectMapper对象的readValue和writeValueAsString方法可以进行转换. 对于简单基本类型或String类型的对象,使用上述方法可以满足. 但是如果 ...

  6. LSJ_NHibernate第四章 MVC

    前言: MVC现在已经成为web开发的一个主流趋势了,还没用过的小伙伴,你们已经落伍了,这里我推荐一篇学习博客 玩转Asp.net MVC 的八个扩展点  代码完全开源,下载地址:https://gi ...

  7. BS开发平台,一小时搞定功能强大的统计分析页面

    BS开发平台,一小时搞定功能强大的统计分析页面,拥有强大的功能和详细的权限控制. 1.组织数据,分析需求(实际耗时大约20分钟)  2.建立需要的业务数据表(大致10分钟)3. 运行代码工具,生产需要 ...

  8. /Users/XX/Library/Developer/Xcode/DerivedData/XX.app/xxsdk.bundle Directory not empty

    今天在升级xcode后真机调试偶然发现这个问题,查了一些资料发现还是不能完全解决 解决方法:参考的(http://blog.csdn.net/alincexiaohao/article/details ...

  9. 迭代map方法

    Map<String, String> map=new HashMap<String,String>();map.put("1", "one&qu ...

  10. cinder

    source /root/openrc 显示云硬盘: cinder list 这只是查看了admin租户下的,要查看所有租户下的云硬盘: cinder list --all-tenant 后台手动强行 ...