#joi2021yo2c. [joi2021_yo2_c]イベント巡り (Event Hopping)
[joi2021_yo2_c]イベント巡り (Event Hopping)
问题文
IOI 国有两个城镇,分别编号为 1 和 2。
这些城镇共举办了 N 个事件。这些事件从 1 到 N 进行编号。事件 i(1 ≤ i ≤ N)在城镇 Pi 中举行,举办时间从时刻 Si + 0.1 到时刻 Si + 0.9。其中 Si 是一个整数。为了参加事件 i,JOI 必须在时刻 Si + 0.1 到 Si + 0.9 期间一直待在城镇 Pi。
JOI 决定进行事件巡回。在事件巡回中,JOI 可以参加多个事件,如果需要的话,还可以在城镇之间移动。JOI 在时刻 0 开始进行事件巡回。这时,他可以从任意一个城镇开始。
JOI 可以双向移动城镇 1 和城镇 2 之间。移动两个城镇所需的时间是 JOI 参加的事件数量 j,即 D + K × j。
给定有关事件和城镇移动的信息,请编写程序来确定 JOI 可以参加的事件数量的最大值。
约束条件
- 1 ≤ N ≤ 200,000。
- 1 ≤ D ≤ 。
- 0 ≤ K ≤ 。
- 1 ≤ Pi ≤ 2(1 ≤ i ≤ N)。
- 1 ≤ Si ≤ (1 ≤ i ≤ N)。
- Si ≠ Sj(1 ≤ i < j ≤ N)。
- 输入的值均为整数。
小任务
- (8 分)K = 0,N ≤ 20。
- (11 分)K = 0,N ≤ 4,000。
- (24 分)K = 0。
- (12 分)N ≤ 160。
- (23 分)N ≤ 4,000。
- (22 分)无附加约束条件。
输入
输入从标准输入中以以下格式给出。
N D K P1 S1 P2 S2 ⋮ PN SN
输出
将 JOI 可以参加的事件数量的最大值以一行输出到标准输出中。
输入示例 1
输出示例 1
例如,通过以下行动,JOI 可以参加 4 个事件:
- 在时刻 0,JOI 在城镇 1。
- 在时刻 1.1 到时刻 1.9,JOI 在城镇 1 参加事件 1。
- 在时刻 2.1 到时刻 2.9,JOI 在城镇 1 参加事件 2。
- 在时刻 3 到时刻 6,用时 3(等于 D + K × 2)从城镇 1 移动到城镇 2。
- 在时刻 6.1 到时刻 6.9,JOI 在城镇 2 参加事件 5。
- 在时刻 7 到时刻 10,用时 3(等于 D + K × 3)从城镇 2 移动到城镇 1。
- 在时刻 10.1 到时刻 10.9,JOI 在城镇 1 参加事件 3。
由于无论如何行动,JOI 最多只能参加 5 个事件,因此输出 4。
该输入示例满足所有小任务的约束条件。
输入示例 2
输出示例 2
例如,通过以下行动,JOI 可以参加 6 个事件:
- 在时刻 0,JOI 在城镇 2。
- 在时刻 2.1 到时刻 2.9,JOI 在城镇 2 参加事件 1。
- 在时刻 3 到时刻 8,用时 5(等于 D + K × 1)从城镇 2 移动到城镇 1。
- 在时刻 8.1 到时刻 8.9,JOI 在城镇 1 参加事件 2。
- 在时刻 11.1 到时刻 11.9,JOI 在城镇 1 参加事件 4。
- 在时刻 12 到时刻 23,用时 11(等于 D + K × 3)从城镇 1 移动到城镇 2。
- 在时刻 23.1 到时刻 23.9,JOI 在城镇 2 参加事件 5。
- 在时刻 24.1 到时刻 24.9,JOI 在城镇 2 参加事件 6。
- 在时刻 25.1 到时刻 25.9,JOI 在城镇 2 参加事件 7。
由于无论如何行动,JOI 最多只能参加 7 个事件,因此输出 6。
该输入示例满足小任务 4、5 和 6 的约束条件。
输入示例 3
输出示例 3
该输入示例满足所有小任务的约束条件。
输入示例 4
输出示例 4
该输入示例满足小任务 4、5 和 6 的约束条件。