codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include<bits/stdc++.h> using namespace std; int main() { int t; cin>>t; for(int cs=1; cs<=t; cs++) { double s,r1,r2,r3; cin>>s>>r1>>r2>>r3; double tarea=(sqrt(3)*s*s)/4.0; double sec1=(60.0/360.0)*acos(-1)*r1*r1; double sec2=(60.0/360.0)*acos(-1)*r2*r2; double sec3=(60.0/360.0)*acos(-1)*r3*r3; double height=(sqrt(3.0)*s)/2.0; // if(r1+r2<=s && r2+r3<=s && r3+r1<=s) // { // cout<<"Case #"<<cs<<": "<<fixed<<setprecision(10)<<tarea-(sec1+sec2+sec3)<<endl; // continue; // } // else if(r1>=s || r2>=s || r3>=s) // { // cout<<"Case #"<<cs<<": "<<fixed<<setprecision(10)<<0.0<<endl; // continue; // } bool flag=false; double bad=sec1+sec2+sec3; // cout<<"initial bad = "<<bad<<endl; if(!(r1+r2<s)) { double p=(r1+r2+s)/2.0; double area=p*(p-r1)*(p-r2)*(p-s); area=sqrt(area); double H=(2.0*area)/s; if(H+r3>=height) flag=true; // cout<<"------"<<area<<" "<<H<<endl; //calculating for sec1 double side=sqrt(r1*r1-H*H); double narea=0.5*H*side; double rad=acos(H/r1); double deg=(180*rad)/acos(-1); double kun=60-(180.0-(90+deg)); narea=narea+(kun/360.0)*acos(-1)*r1*r1; double cut=sec1-narea; //cout<<sec1<<"---"<<narea<<"==="<<cut<<" "<<side<<endl; //calculating for sec2 side=sqrt(r2*r2-H*H); narea=0.5*H*side; rad=acos(H/r2); deg=(180*rad)/acos(-1); kun=60-(180.0-(90+deg)); narea=narea+(kun/360.0)*acos(-1)*r2*r2; cut=cut+(sec2-narea); // cout<<cut<<" "<<side<<endl; bad-=cut; } // cout<<"after r1--r2, bad = "<<bad<<endl; if(!(r3+r2<s)) { double p=(r3+r2+s)/2.0; double area=p*(p-r3)*(p-r2)*(p-s); area=sqrt(area); double H=(2.0*area)/s; if(H+r1>=height) flag=true; //cout<<"------"<<area<<" "<<H<<endl; // calculating for sec1 double side=sqrt(r3*r3-H*H); double narea=0.5*H*side; double rad=acos(H/r3); double deg=(180*rad)/acos(-1); double kun=60-(180.0-(90+deg)); narea=narea+(kun/360.0)*acos(-1)*r3*r3; double cut=sec3-narea; //cout<<sec1<<"---"<<narea<<"==="<<cut<<" "<<side<<endl; // calculating for sec2 side=sqrt(r2*r2-H*H); narea=0.5*H*side; rad=acos(H/r2); deg=(180*rad)/acos(-1); kun=60-(180.0-(90+deg)); narea=narea+(kun/360.0)*acos(-1)*r2*r2; cut=cut+(sec2-narea); //cout<<cut<<" "<<side<<endl; bad-=cut; } //cout<<"after r2--r3, bad = "<<bad<<endl; if(!(r1+r3<s)) { double p=(r1+r3+s)/2.0; double area=p*(p-r1)*(p-r3)*(p-s); area=sqrt(area); double H=(2.0*area)/s; if(H+r2>=height) flag=true; // cout<<"------"<<area<<" "<<H<<endl; // calculating for sec1 double side=sqrt(r1*r1-H*H); double narea=0.5*H*side; double rad=acos(H/r1); double deg=(180*rad)/acos(-1); double kun=60-(180.0-(90+deg)); narea=narea+(kun/360.0)*acos(-1)*r1*r1; double cut=sec1-narea; //cout<<sec1<<"---"<<narea<<"==="<<cut<<" "<<side<<endl; // calculating for sec2 side=sqrt(r3*r3-H*H); narea=0.5*H*side; rad=acos(H/r3); deg=(180*rad)/acos(-1); kun=60-(180.0-(90+deg)); narea=narea+(kun/360.0)*acos(-1)*r3*r3; cut=cut+(sec3-narea); //cout<<cut<<" "<<side<<endl; bad-=cut; } //cout<<"after r3--r1, bad = "<<bad<<endl; //cout<<tarea<<" "<<bad<<endl; double ans=tarea-bad; if(flag==true) ans=0; cout<<"Case #"<<cs<<": "<<fixed<<setprecision(6)<<max(0.0,ans)<<endl; } }
Private
[
?
]
Run code
Submit