QOJ.ac

QOJ

حد الوقت: 6 s حد الذاكرة: 1024 MB مجموع النقاط: 25

#5927. 毕业要求

الإحصائيات

在 Awesome Programmer University 毕业之前,学生们通常需要完成一些“毕业要求”。其中一项就是逆向绕行交通环岛。对大多数人来说,这已经足够疯狂了,但作为一项额外的挑战,你想要看看自己是否能在不停车的情况下,逆向绕行交通环岛多次。

交通环岛由 $N$ 个均匀分布在圆周上的交叉路口组成。汽车通常会在一个交叉路口进入环岛,然后每秒移动到下一个逆时针方向的交叉路口,直到最终到达目的地并离开。

你已经观察了汽车进入和离开交通环岛 $X$ 秒。对于每一辆车,你记录了它进入环岛的时间,以及它进入和离开的交叉路口。所有汽车都以每秒 1 个交叉路口的速率逆时针移动。你观察到的每辆车在回到它进入的交叉路口之前就已经离开了环岛。交通环岛有多条车道,因此多辆车可以在同一时间占据同一位置。

如果你计划得当,在这段时间内你最多能顺时针驾驶多久?你必须在某个整数时间 $\ge 0$ 进入环岛,在时间 $\le X$ 时离开,且一旦离开,就不允许再回来。在环岛内时,你必须以每秒 1 个交叉路口的速率顺时针行驶。为了安全起见(好吧,在交通环岛上逆向行驶能有多安全呢),你绝对不能触碰或超过其他车辆。特别地,你不能在另一辆车正要进入的交叉路口离开环岛,也不能在另一辆车正要离开的交叉路口进入环岛。你可以选择进入和离开环岛的时间与地点。

输入格式

输入的第一行包含测试用例的数量 $T$。接下来是 $T$ 个测试用例。 每个测试用例的第一行描述了你观察到的汽车数量 $C$。第二行包含两个整数 $X$ 和 $N$ —— 你观察环岛的时间(以秒为单位)以及环岛上的交叉路口数量。接下来的 $C$ 行描述了你观察到的汽车。每一行包含三个整数 $s_i$、$e_i$ 和 $t_i$ —— 分别表示汽车进入环岛的交叉路口、离开的交叉路口以及进入的时间。交叉路口编号为 1 到 $N$,按逆时针方向排列(即交叉路口 2 是交叉路口 1 逆时针方向的下一个路口)。

输出格式

对于每个测试用例,输出一行 "Case #x: y",其中 $x$ 是用例编号(从 1 开始),$y$ 是你可以顺时针行驶的最长时间(秒)。注意,如果你根本无法进入环岛,或者虽然能进入但无法行驶哪怕一个交叉路口,结果 $y$ 都可以为 0。

请记住,你必须在整数秒时刻进入环岛 —— 你必须在整数时间进入,因此在到达每个交叉路口时也都是整数时间。

数据范围

时间限制:6 秒。 内存限制:1GB。

$1 \le T \le 100$ $1 \le s_i, e_i \le N$ $s_i \neq e_i$ $0 \le t_i$ 每辆被观察到的汽车都在时间 $X$ 或之前离开环岛。

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

$3 \le N \le 10$ $1 \le X \le 10$ $0 \le C \le 10$

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

$3 \le N \le 10^{10}$ $1 \le X \le 10^{10}$ $0 \le C \le 1000$

样例

输入 1

5
1
3 4
1 4 0
6
3 5
5 2 0
5 1 2
1 3 0
1 2 2
2 3 0
3 4 0
3
2 3
1 3 0
2 1 0
3 2 0
0
6 4
1
2 3
1 3 0

输出 1

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

说明

在第一个样例中,有一辆车,行驶路径如图所示。有多种方式可以让我们逆向行驶一秒 —— 例如,我们可以在时间 1 进入交叉路口 1(我们不能在时间 0 进入,因为另一辆车在那里),然后行驶到交叉路口 4(我们不能继续前往交叉路口 3,因为我们会经过那辆正从 3 前往 4 的车)。另一种选择是在时间 0 进入交叉路口 4,然后行驶到交叉路口 3(随后离开)。

在第二个样例中,我们可以通过在时间 1 进入交叉路口 5,并逆向行驶到交叉路口 3,从而行驶两秒。在第三个样例中,我们甚至无法进入环岛 —— 在每个整秒时刻,所有交叉路口都有车。在第四个样例中,没有车,所以我们可以在时间 0 从任意点进入,并绕圈行驶直到时间 6。在第五个样例中,我们可以进入环岛,但由于只有三个交叉路口,如果我们尝试移动到下一个路口,总是会与另一辆车发生碰撞。

注意:在交通环岛上逆向行驶通常不是明智之举,可能会对自己或他人造成伤害。Google(特别是 Google Code Jam)鼓励你不要尝试这样做。

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.