QOJ.ac

QOJ

時間限制: 1 s 記憶體限制: 512 MB 總分: 100

#12972. 射箭

统计

去年夏天,你观看了 2012 年伦敦奥运会的所有比赛。射箭是一项有趣的运动(通过射箭击中目标),但在本题中,我们处理的是一种新型的射箭。

在这种新型射箭中,玩家拥有的箭可以穿透任何目标并射向无穷远处(同一支箭可能会击中多个目标),玩家周围会有许多目标,这些目标可能会相互交叉或重叠。

从俯视图来看,你可以将目标建模为线段,将玩家建模为原点处的一个点(点 $(0,0)$ 即为原点),同时不会有任何目标与玩家的位置相交。

你非常有兴趣计算玩家使用一支箭可以穿透的目标的期望数量,如果他向随机方向射箭(有无数个不同的方向,且每个方向被选中的概率相同)。

例如,下图解释了第一个测试样例,其中玩家位于原点,有两个目标 $T_1$(端点为 $(1,5)$ 和 $(3,3)$)以及 $T_2$(端点为 $(3,5)$ 和 $(6,2)$),你可以注意到有一个区域,玩家向该区域射箭可以穿透两个目标;有两个区域,他只能穿透一个目标;最后一个区域他将无法穿透任何目标。

注意,目标可以在其两个端点之间的任何点(包含端点)被击中。

输入格式

你的程序将在一个或多个测试用例上进行测试。输入的第一行是一个整数 $T$,表示测试用例的数量($1 \le T \le 100$)。接下来是各个测试用例,每个测试用例的第一行包含一个整数 $N$($1 \le N \le 100$),表示游戏中的目标数量。接下来的 $N$ 行,每行包含 4 个由空格分隔的整数 $X_1, Y_1, X_2, Y_2$($-100 \le X_1, Y_1, X_2, Y_2 \le 100$),表示第 $i$ 个目标的端点 $(X_1, Y_1)$ 和 $(X_2, Y_2)$。

输出格式

对于每个测试用例,请在单行上打印一个数字,表示玩家使用一支箭可以穿透的目标的期望数量,保留五位小数。

样例

输入 1

2
2
1 5 3 3
3 5 6 2
8
3 0 0 3
0 3 -3 0
-3 0 0 -3
0 -3 3 0
3 3 -3 3
-3 3 -3 -3
-3 -3 3 -3
3 -3 3 3

输出 1

0.20636
2.00000

Discussions

About Discussions

The discussion section is only for posting: General Discussions (problem-solving strategies, alternative approaches), and Off-topic conversations.

This is NOT for reporting issues! If you want to report bugs or errors, please use the Issues section below.

Open Discussions 0
No discussions in this category.

Issues

About Issues

If you find any issues with the problem (statement, scoring, time/memory limits, test cases, etc.), you may submit an issue here. A problem moderator will review your issue.

Guidelines:

  1. This is not a place to publish discussions, editorials, or requests to debug your code. Issues are only visible to you and problem moderators.
  2. Do not submit duplicated issues.
  3. Issues must be filed in English or Chinese only.
Active Issues 0
No issues in this category.
Closed/Resolved Issues 0
No issues in this category.