hdu 5120 - Intersection
题意:求两个相等的圆环的相交的面积.... 简单计算几何+容斥原理? 扇形面积公式记错调了半天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)
1
2
3 #include <iostream>
4 #include <cmath>
5 #include <iomanip>
6
7 using namespace std;
8
9 int t,tt;
10 int rr,RR,x11,x22,y11,y22;
11 double ans;
12 const double PI=acos(-1);
13 const double C=10e-6;
14 double area(int x1,int y1,int x2,int y2,int R,int r);
15 int main()
16 {
17 cin>>t;
18 tt=t;
19 while (t--)
20 {
21 cin>>rr>>RR;
22 cin>>x11>>y11>>x22>>y22;
23 ans=area(x11,y11,x22,y22,RR,RR)-2*area(x11,y11,x22,y22,RR,rr)+
24 area(x11,y11,x22,y22,rr,rr);
25 cout<<"Case #"<<tt-t<<": "
26 <<fixed<<setprecision(6)<<ans<<endl;
27 }
28 return 0;
29 }
30 double area(int x1,int y1,int x2,int y2,int R,int r)
31 {
32 double d;
33 double A,a;
34 double st;
35 d=sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
36 if (d>=r+R)
37 return 0;
38 if (R-r>=d)
39 return r*r*PI;
40 A=acos((R*R+d*d-r*r)/(2.0*d*R));
41 a=acos((r*r+d*d-R*R)/(2.0*d*r));
42 st=R*d*sin(A);
43 A=A*2;
44 a=a*2;
45 return (A*R*R+a*r*r)/2.0-st;
46 }