hdu 5120 - Intersection

Posted by 111qqz on Thursday, February 19, 2015

TOC

题意:求两个相等的圆环的相交的面积….
简单计算几何+容斥原理?
扇形面积公式记错调了半天2333333333
     这题不难…倒是从学长那里收获了几点关于代码规范的问题… 
听说了学长在北京区域赛时把PI定义错了一位结果一直WA的教训…. 以后还是写acos(-1)吧
局部变量和全局变量因为【想怎么其变量名想得整个人都不好了】就起成了一样的…被学长给了差评。
哦,对!还有一个就是发现了cmath库里有一个奇葩的函数名叫y1.。。。。。。。
——————————————————————————————————————————————
竟然CE了  提示 error:pow(int,int) is ambiguous
看来我对语言的掌握程度还是不行呀…..

“就是一个函数声明为pow(double, double)你必须传两个double参数进去。但你传int也可以,int会转型会double,但c++有重载。声明了两个函数pow(double, double),pow(long long, double),你传两个int进去编译器不知道把int转为double还是转为long long”
“解决办法是把int转型成double (xxx) 或者long long (xxx)” 也可以 简单粗暴的xxx.0

(int,int)->(double,int)?(double,double)

** **

图片

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

    int t,tt;
    int rr,RR,x11,x22,y11,y22;
    double ans;
    const double PI=acos(-1);
    const double C=10e-6;
    double area(int x1,int y1,int x2,int y2,int R,int r);
int main()
{
    cin>>t;
    tt=t;
    while (t--)
    {
        cin>>rr>>RR;
        cin>>x11>>y11>>x22>>y22;
        ans=area(x11,y11,x22,y22,RR,RR)-2*area(x11,y11,x22,y22,RR,rr)+
            area(x11,y11,x22,y22,rr,rr);
            cout<<"Case #"<<tt-t<<": "
            <<fixed<<setprecision(6)<<ans<<endl;
    }
    return 0;
}
double area(int x1,int y1,int x2,int y2,int R,int r)
{
     double d;
     double A,a;
     double st;
      d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
     if (d>=r+R)
        return 0;
     if (R-r>=d)
      return r*r*PI;
      A=acos((R*R+d*d-r*r)/(2.0*d*R));
      a=acos((r*r+d*d-R*R)/(2.0*d*r));
      st=R*d*sin(A);
      A=A*2;
      a=a*2;
      return  (A*R*R+a*r*r)/2.0-st;
}

「真诚赞赏,手留余香」

111qqz的小窝

真诚赞赏,手留余香

使用微信扫描二维码完成支付