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