P13453 [GCJ 2009 Finals] Lights

题目描述

在一个大的正方形房间里,有两个点光源:一个是红色的,另一个是绿色的。房间里还有 $n$ 根圆柱形立柱。 光线沿直线传播,并会被墙壁和立柱吸收。因此,立柱会产生阴影:它们不会让光线穿透。在房间的某些区域,光线无法到达(黑色);有些区域只有一个光源能够照射到(红色或绿色);还有一些区域两个光源的光线都能照到(黄色)。请你计算房间内每种颜色区域的总面积。不要计算立柱本身的面积。

输入格式

- 第一行包含一个整数 $T$,表示测试用例的数量。 每个测试用例依次包含: - 一行,包含红色光源的坐标 $x$、$y$。 - 一行,包含绿色光源的坐标 $x$、$y$。 - 一行,包含立柱的数量 $n$。 - 接下来 $n$ 行,每行包含三个数 $x$、$y$、$r$,表示一个立柱的圆心坐标为 $(x, y)$,半径为 $r$。 房间是一个满足 $0 \leq x, y \leq 100$ 的正方形。立柱、房间的墙壁和光源都是互不相交、互不接触的。

输出格式

对于每个测试用例,输出: ``` Case #X: black area red area green area yellow area ``` 其中 $X$ 是测试编号(从 1 开始),每个面积为一个实数。 只要你的答案的绝对误差或相对误差不超过 $10^{-5}$,即可被接受。

说明/提示

**限制条件** - 所有输入数据均为整数。 - $1 \leq T \leq 15$ - $0 \leq x, y \leq 100$ - $1 \leq r \leq 49$ **小数据集(21 分)** - 时间限制:5 秒 - $0 \leq n \leq 1$ **大数据集(45 分)** - 时间限制:30 秒 - $0 \leq n \leq 50$ 翻译由 ChatGPT-4.1 完成。