#P16624. [GKS 2017 #D] Sightseeing

[GKS 2017 #D] Sightseeing

题目描述

旅行时,你喜欢在尽可能多的城市观光,但有时你可能无法做到,因为你需要赶巴士去下一个城市。为了最大化旅行的乐趣,你决定编写一个程序来优化你的行程安排。

你在时间 00 从城市 11 出发,计划按升序依次前往城市 22NN,并访问每个城市。从每个城市 ii 到下一个城市 i+1i+1 都有巴士服务。第 ii 趟巴士服务的时间表由三个整数 SiS_iFiF_iDiD_i 指定,分别表示首班车时间、发车间隔和乘车耗时。形式化地说,这意味着在时间 Si+xFiS_i + x F_i(其中 xx 为整数且 x0x \ge 0)都有一班巴士从城市 ii 出发,该巴士需要 DiD_i 时间到达城市 i+1i+1

11N1N-1 之间的每个城市(包含两端),你可以选择花 TsT_s 时间观光,然后再等待下一班巴士;也可以直接等待下一班巴士而不观光。你不能在同一座城市多次观光。假设上车和下车不耗时。你必须在最晚时间 TfT_f 之前到达城市 NN。(注意,即使你提前到达城市 NN,也不能在那里观光,因为那里没什么可看的!)

你最多可以在多少个城市观光?

输入格式

输入的第一行包含一个整数 TT,表示测试用例的数量。接下来有 TT 个测试用例。

每个测试用例的第一行包含三个整数 NNTsT_sTfT_f,分别表示城市的数量、在任何一座城市观光所需的时间,以及到达城市 NN 的最晚时间。

接下来 N1N-1 行,第 ii 行包含三个整数 SiS_iFiF_iDiD_i,表示从城市 ii 到城市 i+1i+1 的巴士的首班车时间、发车间隔和乘车耗时。

输出格式

对于每个测试用例,输出一行,格式为 Case #x: y,其中 xx 是测试用例编号(从 11 开始),yy 是能够在最晚时间 TfT_f 之前到达城市 NN 的前提下,最多可以观光的城市数量。如果不可能在最晚时间 TfT_f 之前到达城市 NN,则输出 Case #x: IMPOSSIBLE

4
4 3 12
3 2 1
6 2 2
1 3 2
3 2 30
1 2 27
3 2 1
4 1 11
2 1 2
4 1 5
8 2 2
5 10 5000
14 27 31
27 11 44
30 8 20
2000 4000 3
Case #1: 2
Case #2: 0
Case #3: IMPOSSIBLE
Case #4: 4

提示

在第一个测试用例中,你可以在城市 11 观光,然后乘坐时间 33 出发的巴士,在时间 44 到达城市 22。你可以在城市 22 观光,然后乘坐时间 88 出发的巴士。当你于时间 1010 到达城市 33 时,立即乘坐下一班巴士,恰好于时间 1212 到达城市 44

限制条件

1T1001 \le T \le 100

小数据集(测试集 11 – 可见)

2N162 \le N \le 16

1Si50001 \le S_i \le 5000

1Fi50001 \le F_i \le 5000

1Di50001 \le D_i \le 5000

1Ts50001 \le T_s \le 5000

1Tf50001 \le T_f \le 5000

大数据集(测试集 22 – 隐藏)

2N20002 \le N \le 2000

1Si1091 \le S_i \le 10^9

1Fi1091 \le F_i \le 10^9

1Di1091 \le D_i \le 10^9

1Ts1091 \le T_s \le 10^9

1Tf1091 \le T_f \le 10^9

翻译由 DeepSeek V4 Pro 完成