zoukankan      html  css  js  c++  java
  • zstu-4243 牛吃草

    贴一发两圆相交面积模板

     1 #include<bits/stdc++.h>
     2 #define pi acos(-1.0)
     3 using namespace std;
     4 const double eps=1e-6;
     5 double _abs(double x)
     6 {
     7     if(x<0) return -x;
     8     else return x;
     9 }
    10 struct point
    11 {
    12     point(double _x=0,double _y=0){x=_x; y=_y;}
    13     double x,y;
    14 }p1,p2;
    15 double R;
    16 double AREA(point a, double r1, point b, double r2)
    17 {
    18     double d=sqrt((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
    19     if(d>=r1+r2) return 0;
    20     if(r1>r2)
    21     {
    22         double tmp=r1;
    23         r1=r2;
    24         r2=tmp;
    25     }
    26     if(r2-r1>=d)
    27         return pi*r1*r1;
    28     double ang1=acos((r1*r1+d*d-r2*r2)/(2*r1*d));
    29     double ang2=acos((r2*r2+d*d-r1*r1)/(2*r2*d));
    30     return ang1*r1*r1+ang2*r2*r2-r1*d*sin(ang1);
    31 }
    32 int main()
    33 {
    34     int T; scanf("%d",&T);
    35     while(T--)
    36     {
    37         scanf("%lf%lf%lf%lf%lf",&p1.x,&p1.y,&p2.x,&p2.y,&R);
    38         double l=0,r=1000000,area=pi*R*R/2;
    39         while(_abs(l-r)>eps)
    40         {
    41             double mid=(l+r)/2;
    42             if(AREA(p1,R,p2,mid)>=area) r=mid;
    43             else l=mid;
    44         }
    45         printf("%.4f
    ",l);
    46     }
    47     return 0;
    48 }
    View Code
  • 相关阅读:
    HDU 4508
    HDU 4503
    HDU 4532
    HDU 4544
    HDU 3167 KMP
    HDU 4542
    HDU 4528
    【70】自然语言处理与词嵌入
    【69】循环神经网络
    【68】一维和三维卷积
  • 原文地址:https://www.cnblogs.com/CJLHY/p/7873414.html
Copyright © 2011-2022 走看看