码迷,mamicode.com
首页 > 其他好文 > 详细

hdu4720Naive and Silly Muggles

时间:2014-07-06 16:38:31      阅读:231      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   art   

链接

一直理解的最小覆盖圆就是外接圆。。原来还要分钝角和锐角。。。

钝角的话就为最长边的中点,对于这题分别枚举一下外接圆以及中点的圆,判一下是不是在园外。

bubuko.com,布布扣
  1 #include <iostream>
  2 #include<cstdio>
  3 #include<cstring>
  4 #include<algorithm>
  5 #include<stdlib.h>
  6 #include<vector>
  7 #include<cmath>
  8 #include<queue>
  9 #include<set>
 10 using namespace std;
 11 #define N 100000
 12 #define LL long long
 13 #define INF 0xfffffff
 14 const double eps = 1e-8;
 15 const double pi = acos(-1.0);
 16 const double inf = ~0u>>2;
 17 struct Point
 18 {
 19     double x,y;
 20     Point (double x=0,double y =0):x(x),y(y){}
 21 }p[4];
 22 struct Circle
 23 {
 24     Point center;
 25     double r;
 26 };
 27 typedef Point pointt;
 28 pointt operator - (Point a,Point b)
 29 {
 30     return Point(a.x-b.x,a.y-b.y);
 31 }
 32 int dcmp(double x)
 33 {
 34     if(fabs(x)<eps) return 0;
 35     return x<0?-1:1;
 36 }
 37 double dis(Point a)
 38 {
 39     return a.x*a.x+a.y*a.y;
 40 }
 41 double cross(Point a,Point b)
 42 {
 43     return a.x*b.y-a.y*b.x;
 44 }
 45 double area()
 46 {
 47     return fabs(cross(p[1]-p[2],p[2]-p[3]))/2;
 48 }
 49 struct Circle Circumcircle()
 50 {
 51     Circle tmp;
 52     double a,b,c,c1,c2;
 53     double xa,ya,xb,yb,xc,yc;
 54     a = sqrt(dis(p[3]-p[1]));
 55     b = sqrt(dis(p[1]-p[2]));
 56     c = sqrt(dis(p[2]-p[3]));
 57     //¸ù¾Ýs = a*b*c/R/4£¬Çó°ë¾¶
 58     tmp.r = (a*b*c)/(area()*4.0);
 59     xa = p[3].x;
 60     ya = p[3].y;
 61     xb = p[1].x;
 62     yb = p[1].y;
 63     xc = p[2].x;
 64     yc = p[2].y;
 65     c1 = (dis(p[3])-dis(p[1]))/2;
 66     c2 = (dis(p[3])-dis(p[2]))/2;
 67     tmp.center.x = (c1*(ya-yc)-c2*(ya-yb))/((xa-xb)*(ya-yc)-(xa-xc)*(ya-yb));
 68     tmp.center.y = (c1*(xa-xc)-c2*(xa-xb))/((ya-yb)*(xa-xc)-(ya-yc)*(xa-xb));
 69     return tmp;
 70 }
 71 int main()
 72 {
 73     int t,i;
 74     cin>>t;
 75     int kk = 0;
 76     while(t--)
 77     {
 78         for(i = 1 ;i <= 3 ; i++)
 79         scanf("%lf%lf",&p[i].x,&p[i].y);
 80         Circle cc = Circumcircle();
 81         Point pp;
 82         scanf("%lf%lf",&pp.x,&pp.y);
 83         double r = cc.r;
 84         r*=r;
 85         printf("Case #%d: ",++kk);
 86         if(dis(pp-cc.center)>r)
 87         {
 88             puts("Safe");
 89             continue;
 90         }
 91         r = dis(p[1]-p[2])/4;
 92         cc.center.x = (p[1].x+p[2].x)/2;
 93         cc.center.y = (p[1].y+p[2].y)/2;
 94         if(dcmp(dis(p[3]-cc.center)-r)<=0&&dcmp(dis(pp-cc.center)-r)>0)
 95         {
 96             puts("Safe");
 97             continue;
 98         }
 99         r = dis(p[1]-p[3])/4;
100         cc.center.x = (p[1].x+p[3].x)/2;
101         cc.center.y = (p[1].y+p[3].y)/2;
102         if(dcmp(dis(p[2]-cc.center)-r)<=0&&dcmp(dis(pp-cc.center)-r)>0)
103         {
104             puts("Safe");
105             continue;
106         }
107         r = dis(p[3]-p[2])/4;
108         cc.center.x = (p[3].x+p[2].x)/2;
109         cc.center.y = (p[3].y+p[2].y)/2;
110         if(dcmp(dis(p[1]-cc.center)-r)<=0&&dcmp(dis(pp-cc.center)-r)>0)
111         {
112             puts("Safe");
113             continue;
114         }
115         puts("Danger");
116     }
117     return 0;
118 }
View Code

 

hdu4720Naive and Silly Muggles,布布扣,bubuko.com

hdu4720Naive and Silly Muggles

标签:style   blog   http   color   os   art   

原文地址:http://www.cnblogs.com/shangyu/p/3825312.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!