結果
| 問題 | No.3672 Volume 3D |
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 2026-09-06 14:58:10 |
| 言語 | C++17 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
AC
不安定
|
| 実行時間 | 91 ms / 2,000 ms |
| + 493µs | |
| コード長 | 1,600 bytes |
| 記録 | |
| コンパイル時間 | 391 ms |
| コンパイル使用メモリ | 69,696 KB |
| 実行使用メモリ | 6,272 KB |
| 最終ジャッジ日時 | 2026-09-06 14:58:21 |
| 合計ジャッジ時間 | 4,132 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 20 |
ソースコード
/* -*- coding: utf-8 -*-
*
* 3672.cc: No.3672 Volume 3D - yukicoder
*/
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
/* constant */
const long double PI = acosl(-1.0);
/* typedef */
using ll = long long;
using ld = long double;
/* global variables */
/* subroutines */
ld integral(ld x0, ld r) {
// int_{x=x0..r} PI*(r^2-x^2)*dx
// = PI * int_{x=x0..r} (r^2-x^2)dx
// = PI * (r^2*(r-x0)-(r^3-x0^3)/3)
//ld rr = r * r, rrr = rr * r;
//ld v = PI * (rr * (r - x0) - (rrr - x0 * x0 * x0) / 3);
//printf(" integral(%Lf,%Lf)=%Lf\n", x0, r, v);
// PI*h^2/3(3r-h)
ld h = r - x0;
ld v = PI * h * h / 3 * (r * 3 - h);
return v;
}
/* main */
int main() {
int tn;
scanf("%d", &tn);
while (tn--) {
int xa, ya, za, ra;
scanf("%d%d%d%d", &xa, &ya, &za, &ra);
int xb, yb, zb, rb;
scanf("%d%d%d%d", &xb, &yb, &zb, &rb);
ll dx = xb - xa, dy = yb - ya, dz = zb - za;
ll dd = dx * dx + dy * dy + dz * dz;
ld d = sqrtl(dd);
if (d >= ra + rb) { puts("0"); continue; }
int dr = abs(rb - ra), minr = min(ra, rb);
if (dd <= (ll)dr * dr) {
printf("%.15Lf\n", PI * 4 / 3 * minr * minr * minr);
continue;
}
// ra^2-la^2=rb^2-lb^2=d^2, la+lb=d -> lb=d-la
// -> (ra^2-la^2)-(rb^2-(d-la)^2)=0
// -> ra^2-rb^2-la^2+d^2-2d*la+la^2=0
// -> (ra^2-rb^2)+d^2-2d*la=0
// -> la=(d^2+ra^2-rb^2)/2d
ld la = (dd + (ll)ra * ra - (ll)rb * rb) / (d * 2);
ld lb = d - la;
ld va = integral(la, ra);
ld vb = integral(lb, rb);
printf("%.15Lf\n", va + vb);
}
return 0;
}
tnakao0123