• HDU-4720 Naive and Silly Muggles 圆的外心


      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720

      先两两点之间枚举,如果不能找的最小的圆,那么求外心即可。。

      1 //STATUS:C++_AC_0MS_292KB
      2 #include <functional>
      3 #include <algorithm>
      4 #include <iostream>
      5 //#include <ext/rope>
      6 #include <fstream>
      7 #include <sstream>
      8 #include <iomanip>
      9 #include <numeric>
     10 #include <cstring>
     11 #include <cassert>
     12 #include <cstdio>
     13 #include <string>
     14 #include <vector>
     15 #include <bitset>
     16 #include <queue>
     17 #include <stack>
     18 #include <cmath>
     19 #include <ctime>
     20 #include <list>
     21 #include <set>
     22 #include <map>
     23 using namespace std;
     24 //#pragma comment(linker,"/STACK:102400000,102400000")
     25 //using namespace __gnu_cxx;
     26 //define
     27 #define pii pair<int,int>
     28 #define mem(a,b) memset(a,b,sizeof(a))
     29 #define lson l,mid,rt<<1
     30 #define rson mid+1,r,rt<<1|1
     31 #define PI acos(-1.0)
     32 //typedef
     33 typedef __int64 LL;
     34 typedef unsigned __int64 ULL;
     35 //const
     36 const int N=25;
     37 const int INF=0x3f3f3f3f;
     38 const int MOD=1000000007,STA=8000010;
     39 const LL LNF=1LL<<60;
     40 const double EPS=1e-8;
     41 const double OO=1e60;
     42 const int dx[4]={-1,0,1,0};
     43 const int dy[4]={0,1,0,-1};
     44 const int day[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
     45 //Daily Use ...
     46 inline int sign(double x){return (x>EPS)-(x<-EPS);}
     47 template<class T> T gcd(T a,T b){return b?gcd(b,a%b):a;}
     48 template<class T> T lcm(T a,T b){return a/gcd(a,b)*b;}
     49 template<class T> inline T lcm(T a,T b,T d){return a/d*b;}
     50 template<class T> inline T Min(T a,T b){return a<b?a:b;}
     51 template<class T> inline T Max(T a,T b){return a>b?a:b;}
     52 template<class T> inline T Min(T a,T b,T c){return min(min(a, b),c);}
     53 template<class T> inline T Max(T a,T b,T c){return max(max(a, b),c);}
     54 template<class T> inline T Min(T a,T b,T c,T d){return min(min(a, b),min(c,d));}
     55 template<class T> inline T Max(T a,T b,T c,T d){return max(max(a, b),max(c,d));}
     56 //End
     57 
     58 int T;
     59 
     60 struct Point{
     61     double x,y;
     62 }p[5];
     63 
     64 double dist(Point a,Point b)
     65 {
     66     return sqrt( (a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y) );
     67 }
     68 
     69 double sqr(double x){ return x * x; }
     70 
     71 void Ci(Point p0 , Point p1 , Point p2 , Point &cp)
     72 {
     73     double a1=p1.x-p0.x,b1 = p1.y - p0.y,c1 = (sqr(a1) + sqr(b1)) / 2;
     74     double a2=p2.x-p0.x,b2 = p2.y - p0.y,c2 = (sqr(a2) + sqr(b2)) / 2;
     75     double d = a1 * b2 - a2 * b1;
     76     cp.x = p0.x + (c1 * b2 - c2 * b1) / d;
     77     cp.y = p0.y + (a1 * c2 - a2 * c1) / d;
     78 }
     79 
     80 int judge1(int& ok)
     81 {
     82     int i,j,k;
     83     double d,r,lowr;
     84     Point c,t;
     85     lowr=OO;
     86     for(i=0;i<3;i++){
     87         for(j=0;j<3;j++){
     88             if(i==j)continue;
     89             r=dist(p[i],p[j])/2;
     90             t.x=(p[i].x+p[j].x)/2;
     91             t.y=(p[i].y+p[j].y)/2;
     92             for(k=0;k==i || k==j;k++);
     93             if(dist(t,p[k])<=r){
     94                 lowr=r;
     95                 c.x=t.x,c.y=t.y;
     96             }
     97         }
     98     }
     99     if(lowr==OO)return 0;
    100     if(dist(p[3],c)<=lowr)ok=1;
    101     return 1;
    102 }
    103 
    104 int main(){
    105  //   freopen("in.txt","r",stdin);
    106     int i,j,ca=1,ok;
    107     double r,d;
    108     Point c;
    109     scanf("%d",&T);
    110     while(T--)
    111     {
    112         for(i=0;i<4;i++){
    113             scanf("%lf%lf",&p[i].x,&p[i].y);
    114         }
    115         ok=0;
    116         if(judge1(ok));
    117         else {
    118             Ci(p[0],p[1],p[2],c);
    119             r=(c.x-p[0].x)*(c.x-p[0].x)+(c.y-p[0].y)*(c.y-p[0].y);
    120             d=(c.x-p[3].x)*(c.x-p[3].x)+(c.y-p[3].y)*(c.y-p[3].y);
    121             if(d<=r)ok=1;
    122         }
    123 
    124         printf("Case #%d: %s
    ",ca++,ok?"Danger":"Safe");
    125     }
    126     return 0;
    127 }
  • 相关阅读:
    Castle Windsor 学习-----Installer的几种安装方式
    asp.net mvc源码分析-Route的GetRouteData
    查看iis对应w3wp.exe显示的进程ID号(转载)
    jvisualvm安装Visual GC插件
    Modelsimse10.4如何编译altera库文件以支持IP仿真
    sublime text3 配置使用
    Modelsim调用用do脚本自动化仿真
    Quartus16.0如何使用TCL脚本
    Java中使用Timer和TimerTask实现多线程
    框架导论
  • 原文地址:https://www.cnblogs.com/zhsl/p/3318273.html
Copyright © 2020-2023  润新知