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 完成。