SRM出たばかりの時の問題が2つの円錐に関する問題だったな。
https://yukicoder.me/problems/no/1319
問題
2つの合同な円錐がある。
それぞれ底面の半径はRで高さはHである。
両者は底面が同じ平面上にあり、底面の中心の距離はDである。
両者の共通部分の体積を求めよ。
解法
高さ方向に向け共通部分の面積を数値積分していこう。
共通部分は円弧を2つ合わせた形なので、三角関数など使えば数値的に求めることができる。
double R,H,D; void solve() { int i,j,k,l,r,x,y; string s; double pi=atan(1)*4; cin>>R>>H>>D; double step=H/10000000; double ret=0; D/=2; for(double y=step/2;y<=H;y+=step) { double CR=R*y/H; if(CR<D) continue; double theta=acos(D/CR); double arc=CR*CR*theta; double area=CR*sin(theta)*D; //cout<<arc-area<<endl; ret+=arc-area; } ret*=2*step; _P("%.12lf\n",ret); }
まとめ
大学入試みたいだな。