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 翻译