QOJ.ac

QOJ

時間限制: 10 s 記憶體限制: 1024 MB 總分: 34

#5852. 忍术

统计

忍术是神秘的日本刺客——忍者所使用的武术。作为忍术练习的初学者,你的第一个任务是掌握抓钩的使用。

抓钩是一种高科技装置,由一根(非常坚固且非常细的)绳子系着一个钩子组成。正确使用抓钩的方法是向目标投掷钩子,并希望它能钩住。

这一次,你成功了!你现在钩住了一个位于 $(0, 0)$ 的目标。你的绳子向左延伸,你位于绳子的末端;当你跳跃时,你将开始绕着目标进行逆时针摆动。在 $(0, 0)$ 的右侧和上方还有其他目标,坐标为 $(x_i, y_i)$,其中 $x_i \ge 0$ 且 $y_i \ge 0$。当绳子的内部点(非两端)接触到一个或多个目标时,绳子会绕着距离其运动端最近的目标弯曲。忽略你的初始速度;因为你是忍者,你的速度足够快,以至于你会持续绕着目标弯曲,直到你绕着单个目标旋转。

你的绳子当前长度为 $R$,但在开始摆动之前,你可以选择将其剪短到任意长度 $r$(包括非整数)。因此,你将从 $(-r, 0)$ 开始,并向下(逆时针)向 $(0, -r)$ 摆动。

一次摆动中,绳子上最多能产生多少个弯折?当绳子接触到一个目标并随后绕该目标旋转非零度数时,就会产生一个弯折。绳子将始终保持完全笔直(同样,因为你是忍者,这是可能的),除了在弯折处。

样例

在上面的例子中,有 6 个点:

  • $(0, 0)$,
  • $(3, 1)$,
  • $(12, 4)$,
  • $(14, 5)$,
  • $(13, 7)$,以及
  • $(7, 10)$。

你有一根长度为 24 的绳子。如果你不剪短绳子,那么你将绕着点 $(12, 4)$ 弯曲,然后绕着点 $(14, 5)$,接着绕着点 $(13, 7)$,最后你将困在绕着点 $(7, 10)$ 旋转的状态,剩余约 0.1705 单位的绳子。这总共产生了 4 个弯折。虽然你接触到了点 $(3, 1)$,但它没有贡献弯折,因为它与点 $(0, 0)$ 和 $(12, 4)$ 共线。

然而,如果你将绳子剪短 0.18 单位,你将没有足够的长度到达点 $(7, 10)$,而是会沿着以下路径:

(0, 0)--(12, 4)--(14, 5)--(13, 7)--(12, 4)--(14, 5)

并最终绕着点 $(14, 5)$ 旋转,剩余约 1.3004 单位的绳子。这条路径总共产生了 5 个弯折,是一个最优解。

下面样例输入中的 Case #1 代表了这个例子。

输入格式

输入的第一行包含 $T$,即测试用例的数量。每个测试用例的第一行包含两个整数:$N$ 和 $R$。接下来的 $N$ 行,每行包含一对整数 $x_i$ 和 $y_i$,表示目标的坐标,第一个目标位于 $(0, 0)$。

输出格式

对于每个测试用例,输出一行形式为 "Case #$C$: $k$" 的内容,其中 $C$ 是从 1 开始的用例编号,$k$ 是在一次摆动中绳子上能产生的最大弯折数。

数据范围

$1 \le T \le 100$

所有目标坐标均为整数。

所有目标位于不同的位置。

第一个列出的目标位于 $(0, 0)$。

至少存在一个 $r$ 的值能给出最优解,且具有以下性质:长度为 $r - 0.999999$ 的绳子也能给出相同的解(相同的弯折序列)。

子任务

小数据集(测试集 1 - 可见;11 分)

$1 \le N \le 10$

$1 \le R \le 1,000$

$0 \le x_i \le 1,000$

$0 \le y_i \le 1,000$

大数据集(测试集 2 - 隐藏;23 分)

$1 \le N \le 1,000$

$1 \le R \le 10^9$

$0 \le x_i \le 10^9$

$0 \le y_i \le 10^9$

样例

样例输入 1

6
6 24
0 0
3 1
12 4
14 5
13 7
7 10
2 1
0 0
2 0
2 1
0 0
1 0
2 10
0 0
4 0
3 50
0 0
9 0
10 0
3 12
0 0
3 0
3 4

样例输出 1

Case #1: 5
Case #2: 0
Case #3: 0
Case #4: 2
Case #5: 12
Case #6: 3

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.