球的体积并
https://ac.nowcoder.com/acm/contest/373/E
題解:
參考文章:https://blog.csdn.net/luyehao1/article/details/86583384
/* *@Author: STZG *@Language: C++ */ #include <bits/stdc++.h> #include<iostream> #include<algorithm> #include<cstdlib> #include<cstring> #include<cstdio> #include<string> #include<vector> #include<bitset> #include<queue> #include<deque> #include<stack> #include<cmath> #include<list> #include<map> #include<set> //#define DEBUG #define RI register int using namespace std; typedef long long ll; //typedef __int128 lll; const int N=100000+10; const int MOD=1e9+7; const double PI = acos(-1.0); const double EXP = 1E-8; const int INF = 0x3f3f3f3f; double t,n,m,k,q,x,y,z,r,x2,y2,z2,r2; double ans,cnt,flag,temp; int a[N]; char str; int main() { #ifdef DEBUGfreopen("input.in", "r", stdin);//freopen("output.out", "w", stdout); #endifscanf("%lf%lf%lf%lf%lf%lf%lf%lf",&x,&y,&z,&r,&x2,&y2,&z2,&r2);double d=sqrt((x-x2)*(x-x2)+(y-y2)*(y-y2)+(z-z2)*(z-z2));if(r>r2){swap(r,r2);swap(x,x2);swap(y,y2);swap(z,z2);}if (d >= r + r2) {ans=(4.0 / 3)*PI*(r*r*r+r2*r2*r2);}else if (d + r <= r2) {ans = (4.0 / 3)*PI*r2*r2*r2;}else {double co = (r2*r2 + d * d - r*r) / (2.0*d*r2);double h = r2*(1 - co);ans += (1.0 / 3)*PI*(3.0*r2 - h)*h*h;co = (r*r + d * d - r2*r2) / (2.0*d*r);h = r*(1 - co);ans += (1.0 / 3)*PI*(3.0*r - h)*h*h;ans=(4.0 / 3)*PI*(r*r*r+r2*r2*r2)-ans;}printf("%.7lf\n", ans);//cout << "Hello world!" << endl;return 0; }?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
- 上一篇: 最小相似度
- 下一篇: [NOI2001]食物链