P13456 [GCJ 2008 Qualification] Fly Swatter
题目描述
你用网球拍打中一只苍蝇的概率是多少?
首先,忽略球拍的手柄。假设球拍是一个完美的圆环,外半径为 $R$,厚度为 $t$(因此圆环的内半径为 $R - t$)。
圆环上覆盖有水平和垂直的球线。每根球线都是半径为 $r$ 的圆柱体。每根球线都是圆环上的一条弦(即连接圆上两点的直线)。相邻两根球线之间有长度为 $g$ 的空隙。所有球线关于圆心对称,即有一对球线的中心正好经过圆环的中心。
苍蝇是一个半径为 $f$ 的球体。假设球拍沿垂直于圆环平面的直线运动。还假设苍蝇的中心在球拍外半径以内,并且在该半径范围内的任意位置出现的概率相等。只要苍蝇与球拍(包括圆环或球线)有任何重叠,就算打中了苍蝇。
输入格式
第一行包含一个整数 $N$,表示测试用例的数量。
接下来的 $N$ 行,每行包含 $f$、$R$、$t$、$r$ 和 $g$ 五个数,数值之间用一个空格隔开。所有数值均保留 6 位小数。
输出格式
共 $N$ 行,每行格式为 "Case #$k$: $P$",其中 $k$ 表示测试用例编号,$P$ 表示苍蝇被球拍打中的概率。
只要答案的相对或绝对误差不超过 $10^{-6}$,即视为正确。
说明/提示
- $f$、$R$、$t$、$r$ 和 $g$ 均为正数,且不超过 10000。
- $t < R$
- $f < R$
- $r < R$
**小数据集(5 分,测试集 1 - 可见)**
- $1 \leq N \leq 30$
- 球线总数最多为 60(即每个方向最多 30 根)。
**大数据集(20 分,测试集 2 - 隐藏)**
- $1 \leq N \leq 100$
- 球线总数最多为 2000(即每个方向最多 1000 根)。
由 ChatGPT 4.1 翻译