牛客数据真是毒瘤Orz
#include <bits/stdc++.h>
typedef long double ld;
typedef long long ll;
using namespace std;
const ld pi = acos(-1.0);
const ll maxn = 1e6 * 2 + 1e5 + 5;
ld sum;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0),cout.tie(0);
ld a,b,c,d;
cin >> a >> b >> c >> d;
ld aa,bb,cc,dd;
cin >> aa >> bb >> cc >> dd;
//两个球心之间的距离
ld ari = sqrt((a - aa) * (a - aa) + (b - bb) * (b - bb) + (c - cc) * (c - cc));
//第一个球的体积
ld vola = (4.0 / 3.0) * pi * (d * d * d) ;
//第二个球的体积
ld volb = (4.0 / 3.0) * pi * (dd * dd * dd) ;
ld sum = vola + volb;
//判断相离,相切,相交
if(ari + min(d,dd) <= max(d,dd))
{
sum = max(vola,volb);
}
else if(ari >= (d + dd))
{
sum = vola + volb;
}
else
{
//求出球缺的高
ld l1 = ( ((d * d) - (dd * dd)) / ari + ari) / 2.0;
ld l2 = (ari - l1);
ld h1 = d - l1;
ld h2 = dd - l2;
//求出球缺的体积
ld volh1 = pi * h1 * h1 * (d - h1 / 3.0);
ld volh2 = pi * h2 * h2 * (dd - h2 / 3.0);
sum = sum - volh1 - volh2;
}
cout << fixed << setprecision(7) << sum << endl;
return 0;
}