• C


     1 #include <cstdio>
     2 #include <cstdlib>
     3 #include <cmath>
     4 
     5 const double pi = acos(-1);
     6 struct point{
     7     double x,y;
     8 }L,R,O;
     9 double r;
    10 
    11 double dis(const struct point &a,const struct point &b){
    12     return sqrt( (a.x - b.x)*(a.x - b.x) + (a.y-b.y)*(a.y-b.y) );
    13 }
    14 double D_dis(const struct point &a,const struct point &b){
    15     return (a.x - b.x)*(a.x - b.x) + (a.y-b.y)*(a.y-b.y) ;
    16 }
    17 double getArea(const point &x, const point &y, const point & z){
    18     double a = dis(x,y);
    19     double b = dis(y,z);
    20     double c = dis(z,x);
    21     double p = (a+b+c)/2;
    22     return sqrt(p*(p-a)*(p-b)*(p-c)) * 2;
    23 }
    24 int main(){
    25  //   freopen("1.in","r",stdin);
    26  //   freopen("1.out","w",stdout);
    27  //freopen("1.txt","w",stdout);
    28     int CASE;
    29     scanf("%d",&CASE);
    30     while(CASE--){
    31         scanf("%lf %lf %lf",&O.x,&O.y,&r);
    32         scanf("%lf %lf",&L.x,&L.y);
    33         scanf("%lf %lf",&R.x,&R.y);
    34         if( dis(O,L) < r && dis(O,R) < r ){
    35             printf("%.3lf ",dis(L,R));
    36         }else if( dis(O,L) < r || dis(O,R) < r ){
    37             printf("Impossible! ");
    38         }else{
    39             if ( getArea(L,R,O) / dis(L,R) < r ){
    40                 if (D_dis(L,O)+D_dis(L,R)<D_dis(R,O)||D_dis(R,O)+D_dis(L,R)<D_dis(L,O))  {
    41                     printf("%.3lf ",dis(L,R));
    42 
    43                 }
    44                 else {
    45                 double ans = sqrt(D_dis(L,O) - r*r) + sqrt(D_dis(R,O) - r*r);
    46                 double rads = acos( (D_dis(L,O) + D_dis(R,O) - D_dis(L,R) ) / (2*dis(L,O)*dis(R,O) ) );
    47                 //printf("rads = %lf ",rads);
    48                 double left_rads = rads - acos(r / dis(L,O)) - acos(r / dis(R,O) );
    49                 ans += left_rads * r;
    50                 printf("%.3lf ",ans);
    51                 }
    52             }else{
    53                 printf("%.3lf ",dis(L,R));
    54             }
    55         }
    56     }
    57     return 0;
    58 }
  • 相关阅读:
    9.对话框
    8.布局管理器
    7.对象模型
    6.添加动作
    5.Qt模块简介
    4.自定义信号槽
    3.信号槽
    2.Helloworld
    1.Qt简介
    Problem E: 成绩排序
  • 原文地址:https://www.cnblogs.com/acvc/p/4303962.html
Copyright © 2020-2023  润新知