题解给的数学方法太难了。
还是看看正常人怎么解这题的吧:
下面一张图就解释了做法:
由于题目对精度要求比较低,只要1位小数。
我们完全可以枚举OA,OB,OC的夹角,然后算出每一种情况的面积,最终估算出期望。
#include <bits/stdc++.h> using namespace std; typedef long long ll; #define re register #define ls (o<<1) #define rs (o<<1|1) #define pb push_back const double PI= acos(-1.0); const int M = 500+7; double s[M],c[M]; int main() { int T; cin>>T; double a=0,v=2*PI/500; for(int i=0;i<500;i++,a+=v)s[i]=sin(a),c[i]=cos(a); while(T--) { double r1,r2,r3; scanf("%lf%lf%lf",&r1,&r2,&r3); double ans=0; //固定A点,假设OA指向x正半轴 //AB = (r2*cosa - r1,r2*sina) //BC = (r3*cosb - r2*cosa,r3*sinb - r2*sina) for(int i=0;i<500;i++)//枚举OA与OB夹角 for(int j=0;j<500;j++)//枚举OA与OC夹角 { ans+=0.5*abs((r2*c[i]-r1)*(r3*s[j]-r2*s[i])-r2*s[i]*(r3*c[j]-r2*c[i])); } printf("%.1f\n",ans/500/500); } return 0; }