結果
| 問題 | No.3672 Volume 3D |
| コンテスト | |
| ユーザー |
tnakao0123
|
| 提出日時 | 2026-09-06 14:30:29 |
| 言語 | C++17 (gcc 15.3.0 + boost 1.92.0 + ACL) |
| 結果 |
WA
不安定
|
| 実行時間 | - |
| コード長 | 1,410 bytes |
| 記録 | |
| コンパイル時間 | 241 ms |
| コンパイル使用メモリ | 70,864 KB |
| 実行使用メモリ | 9,908 KB |
| 最終ジャッジ日時 | 2026-09-06 14:30:43 |
| 合計ジャッジ時間 | 3,045 ms |
|
ジャッジサーバーID (参考情報) |
judge1_0 / judge2_0 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 9 WA * 11 |
ソースコード
/* -*- coding: utf-8 -*-
*
* 3672.cc: No.3672 Volume 3D - yukicoder
*/
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
/* constant */
const double PI = acos(-1.0);
/* typedef */
/* global variables */
/* subroutines */
double integral(double x0, double 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)
double rr = r * r, rrr = rr * r;
return PI * (rr * (r - x0) - (rrr - x0 * x0 * x0) / 3);
}
/* 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);
int dx = xb - xa, dy = yb - ya, dz = zb - za;
double d = sqrt(dx * dx + dy * dy + dz * dz);
if (d >= ra + rb) { puts("0"); continue; }
int dr = abs(rb - ra), minr = min(ra, rb);
if (d <= dr) {
printf("%.12lf\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
double la = (d * d + ra * ra - rb * rb) / (d * 2);
double lb = d - la;
double va = integral(la, ra);
double vb = integral(lb, rb);
printf("%.12lf\n", va + vb);
}
return 0;
}
tnakao0123